用架構(gòu)設(shè)計(jì)實(shí)戰(zhàn):從不確定性管理到工程落地)
1. 為什么人人都在聊“AI應(yīng)用架構(gòu)設(shè)計(jì)”卻沒幾個(gè)人講清楚最近這兩年AI相關(guān)的項(xiàng)目如雨后春筍但真正落地到生產(chǎn)環(huán)境、能穩(wěn)定跑上幾個(gè)月的反而不多。我身邊不少朋友拿著大模型API調(diào)通了demo一上生產(chǎn)就崩要么延遲扛不住要么成本失控要么多Agent協(xié)作起來根本不可控。問題出在哪大多數(shù)人是“有模型思維沒有架構(gòu)思維”?!癆I應(yīng)用架構(gòu)設(shè)計(jì)”這個(gè)事兒說白了就是當(dāng)你決定做一個(gè)AI應(yīng)用時(shí)怎么把模型能力、業(yè)務(wù)邏輯、數(shù)據(jù)流、外部依賴、成本預(yù)算這些要素組織成一個(gè)能穩(wěn)定運(yùn)行、可擴(kuò)展、可維護(hù)的系統(tǒng)。它不等同于“調(diào)API”也不等同于“訓(xùn)練模型”而是夾在兩者之間的那層工程化設(shè)計(jì)。這篇文章我就以自己的項(xiàng)目實(shí)踐為基礎(chǔ)把AI應(yīng)用架構(gòu)設(shè)計(jì)的核心邏輯、實(shí)操套路、踩坑記錄一次講透。適合正在做AI產(chǎn)品原型、準(zhǔn)備上生產(chǎn)的開發(fā)者也適合剛?cè)胄邢虢⑷终J(rèn)知的初學(xué)者。你會看到我實(shí)際項(xiàng)目中怎么選型、怎么拆模塊、怎么控制成本以及那些文檔里不會寫的細(xì)節(jié)。先說個(gè)結(jié)論AI應(yīng)用架構(gòu)設(shè)計(jì)和傳統(tǒng)后端架構(gòu)最大的區(qū)別在于不確定性管理。傳統(tǒng)接口返回的是確定結(jié)構(gòu)你只管處理正常和異常分支而大模型輸出本身就帶隨機(jī)性你的架構(gòu)必須把“不確定性”當(dāng)成頭等公民來設(shè)計(jì)。這個(gè)認(rèn)知不建立后面全是坑。2. 架構(gòu)設(shè)計(jì)前先想清楚這四件事2.1 你的AI應(yīng)用到底屬于哪種類型拿到一個(gè)AI應(yīng)用的需求我第一件事不是畫架構(gòu)圖而是先歸類。根據(jù)我自己的實(shí)踐市面上的AI應(yīng)用大致能分成四類每一類的架構(gòu)側(cè)重點(diǎn)完全不同對話型應(yīng)用比如客服機(jī)器人、知識庫問答。核心是對話管理、上下文管理、檢索增強(qiáng)RAG。架構(gòu)重點(diǎn)在“怎么把知識塞給模型”和“怎么管理多輪上下文”。生成型應(yīng)用比如文案生成、圖片生成、代碼生成。核心是Prompt工程、輸出結(jié)構(gòu)化、批量任務(wù)調(diào)度。架構(gòu)重點(diǎn)在“怎么穩(wěn)定拿到符合格式的結(jié)果”。決策型應(yīng)用比如AI Agent、自動化流程、智能分析。核心是任務(wù)拆解、工具調(diào)用、狀態(tài)管理。架構(gòu)重點(diǎn)在“怎么讓模型安全地調(diào)用外部工具并完成多步任務(wù)”。增強(qiáng)型應(yīng)用比如AI輔助編程、AI輔助設(shè)計(jì)。核心是人機(jī)協(xié)作、實(shí)時(shí)響應(yīng)。架構(gòu)重點(diǎn)在“怎么在低延遲下提供高質(zhì)量輔助”。我做過一個(gè)多Agent協(xié)作的項(xiàng)目一開始按對話型應(yīng)用設(shè)計(jì)結(jié)果發(fā)現(xiàn)根本跑不通——因?yàn)锳gent之間要傳遞狀態(tài)、要共享記憶、要編排執(zhí)行順序這完全是決策型的活兒。后來重構(gòu)架構(gòu)把Agent編排層單獨(dú)拎出來才算穩(wěn)下來。這個(gè)歸類特別重要因?yàn)樗苯記Q定你后面怎么選技術(shù)棧。比如你是對話型應(yīng)用那核心可能就是一個(gè)RAG管道加會話管理服務(wù)你是決策型應(yīng)用那核心就是Agent編排引擎加工具注冊中心。2.2 先算賬再動手成本估算決定架構(gòu)形態(tài)這是我最想強(qiáng)調(diào)的一點(diǎn)。很多人做AI應(yīng)用架構(gòu)上來就聊技術(shù)選型結(jié)果做著做著發(fā)現(xiàn)成本爆了。AI應(yīng)用的成本模型和傳統(tǒng)應(yīng)用完全不同傳統(tǒng)應(yīng)用是服務(wù)器成本AI應(yīng)用是Token成本。我隨手算一個(gè)例子假設(shè)你要做一個(gè)基于RAG的文檔問答系統(tǒng)每天1000個(gè)用戶每個(gè)用戶平均提問10次每次提問需要輸入2000 Token的上下文、輸出500 Token的回復(fù)。那一天的Token消耗是多少輸入1000 × 10 × 2000 20,000,000 Token輸出1000 × 10 × 500 5,000,000 Token如果用的是中等價(jià)位的模型按輸入0.5元/百萬Token、輸出2元/百萬Token算輸入成本20 × 0.5 10元/天輸出成本5 × 2 10元/天每天成本20元一個(gè)月600元看起來還行但注意這里沒有算向量化成本、沒有算知識庫更新成本、沒有算失敗重試的額外Token消耗。而且如果用戶量翻十倍成本是線性翻的。更不要說如果你用的是更高規(guī)格的模型成本可能是這個(gè)數(shù)字的幾十倍。這就是為什么架構(gòu)設(shè)計(jì)階段就要做成本模型。我見過一個(gè)團(tuán)隊(duì)用最高規(guī)格的模型做每個(gè)請求上線一個(gè)月成本比預(yù)估高出30倍最后不得不回滾。架構(gòu)層面省成本的方式很多緩存、模型分級、上下文裁剪、批處理——但這些都必須提前設(shè)計(jì)后面補(bǔ)是補(bǔ)不上的。我的建議是在架構(gòu)文檔里單獨(dú)開一節(jié)“成本模型”把每種核心場景的Token消耗算清楚再乘以預(yù)估的調(diào)用量。這個(gè)數(shù)字決定你選什么模型、要不要做緩存、要不要做模型路由。2.3 數(shù)據(jù)流和狀態(tài)管理是AI架構(gòu)的隱藏難點(diǎn)傳統(tǒng)架構(gòu)里數(shù)據(jù)流是清晰的請求進(jìn)來處理響應(yīng)出去。AI應(yīng)用不一樣尤其是Agent類應(yīng)用數(shù)據(jù)流是多輪、多路徑、可能回退的。我做多Agent協(xié)作項(xiàng)目時(shí)最頭疼的不是Agent本身的推理能力而是狀態(tài)同步。兩個(gè)Agent協(xié)作完成一個(gè)任務(wù)Agent A生成了中間結(jié)果Agent B需要基于這個(gè)結(jié)果繼續(xù)做——那這個(gè)中間結(jié)果存在哪里以什么格式存如果Agent B失敗了重跑Agent A的結(jié)果還在不在這個(gè)問題不解決架構(gòu)就是空中樓閣。我當(dāng)時(shí)采用的方案是把中間狀態(tài)持久化到Redis里每個(gè)Agent節(jié)點(diǎn)執(zhí)行前先檢查狀態(tài)執(zhí)行后更新狀態(tài)。同時(shí)在數(shù)據(jù)庫里記錄一條完整的執(zhí)行軌跡方便回溯。這個(gè)設(shè)計(jì)很笨但穩(wěn)定。還有一個(gè)容易坑的地方上下文管理。對話型應(yīng)用里你不能把整個(gè)對話歷史都塞給模型Token成本扛不住模型也容易“迷失”。必須做上下文窗口管理——哪些內(nèi)容保留、哪些內(nèi)容壓縮、哪些內(nèi)容進(jìn)檢索。這塊做不好你的應(yīng)用對話超過五輪就開始退化。2.4 選型不是選“最火的”是選“最匹配你約束條件的”技術(shù)選型成了很多人糾結(jié)的地方。今天LangChain火了明天又出了新框架后天有人告訴你這些都別用自己寫Prompt就行。我的立場是選型評估框架要看五個(gè)維度——團(tuán)隊(duì)熟悉度、生態(tài)成熟度、可調(diào)試性、性能開銷、鎖定風(fēng)險(xiǎn)。五個(gè)維度里團(tuán)隊(duì)熟悉度排第一因?yàn)锳I應(yīng)用本身不確定性就高如果技術(shù)棧還不熟等于雙重不確定性疊加。框架選型上大廠有自研的Agent框架普通團(tuán)隊(duì)一般從LangChain或LlamaIndex起步。但我實(shí)際用過之后的感受是LangChain抽象層級高寫起來快但出問題的時(shí)候排查鏈路很長LlamaIndex對RAG場景更友好如果你要做的Agent邏輯比較復(fù)雜自定義編排輕量框架可能比大而全的框架更可控。我現(xiàn)在的做法是RAG場景用LlamaIndexAgent編排自己寫注冊中心和狀態(tài)管理Prompt管理單獨(dú)做一個(gè)配置中心。這個(gè)組合不一定適合所有人但對我而言可調(diào)試性最好。架構(gòu)設(shè)計(jì)沒有銀彈只有約束條件下的最優(yōu)解。3. 核心架構(gòu)拆解從零搭建一個(gè)可落地的AI應(yīng)用3.1 整體分層把AI應(yīng)用當(dāng)成一個(gè)“有大腦的微服務(wù)系統(tǒng)”我習(xí)慣把AI應(yīng)用架構(gòu)分成四層接入層負(fù)責(zé)和用戶交互包括API網(wǎng)關(guān)、WebSocket服務(wù)、消息隊(duì)列入口。這一層做鑒權(quán)、限流、日志。編排層AI應(yīng)用的核心。包括意圖識別、任務(wù)規(guī)劃、Agent調(diào)度、上下文管理。這一層決定你的應(yīng)用“聰明不聰明”。模型層封裝各種模型的調(diào)用包括大語言模型、向量模型、多模態(tài)模型。這一層做模型路由、重試、降級。數(shù)據(jù)層包括向量數(shù)據(jù)庫、結(jié)構(gòu)化數(shù)據(jù)庫、緩存、對象存儲。這一層管知識庫、狀態(tài)、歷史記錄。這四層劃分的核心邏輯是每層只做自己該做的事。我見過很多失敗的架構(gòu)就是把Prompt邏輯寫進(jìn)業(yè)務(wù)服務(wù)里把業(yè)務(wù)邏輯寫進(jìn)模型調(diào)用里最后全糊成一團(tuán)想升級模型都找不到改哪里。分層還有一個(gè)好處每一層都可以獨(dú)立擴(kuò)展。接入層扛不住就加實(shí)例模型層延遲高就做緩存數(shù)據(jù)層容量不夠就擴(kuò)容。這種架構(gòu)演進(jìn)路徑最平滑。3.2 模型層的三個(gè)關(guān)鍵設(shè)計(jì)路由、重試、降級模型層是整個(gè)架構(gòu)里最容易被忽視但最影響體驗(yàn)的一層。我總結(jié)出三個(gè)關(guān)鍵設(shè)計(jì)模型路由不是所有請求都用同一個(gè)模型。我現(xiàn)在的做法是簡單任務(wù)走輕量模型復(fù)雜推理走重量級模型敏感任務(wù)走私有化部署模型。路由規(guī)則可以用規(guī)則引擎也可以用一個(gè)小分類模型。這個(gè)設(shè)計(jì)在成本控制上的貢獻(xiàn)最大。比如我的一個(gè)知識庫問答系統(tǒng)簡單的“這個(gè)文檔講了什么”類問題直接走輕量模型回答復(fù)雜的“對比這兩份合同的差異”類問題才升級到重量級模型。算下來成本能省40%以上。重試策略大模型接口有隨機(jī)性有時(shí)候同一個(gè)Prompt這次成功下次失敗。所以模型層的重試必須做成指數(shù)退避——第一次失敗等1秒重試第二次等2秒第三次等4秒最多重試三次。超過三次就降級。這里有個(gè)細(xì)節(jié)重試的上游要語義冪等。也就是說如果你讓模型執(zhí)行一個(gè)“下單”操作重試可能造成重復(fù)下單。這種場景必須在重試前做狀態(tài)檢查或者把操作設(shè)計(jì)成冪等的。降級方案任何依賴大模型的應(yīng)用都要提前設(shè)計(jì)“模型掛了怎么辦”。我的方案是三級降級第一級切到備用模型服務(wù)商第二級切到本地小模型第三級返回緩存過的相似答案。三級都掛了才向用戶報(bào)錯(cuò)。這個(gè)設(shè)計(jì)讓我好幾次躲過了上游服務(wù)商故障的坑。3.3 編排層的核心難點(diǎn)多Agent協(xié)作怎么設(shè)計(jì)多Agent協(xié)作現(xiàn)在很火但真正設(shè)計(jì)好的不多。我做過的多Agent協(xié)作架構(gòu)核心是三個(gè)組件任務(wù)分解器大任務(wù)進(jìn)來先把任務(wù)拆成多個(gè)子任務(wù)。這一步我用的是“先讓模型做規(guī)劃再用規(guī)則校驗(yàn)”的方式——模型輸出一個(gè)任務(wù)清單規(guī)則引擎檢查清單里的步驟是否合法比如有沒有缺少必要參數(shù)、有沒有循環(huán)依賴。調(diào)度器子任務(wù)之間可能有依賴關(guān)系調(diào)度器負(fù)責(zé)按依賴關(guān)系執(zhí)行。我的實(shí)現(xiàn)是用一個(gè)簡單的DAG有向無環(huán)圖來管理——先執(zhí)行無依賴的任務(wù)再執(zhí)行依賴就緒的任務(wù)。每個(gè)任務(wù)執(zhí)行完更新DAG的狀態(tài)。共享記憶庫多個(gè)Agent之間要共享信息不能每個(gè)Agent都各自維護(hù)自己的上下文。我用的方案是設(shè)計(jì)一個(gè)“黑板模式”——所有Agent都把中間結(jié)果寫到共享存儲里需要信息的Agent從里面取。這個(gè)模式雖然簡單但在多Agent協(xié)作里非常有效。說一個(gè)實(shí)際的坑。我做多Agent協(xié)作時(shí)兩個(gè)Agent會互相等待對方的結(jié)果形成死循環(huán)。排查了很久才發(fā)現(xiàn)是因?yàn)槿蝿?wù)分解器輸出的子任務(wù)之間存在循環(huán)依賴——Agent A的任務(wù)依賴Agent B的結(jié)果Agent B的任務(wù)又依賴Agent A的結(jié)果。解決方案是在DAG構(gòu)建時(shí)做循環(huán)檢測發(fā)現(xiàn)循環(huán)依賴就報(bào)錯(cuò)不讓調(diào)度器繼續(xù)跑。3.4 RAG架構(gòu)的落地細(xì)節(jié)不是連個(gè)向量庫就完事RAG檢索增強(qiáng)生成幾乎是知識庫問答類應(yīng)用的標(biāo)準(zhǔn)架構(gòu)。但很多團(tuán)隊(duì)的RAG效果不好問題往往不在模型而在檢索鏈路。一個(gè)完整的RAG架構(gòu)包括五個(gè)環(huán)節(jié)文檔加載、切分、向量化、檢索、合成回答。每個(gè)環(huán)節(jié)都有講究。文檔切分是最容易被低估的環(huán)節(jié)。切得太小語義被切斷切得太大檢索命中后塞給模型的Token太多。我的經(jīng)驗(yàn)是先按文檔結(jié)構(gòu)切再按大小切。比如先按標(biāo)題切出章節(jié)如果章節(jié)太大再按段落切而不是一上來就按固定字?jǐn)?shù)切。檢索環(huán)節(jié)有個(gè)進(jìn)階技巧叫HyDE假設(shè)性文檔嵌入——先讓模型根據(jù)問題生成一個(gè)假想的答案再用這個(gè)假想答案去檢索。這個(gè)技巧對于“問題表述比較模糊、但答案指向明確”的場景特別有效。還有一個(gè)坑是相關(guān)性閾值。向量檢索出來的結(jié)果不一定都相關(guān)如果不設(shè)閾值就會把不相關(guān)的片段也塞給模型導(dǎo)致回答質(zhì)量下降。我的做法是先跑一遍測試集統(tǒng)計(jì)相似度分?jǐn)?shù)的分布找一個(gè)平衡點(diǎn)做閾值低于閾值的直接過濾掉。RAG還有一個(gè)容易被忽略的問題知識庫更新。很多團(tuán)隊(duì)上線的知識庫就再也沒更新過。正確的做法是文檔變更時(shí)觸發(fā)增量向量化而不是全量重建。增量更新要做好指紋比對——只對變化的部分重新切分和向量化。4. 實(shí)操過程實(shí)錄一個(gè)多Agent協(xié)作系統(tǒng)的架構(gòu)演進(jìn)4.1 第一版所有邏輯寫在一起開發(fā)快但跑不穩(wěn)我第一版做多Agent協(xié)作系統(tǒng)時(shí)幾乎沒有架構(gòu)概念。一個(gè)服務(wù)里寫了Prompt調(diào)用、Agent調(diào)度、狀態(tài)存儲、工具執(zhí)行全部耦合在一起。開發(fā)確實(shí)快兩周就出了第一版。但問題也很快暴露每次升級一個(gè)Agent的能力都要?jiǎng)诱麠l鏈路排查問題的時(shí)候分不清是Prompt問題還是代碼問題最要命的是Agent執(zhí)行到一半失敗了狀態(tài)沒有恢復(fù)能力整個(gè)任務(wù)就得重來。這版的核心教訓(xùn)是AI應(yīng)用開發(fā)再快也不能跳過模塊化。尤其是Agent的調(diào)度邏輯必須和模型調(diào)用解耦否則你會被“改了一處、壞了一串”折磨死。4.2 第二版模塊化重構(gòu)把“不確定性”放進(jìn)單獨(dú)的一層第二版我做了全面重構(gòu)。核心變化是把架構(gòu)改成了四層模型同時(shí)還引入了一個(gè)關(guān)鍵設(shè)計(jì)——所有模型的輸入輸出都走統(tǒng)一的“消息協(xié)議”。也就是說不管是哪個(gè)Agent輸入輸出都是結(jié)構(gòu)化的JSON格式而不是裸的文本。這個(gè)設(shè)計(jì)一開始很痛苦因?yàn)槊總€(gè)Agent的輸出形態(tài)不同統(tǒng)一格式意味著要寫很多解析和適配的邏輯。但后來好處特別明顯首先是可以統(tǒng)一做日志和監(jiān)控其次是模型升級時(shí)只需要適配新的協(xié)議最重要的是Agent之間協(xié)作有了標(biāo)準(zhǔn)的接口契約。我還做了一件事把每類Agent的Prompt獨(dú)立成配置。Prompt不再散落在代碼里而是放在配置中心改Prompt不需要發(fā)版。這聽起來很簡單但在實(shí)際項(xiàng)目里非常救命——很多AI應(yīng)用的故障最后定位出來就是Prompt被改壞了或者被寫死了。4.3 第三版引入評估與觀測讓架構(gòu)“可度量”第二版跑通之后我發(fā)現(xiàn)一個(gè)尷尬的問題系統(tǒng)能跑了但你說不清它到底好不好。只能靠人工點(diǎn)一點(diǎn)、試一試。這對AI應(yīng)用來說是不可接受的。第三版我引入了兩個(gè)東西離線評估集和全鏈路追蹤。離線評估集是我最推薦的AI工程實(shí)踐。具體做法是挑選100條典型任務(wù)每條任務(wù)標(biāo)注期望的回答質(zhì)量分比如1-5分。每次改Prompt、換模型、調(diào)檢索邏輯都拿這100條任務(wù)跑一遍對比分?jǐn)?shù)變化。這個(gè)機(jī)制讓AI應(yīng)用的迭代真正有了“回歸測試”的概念。全鏈路追蹤則讓我看到了每次請求內(nèi)部發(fā)生了什么——哪個(gè)Agent耗時(shí)最長、哪次檢索沒命中、哪個(gè)工具調(diào)用失敗了。有了這些數(shù)據(jù)優(yōu)化才有方向不然就是瞎調(diào)。5. 實(shí)戰(zhàn)中的高頻問題與排查技巧5.1 Agent執(zhí)行死循環(huán)怎么定位和避免AI應(yīng)用最容易出現(xiàn)的問題之一就是Agent死循環(huán)。我遇到過的場景是Agent需要調(diào)用API獲取數(shù)據(jù)但API返回格式不對Agent嘗試重新調(diào)用又發(fā)現(xiàn)數(shù)據(jù)不對反復(fù)操作停不下來。排查思路分兩步。第一步看日志——把Agent的每一步操作都記錄下來包括調(diào)用的工具、傳入的參數(shù)、返回的結(jié)果。第二步設(shè)超時(shí)——每個(gè)Agent任務(wù)必須設(shè)置最大步數(shù)和最大執(zhí)行時(shí)間超過就強(qiáng)制中止。更根本的辦法是在架構(gòu)層面限制Agent的“自由度”比如規(guī)定同一個(gè)工具最多連續(xù)調(diào)用三次超過就觸發(fā)人工接管。這個(gè)規(guī)則寫起來很簡單但能攔住90%的死循環(huán)問題。5.2 RAG檢索結(jié)果太差是查“召回”還是查“排序”RAG效果差很多人的第一反應(yīng)是調(diào)向量相似度算法但大多數(shù)時(shí)候問題出在前面。我的排查套路是先看“召回”——檢索出來的文檔是不是相關(guān)的。如果召回了不相關(guān)的文檔問題在切分或者查詢改寫如果召回了相關(guān)文檔但排在后面的沒進(jìn)候選集問題在召回?cái)?shù)量設(shè)得太少。再看“排序”——相關(guān)文檔是不是排在了不相關(guān)文檔前面如果排序錯(cuò)了問題在重排序策略。我常用的一種做法是召回后加一個(gè)重排序模型——先用向量檢索召回20篇候選文檔再用重排序模型比如bge-reranker精排選出前5篇給模型。這一步能顯著提升RAG回答質(zhì)量代價(jià)是增加了一點(diǎn)延遲但這個(gè)延遲非常值得。5.3 模型輸出不穩(wěn)定有幾招緩解模型輸出的隨機(jī)性是繞不開的問題。我的幾個(gè)實(shí)用招數(shù)一是設(shè)置采樣參數(shù)。把temperature調(diào)低比如0.1或0.2輸出會穩(wěn)定很多代價(jià)是創(chuàng)造性下降。需要穩(wěn)定結(jié)構(gòu)輸出的場景我甚至?xí)胓reedy解碼。二是輸出結(jié)構(gòu)化約束。要求模型輸出JSON格式并且預(yù)先定義好JSON結(jié)構(gòu)。配合輸出解析器即使模型輸出有輕微格式問題也能容錯(cuò)解析。三是回答內(nèi)容做校驗(yàn)。對于關(guān)鍵字段設(shè)置校驗(yàn)規(guī)則——比如格式、范圍、必填性。校驗(yàn)不過就重新生成最多重試兩次超過就報(bào)錯(cuò)人工處理。四是給模型加“確定性提示”。比如要求“必須從給定材料中回答”“必須按照步驟回答”雖然不能完全消除隨機(jī)性但能顯著降低出錯(cuò)率。5.4 成本突然飆升先查這四個(gè)環(huán)節(jié)成本失控是AI應(yīng)用的一個(gè)隱形大坑。排查成本問題時(shí)我建議按優(yōu)先級查四個(gè)環(huán)節(jié)第一上下文長度。這是最大的成本黑洞。檢查是否有代碼把整個(gè)對話歷史甚至整個(gè)知識庫都塞給了模型。第二重試次數(shù)。模型失敗后反復(fù)重試每次重試都是錢。應(yīng)盡快用完重試策略后降級。第三模型路由。是否有請求走了高規(guī)格模型但其實(shí)只需要輕量模型。第四緩存命中率。同一個(gè)問題重復(fù)問是否有做緩存。我的經(jīng)驗(yàn)是把這四個(gè)環(huán)節(jié)逐一排查一遍十次有九次能找到成本異常的原因。而且這四個(gè)環(huán)節(jié)都是架構(gòu)設(shè)計(jì)階段可以優(yōu)化的后面修補(bǔ)成本很高。6. 給不同階段團(tuán)隊(duì)的三個(gè)實(shí)操建議做AI應(yīng)用架構(gòu)設(shè)計(jì)這幾年我根據(jù)團(tuán)隊(duì)情況總結(jié)了三個(gè)級別建議。對于剛起步的團(tuán)隊(duì)不要追求大而全先把一個(gè)端到端的最小閉環(huán)跑通。哪怕就是一個(gè)服務(wù)單模型單知識庫先把業(yè)務(wù)驗(yàn)證了再說。架構(gòu)復(fù)雜度要跟著業(yè)務(wù)不確定性走業(yè)務(wù)都沒驗(yàn)證架構(gòu)搞那么復(fù)雜沒意義。對于已經(jīng)有原型、準(zhǔn)備上生產(chǎn)的團(tuán)隊(duì)優(yōu)先補(bǔ)齊三個(gè)能力——觀測知道系統(tǒng)在干什么、評估知道系統(tǒng)好不好、降級知道系統(tǒng)出問題了怎么辦。這三個(gè)能力是AI應(yīng)用生產(chǎn)化的基礎(chǔ)設(shè)施缺一個(gè)都要出大事。對于正在做復(fù)雜AI應(yīng)用的團(tuán)隊(duì)把Agent編排層和模型層徹底解耦同時(shí)一定要建立成本監(jiān)控體系。復(fù)雜AI應(yīng)用的瓶頸通常不是模型能力而是系統(tǒng)復(fù)雜度的管理。解耦和可觀測性是管理復(fù)雜度的唯一出路。我個(gè)人還有一個(gè)習(xí)慣想分享做AI應(yīng)用架構(gòu)設(shè)計(jì)一定要留一個(gè)“變數(shù)賬本”——記錄哪些內(nèi)容是確定的、哪些內(nèi)容可能隨時(shí)變化。模型會換、Prompt會改、數(shù)據(jù)會變但架構(gòu)的骨架要穩(wěn)定。我經(jīng)歷過幾次“模型升級導(dǎo)致整個(gè)系統(tǒng)重構(gòu)”的慘痛教訓(xùn)就是早期沒守住這個(gè)原則。