:七要素與七個決策點,從零搭建穩(wěn)定系統(tǒng))
1. 從概念泛濫到工程落地AI Agent 缺的從來不是定義這兩年AI Agent這個詞被炒得滾燙。打開技術(shù)社區(qū)鋪天蓋地都是Agent 將取代 SaaSL4 級 Agent 即將到來的論調(diào)。但真到動手做的時候很多人會發(fā)現(xiàn)一個尷尬的現(xiàn)實網(wǎng)上能搜到的資料講概念的多講架構(gòu)圖的多真正能把一個 Agent 從零到一搭起來、跑通、并且穩(wěn)定服務(wù)的完整教程少得可憐。我自己也是從這個階段摸過來的。前前后后折騰了大半年從最開始用 LangChain 拼一個能聊天的小 demo到后來基于開源框架改造出能處理真實業(yè)務(wù)流的系統(tǒng)中間踩過的坑、推翻的方案、重寫的代碼足夠?qū)懗梢槐緯;仡^看卡住大多數(shù)人的不是模型能力不是 API 調(diào)用而是腦子里缺少一張工程實現(xiàn)地圖——不知道一個 Agent 系統(tǒng)拆開來看有哪些零件也不知道從零搭建時每一步該做什么決策。這篇文章就是來填這個坑的。我會用七要素幫你在腦子里建立 Agent 系統(tǒng)的完整認(rèn)知框架再用七個決策點帶你走一遍真實的工程實現(xiàn)主線。不是學(xué)院派的紙上談兵是我實際擼代碼、壓測、上線之后沉淀下來的經(jīng)驗。無論你是想用 Python 快速搭原型還是考慮用 Rust 追求極致性能這套框架都適用。適合正在做 Agent 開發(fā)的工程師、準(zhǔn)備從零入門的技術(shù)負(fù)責(zé)人以及被各種 Agent 概念搞暈、想看清技術(shù)本質(zhì)的人。在往下讀之前先把一個共識放在前面Agent 和普通 AI 應(yīng)用的本質(zhì)區(qū)別在于它有目標(biāo)感和行動力。它不是被動地等用戶問一句答一句而是能自己把一個復(fù)雜任務(wù)拆解成子任務(wù)調(diào)用工具、讀取信息、做出判斷最終交付結(jié)果。這個主動背后就是我們要拆解的工程細(xì)節(jié)。2. 用七要素搭認(rèn)知骨架一個 Agent 系統(tǒng)到底由什么構(gòu)成2.1 大模型底座Agent 的大腦皮層一切 Agent 能力的源頭是底層的大語言模型。但在工程實現(xiàn)中模型不是一個抽象概念而是三個非常具體的選型問題。第一是參數(shù)規(guī)模與部署形態(tài)。你可以調(diào)云端 API也可以私有化部署開源模型。前者省事后者可控。以我自己的實踐為例做內(nèi)部工具類 Agent 時用 API 方案一周就能上線但做數(shù)據(jù)敏感的財務(wù)分析 Agent 時必須私有化部署這時候 7B~14B 參數(shù)量的量化模型是性價比比較高的區(qū)間。第二是上下文窗口。Agent 的推理過程高度依賴長上下文的承載能力——工具返回結(jié)果、歷史對話狀態(tài)、中間推理記錄都在里面打轉(zhuǎn)。我建議至少選 128K 以上窗口的模型否則做到多輪工具調(diào)用時上下文截斷會讓你崩潰。第三是函數(shù)調(diào)用Function Calling能力。這不是所有模型都對齊過。你需要讓模型穩(wěn)定輸出結(jié)構(gòu)化的工具調(diào)用指令而不是一段含糊其辭的自然語言。實測下來不同模型在工具調(diào)用上的準(zhǔn)確率差異能達(dá)到 20% 以上。有個容易被忽略的點叫模型性格。我做過一個測試同一個任務(wù)分別交給幾個主流模型做 Agent 的推理核心結(jié)果在工具選擇偏好、失敗重試策略上差異很大。一個傾向于裝懂的模型在 Agent 場景下是災(zāi)難——它會編造工具輸出。所以選模型時別只看榜單分?jǐn)?shù)要用你自己的工具集做一輪真實任務(wù)評測。2.2 記憶系統(tǒng)短期工作臺與長期檔案柜Agent 和單輪對話最大的區(qū)別在于它需要記憶。工程上要把記憶拆成兩層來看。短期記憶對應(yīng)上下文窗口里的對話歷史和當(dāng)前任務(wù)狀態(tài)。它解決的是當(dāng)前這個任務(wù)做到哪一步了的問題。長期記憶則解決這個用戶/這個項目的歷史偏好和習(xí)慣是什么的問題通常需要外掛向量數(shù)據(jù)庫把歷史交互切成塊、做 embedding、存起來,需要時做相似度檢索再拼回上下文。實操中我最想強(qiáng)調(diào)的一點是記憶不是越多越好。很多人做 Agent 喜歡把能塞的都塞進(jìn)上下文結(jié)果 token 消耗翻倍模型注意力被稀釋關(guān)鍵信息反而抓不住。我通常的做法是給記憶系統(tǒng)分三檔核心記憶始終在上下文中、工作記憶當(dāng)前任務(wù)相關(guān)任務(wù)結(jié)束即清理、存檔記憶向量庫中長期存儲按需檢索。每檔的設(shè)置規(guī)則要在系統(tǒng)提示詞里明確約束。長期記憶的寫入時機(jī)也是個決策點。實時寫入效果好但成本高異步批量寫入成本低但有過期風(fēng)險。我折中的方案是任務(wù)完成時強(qiáng)制寫入核心摘要過程中的細(xì)節(jié)數(shù)據(jù)按置信度閾值異步寫入。這樣既保證了關(guān)鍵信息不丟又控制住了成本。2.3 規(guī)劃能力任務(wù)拆解的兩條路線Agent 的目標(biāo)感來源于規(guī)劃模塊。工程上主流規(guī)劃方式分兩大類。第一種是顯式規(guī)劃Plan-then-ExecuteAgent 接到任務(wù)先輸出一份完整的執(zhí)行計劃再逐步執(zhí)行。優(yōu)點是可預(yù)期、可干預(yù)用戶能看到 Agent 打算做什么任務(wù)中途改需求也比較好調(diào)整。缺點是應(yīng)對動態(tài)變化的能力偏弱計劃被現(xiàn)實打亂后就比較被動。第二種是隱式規(guī)劃ReAct 模式Agent 走思考→行動→觀察→再思考的循環(huán)走一步看一步。優(yōu)點是靈活能根據(jù)中間結(jié)果動態(tài)調(diào)整策略缺點是過程不可控容易出現(xiàn)繞圈或者跳躍式?jīng)Q策。我的建議是別二選一做混合式。整體任務(wù)用顯式規(guī)劃搭骨架每個子步驟內(nèi)部用隱式規(guī)劃來微調(diào)。打個比方顯式規(guī)劃是旅行前定好行程表隱式規(guī)劃是到了當(dāng)?shù)匕l(fā)現(xiàn)某景點排隊太長臨時改成旁邊的博物館——大方向不變小決策靈活。這種架構(gòu)在工程上也不難實現(xiàn)用一個規(guī)劃器生成任務(wù)清單每個任務(wù)獨立進(jìn)入 ReAct 循環(huán)運行。2.4 工具調(diào)用Agent 的手和腳沒有工具的 Agent 只是個高級聊天機(jī)器人。工具層是 Agent 發(fā)揮實際價值的所在。工程上工具接入有兩個層面必須處理好。一個是工具定義。每個工具都要給模型提供清晰的說明這個工具是干什么的、參數(shù)有哪些、參數(shù)的類型和約束是什么。工具描述寫得不清楚模型就會亂調(diào)。我見過很多團(tuán)隊在這上面偷懶結(jié)果 Agent 的工具調(diào)用準(zhǔn)確率直接暴跌。寫工具描述有一個技巧從模型視角描述而不是從開發(fā)者視角描述。你是給模型看的說明書要寫清這個工具在什么場景下應(yīng)該被使用而不是寫這個函數(shù)實現(xiàn)了某某接口。另一個是工具結(jié)果回流。工具返回的原始數(shù)據(jù)往往不適合直接給模型讀需要一層后處理。比如數(shù)據(jù)庫查詢返回的是 200 行 JSON你要么截斷要么聚合要么轉(zhuǎn)成自然語言摘要再交還模型。我踩過的坑是不能讓工具輸出無限膨脹否則對話輪次稍多上下文就爆了。后處理邏輯通常包括字段精簡、長度截斷、錯誤信息標(biāo)準(zhǔn)化。工具注冊表和權(quán)限管控也要提上日程。哪個 Agent 能用哪些工具需要一套動態(tài)配置而不是把全部工具一股腦暴露給模型。這既是為了安全也是為了減少模型做工具選擇的難度——選項少了選對的概率自然高。2.5 反思機(jī)制Agent 的自我糾錯回路這是很多人做 Agent 時容易丟掉的要素恰恰是 Agent 從demo走向可用的關(guān)鍵分水嶺。反思機(jī)制是指 Agent 對自身行為的審視和修正。工程實現(xiàn)上常見兩個層面一個在單步層面執(zhí)行工具調(diào)用后發(fā)現(xiàn)輸出不符合預(yù)期觸發(fā)重試或換一種工具再試另一個在任務(wù)層面整個任務(wù)做完了對結(jié)果做一輪自查發(fā)現(xiàn)問題就重新走一遍相關(guān)子流程。我實現(xiàn)反思機(jī)制的時候不是在系統(tǒng)提示詞里加一句請檢查你的回答就夠了。而是做成獨立的評價器Evaluator用一個單獨的模型調(diào)用來評估當(dāng)前結(jié)果的質(zhì)量輸出結(jié)構(gòu)化評分和問題描述再決定是繼續(xù)還是返工。這種做法有個額外的好處評價器的 prompt 可以專門優(yōu)化和主任務(wù)的 prompt 解耦互不干擾。實測下來加上反思機(jī)制后Agent 在復(fù)雜任務(wù)上的成功率大約能提升 15%~25%。當(dāng)然代價是額外的模型調(diào)用成本所以需要對反思觸發(fā)條件做閾值控制。2.6 多智能體協(xié)作從單體到聯(lián)邦不是所有場景都需要多 Agent但任務(wù)足夠復(fù)雜時單個 Agent 會顯得力不從心——上下文互相干擾、角色指令沖突、工具權(quán)限難以隔離。這時候可以考慮拆分成多個專職 Agent讓它們各管一攤通過消息傳遞協(xié)作。以我最近做的內(nèi)容生產(chǎn)系統(tǒng)為例策劃 Agent 負(fù)責(zé)定選題、搭框架寫作 Agent 負(fù)責(zé)生成初稿審核 Agent 負(fù)責(zé)事實核查和風(fēng)格統(tǒng)一發(fā)布 Agent 負(fù)責(zé)排版推送。每個 Agent 的上下文是干凈的prompt 是單一職責(zé)的工具權(quán)限互不重疊整個系統(tǒng)在工程上反而更清爽。多 Agent 的關(guān)鍵在協(xié)作協(xié)議。我一般用三種模式一種是管道式Pipeline上游輸出直接作為下游輸入像流水線一種是編排式Orchestrator由一個主控 Agent 分配任務(wù)、匯總結(jié)果還有一種是辯論式Debate多個 Agent 各自提出方案再互相評審。選哪種取決于任務(wù)的耦合度——流水線適合流程固定的場景編排式適合子任務(wù)動態(tài)變化的場景辯論式適合方案決策類場景。2.7 安全與護(hù)欄Agent 的安全帶Agent 的能力越強(qiáng)越需要護(hù)欄。一個能調(diào)用工具、訪問數(shù)據(jù)、執(zhí)行操作的 Agent一旦失控破壞力遠(yuǎn)大于一個只會聊天的機(jī)器人。工程上的護(hù)欄要設(shè)置在三個位置。第一是輸入側(cè)檢測用戶的指令是否存在注入攻擊的意圖比如試圖通過 prompt 注入來改變 Agent 的系統(tǒng)指令。第二是工具側(cè)對工具調(diào)用做白名單校驗對危險操作刪除、轉(zhuǎn)賬、發(fā)布設(shè)置二次確認(rèn)或權(quán)限審批。第三是輸出側(cè)對 Agent 生成的內(nèi)容做合規(guī)過濾。另外還有一層很重要的護(hù)欄叫操作邊界給 Agent 設(shè)定它能執(zhí)行的最高風(fēng)險等級超過閾值就主動掛起轉(zhuǎn)人工處理。我強(qiáng)烈建議在上線前做一次紅隊測試。專門雇人或用另一個模型來攻擊你的 Agent 系統(tǒng)嘗試各種惡意提示、越權(quán)指令、循環(huán)消耗。這個過程會暴露很多你想不到的漏洞。注意安全不是后置的補(bǔ)丁而是 Agent 架構(gòu)的一部分——從設(shè)計第一張表、寫第一行工具代碼開始就要把護(hù)欄考慮進(jìn)去。3. 七個決策點Agent 工程實現(xiàn)的主線3.1 決策點一技術(shù)棧選型Python 還是 Rust 還是 TypeScript第一個決策往往是這個也會直接影響后續(xù)所有開發(fā)體驗。當(dāng)前 Agent 生態(tài)最成熟的是 PythonLangChain、LlamaIndex、AutoGen 這些主流框架都是 Python 優(yōu)先。如果你的目標(biāo)是快速驗證、業(yè)務(wù)迭代Python 是穩(wěn)妥的選擇。但如果你對性能有極致要求或者要做高并發(fā)的生產(chǎn)級服務(wù)Rust 值得關(guān)注。Rust 在 Agent 領(lǐng)域的優(yōu)勢在于內(nèi)存安全、并發(fā)能力強(qiáng)、單機(jī)吞吐量比 Python 高出一個數(shù)量級。Rust 社區(qū)也有一些 Agent 框架在起步比如我們團(tuán)隊自己就用 Rust 重寫過 Agent 的推理循環(huán)和工具調(diào)度核心模型調(diào)用部分依然通過 HTTP 走云端API——這樣兼顧了性能和平滑遷移。代價是開發(fā)效率確實比 Python 低招人難度也高。還有一個折中路線Python 做業(yè)務(wù)和編排Rust 做性能敏感的工具執(zhí)行內(nèi)核比如批量檢索、并發(fā)轉(zhuǎn)發(fā)通過子進(jìn)程或 WebSocket 通信。這是我會推薦的工程方案。TypeScript 的生態(tài)這兩年也在追趕比如 Mastra 框架優(yōu)勢是前后端技術(shù)棧統(tǒng)一如果你所在團(tuán)隊是 Node.js 背景上手會很快。但論 Agent 專用庫的成熟度和社區(qū)方案的可參考性目前仍然不如 Python。我的建議比較務(wù)實團(tuán)隊熟悉什么就用什么Agent 的核心邏輯是可以跨語言遷移的——規(guī)劃、記憶、工具這些要素在任何語言里都有對應(yīng)的實現(xiàn)方式。3.2 決策點二框架選型全包框架還是自研調(diào)度選好語言后馬上要撞上的問題用現(xiàn)成的 Agent 框架還是自己寫調(diào)度核心現(xiàn)成框架的好處很明顯——開箱即用社區(qū)方案多踩坑的人多所以坑少。LangChain 生態(tài)最全從模型封裝、記憶管理到工具調(diào)用都有現(xiàn)成模塊。缺點是抽象層級多出問題的時候排查鏈路很長而且框架迭代太快今天學(xué)的 API 明天可能就 deprecated。AutoGen 適合做多 Agent 對話式協(xié)作但定制業(yè)務(wù)邏輯時約束比較大。我的實踐經(jīng)歷是第一版用 LangChain 快速搭原型驗證可行后第二版開始逐步剝離框架的自研核心。最終我保留了框架的工具封裝和模型適配層但重寫了規(guī)劃器和調(diào)度器。原因是默認(rèn)的 Agent 執(zhí)行循環(huán)不夠貼合我們的業(yè)務(wù)——我們需要更精細(xì)的日志埋點、更靈活的中斷恢復(fù)、更可控的上下文管理這些在框架里改起來比重新寫還費勁。所以我的建議是分階段走原型期大膽用框架快速驗證核心邏輯進(jìn)入生產(chǎn)期后評估框架在你業(yè)務(wù)場景里的摩擦點決定是深度定制還是另起爐灶。記住框架是手段不是目的——你的產(chǎn)品和業(yè)務(wù)的獨特邏輯最終要長在自己的代碼里。3.3 決策點三模型部署策略API 還是私有化這個決策本質(zhì)上是成本、數(shù)據(jù)安全、控制力三者之間的權(quán)衡。如果數(shù)據(jù)敏感度高客戶數(shù)據(jù)、財務(wù)數(shù)據(jù)、內(nèi)部文檔或者有合規(guī)要求私有化部署幾乎是必選項。如果追求效果且數(shù)據(jù)不敏感直接調(diào) API 能讓你始終用上最新最強(qiáng)的模型能力。折中的方案是混合路線非敏感數(shù)據(jù)走云端大模型敏感數(shù)據(jù)走私有化小模型。這需要你的系統(tǒng)架構(gòu)里有路由能力——根據(jù)任務(wù)類型和數(shù)據(jù)等級動態(tài)選擇模型。實現(xiàn)上也不復(fù)雜做一個模型網(wǎng)關(guān)層對外暴露統(tǒng)一的調(diào)用接口內(nèi)部根據(jù)策略分發(fā)到不同的模型后端。部署層面值得關(guān)注的技術(shù)點包括量化GPTQ、AWQ 等能顯著降低顯存占用7B 模型量化后可以跑在消費級顯卡上KV Cache 優(yōu)化如 vLLM 的 PagedAttention能大幅提升推理吞吐并發(fā)調(diào)度要預(yù)留緩沖避免請求超時。這些細(xì)節(jié)直接決定你的推理服務(wù)扛不扛得住生產(chǎn)流量。3.4 決策點四工具接入的范圍和邊界Agent 能用哪些工具這個決策決定了 Agent 的能力邊界。我的經(jīng)驗是先做減法再做加法——第一版只接入 3~5 個最核心的工具把 Agent 的調(diào)用準(zhǔn)確率和鏈路穩(wěn)定性打磨好再逐批擴(kuò)充工具集。工具越多模型選擇難度越大出錯率越高。工具接入時有一個優(yōu)先級矩陣可以參考高頻且必要的能力最先接低頻或非核心的往后排只讀類的工具比寫操作類的先接——只讀工具即使出錯了破壞力也小。每個工具都要有清晰的權(quán)限掛載哪個 Agent、哪個用戶角色可以使用需要什么樣的授權(quán)級別這些配置要外置成配置文件而不是硬編碼在代碼里否則后面維護(hù)起來會非常痛苦。還有一個實操細(xì)節(jié)工具的參數(shù)設(shè)計一定要精益。模型不是你團(tuán)隊的同事它不理解這個參數(shù)最好傳這個值這種隱含業(yè)務(wù)規(guī)則。所以要么在工具描述中寫得百分之百明確要么在工具內(nèi)部做默認(rèn)值兜底。寧可工具在模型側(cè)看起來笨一點也要保證調(diào)用時不踩業(yè)務(wù)雷。3.5 決策點五上下文與記憶的工程策略在第二段七要素里講了記憶的分層架構(gòu)這里重點說工程落地時的操作決策。首先要為上下文窗口做預(yù)算設(shè)定系統(tǒng)指令占多少、歷史對話占多少、工具返回占多少、當(dāng)前推理占多少。我在實踐中用一個簡單的配額機(jī)制控制——總預(yù)算 80K token 的話系統(tǒng)指令 6K對話歷史 30K超出部分從向量庫按相關(guān)性取摘要工具返回 20K超出部分截斷或壓縮剩余留白給推理。這個比例根據(jù)你的業(yè)務(wù)可以調(diào)整關(guān)鍵是要有一個明確的預(yù)算控制器在代碼里強(qiáng)制實施。記憶寫入與讀取的時機(jī)同樣要規(guī)劃。對話過程中產(chǎn)生的中間狀態(tài)是否入庫、任務(wù)結(jié)束時是否做全面總結(jié)入庫、用戶手動標(biāo)記重要信息如何覆蓋自動記憶——這些都要一套狀態(tài)機(jī)來管理。我建議把記憶操作本身也當(dāng)作一種工具調(diào)用讓模型在適當(dāng)?shù)臅r候主動觸發(fā)記憶讀寫而不是被動地在每個輪次都盲目讀寫。這樣既能降低 token 開銷又能讓記憶更精準(zhǔn)。3.6 決策點六可觀測性與調(diào)試手段我會說一個可能不中聽但真實的話Agent 系統(tǒng)的調(diào)試體驗比很多傳統(tǒng)軟件工程要糟糕得多。原因在于傳統(tǒng)程序流是確定的而 Agent 的推理路徑每次可能都不一樣。所以可觀測性不是加分項是活下來的前提。我的做法是三件套。第一是完整的日志鏈路從用戶輸入開始記錄每一步的推理輸出、工具選擇、工具入?yún)?、工具出參、反思結(jié)果按任務(wù) ID 串成一條鏈路。第二是軌跡可視化把上面這條鏈路渲染成類似流程圖的形式——分支、循環(huán)、回退都有體現(xiàn)這比看日志高效的多。第三是重放機(jī)制把一次任務(wù)的所有中間狀態(tài)持久化出問題時可以在測試環(huán)境一步步重放查看狀態(tài)如何流轉(zhuǎn)卡點在哪個環(huán)節(jié)。埋點設(shè)計上有一個坑要提醒不要只埋成功路徑失敗路徑的日志更有價值。模型在什么任務(wù)上返工重試了、工具調(diào)用連續(xù)出錯了幾次、上下文中哪段內(nèi)容導(dǎo)致推理漂移——這些異常信息是你優(yōu)化 Agent 的第一手素材。3.7 決策點七評估體系建設(shè)怎么量化Agent 好不好沒有評估就沒有優(yōu)化。Agent 的評估比傳統(tǒng) AI 模型評估更復(fù)雜因為它輸出的是行動序列而不是一個標(biāo)簽。我在實踐中把評估拆成多層。第一層是工具調(diào)用準(zhǔn)確率檢查 Agent 是否在正確場景選擇了正確工具、參數(shù)填得對不對。這層可以自動化對比模型輸出和標(biāo)準(zhǔn)答案即可。第二層是任務(wù)完成率看一個完整任務(wù)是否達(dá)成了目標(biāo)。第三層是過程質(zhì)量中間有多少次無意義的返工、繞路——這直接影響成本和用戶體驗。第四層是結(jié)果質(zhì)量最終交付的內(nèi)容是否準(zhǔn)確、完整、符合要求這層往往需要人工評分。我強(qiáng)烈推薦建立一套回歸測試集。每次改動 Agent 的 prompt、工具集、規(guī)劃邏輯都跑一遍同樣的測試集看分?jǐn)?shù)有沒有回退。這套測試集會成為你迭代的安全網(wǎng)。注意測試集要定期補(bǔ)充真實用戶遇到的問題樣本——不要只測理想情況把用戶實際觸發(fā)的刁鉆場景也吸收進(jìn)來這樣的評估才真正貼合生產(chǎn)環(huán)境。4. 一條實操路徑從零搭建一個最小可用 Agent4.1 定義任務(wù)場景與邊界在寫任何代碼之前先做任務(wù)定義。就拿做一個能回答公司內(nèi)部制度問題的客服 Agent來舉例。先明確任務(wù)邊界它負(fù)責(zé)哪些類型的咨詢、不負(fù)責(zé)哪些內(nèi)容比如薪酬細(xì)節(jié)這類敏感問題要轉(zhuǎn)人工、需要調(diào)用哪些工具知識庫檢索、工單系統(tǒng)查詢等、預(yù)期響應(yīng)時間是多少。把邊界寫在紙上比寫進(jìn)代碼更早、更重要。這個場景的核心流程其實很直接用戶提問→檢索知識庫→組織回答或者知識庫沒有答案就創(chuàng)建工單轉(zhuǎn)人工。流程非常清晰適合作為第一個 Agent 項目的切入點。4.2 搭建最小鏈路模型 提示詞 一個工具第一版不需要規(guī)劃器不需要反思機(jī)制甚至不需要真的接入知識庫——用本地的一個 JSON 文件充當(dāng)偽知識庫。鏈路是用戶輸入→模型帶系統(tǒng)提示詞→決策回答 or 調(diào)用 search 工具→工具返回→生成最終回復(fù)。具體配置一個 OpenAI 兼容的 API 接口模型選帶函數(shù)調(diào)用能力的版本。工具定義成一個函數(shù)輸入是查詢關(guān)鍵詞輸出是命中的制度條目。整個過程大約一到兩天可以跑通。這一階段最核心的目的不是做出產(chǎn)品而是驗證模型能不能穩(wěn)定做工具調(diào)用決策。如果你在這一步就發(fā)現(xiàn)模型經(jīng)常不調(diào)用工具、或者亂填參數(shù)那說明模型選型有問題趁早換。不要等到架構(gòu)都搭完了才發(fā)現(xiàn)地基是歪的。4.3 逐步疊加復(fù)雜度規(guī)劃、記憶與反思最小鏈路跑通后開始疊加復(fù)雜度。疊加順序很重要先加規(guī)劃再加記憶最后加反思。規(guī)劃模塊做得很簡單——讓模型在收到復(fù)雜問題時先輸出一個執(zhí)行計劃包含步驟序列和每步所需工具然后系統(tǒng)按計劃逐步執(zhí)行。用結(jié)構(gòu)化輸出JSON約束計劃格式方便程序解析。記憶模塊疊加時我建議先只做短期記憶——把對話歷史和已執(zhí)行的步驟記錄下來拼進(jìn)下一輪的上下文。等短期記憶穩(wěn)定了再上長期記憶的向量庫檢索。反思機(jī)制放在最后——任務(wù)執(zhí)行完畢后用第二個模型調(diào)用對所有輸出做質(zhì)檢發(fā)現(xiàn)問題進(jìn)入重跑流程。每一步疊加都要回歸測試集跑一遍確保新功能沒有破壞已有能力。這個過程不要貪快Agent 系統(tǒng)的性能衰退往往是悄無聲息的——上下文變長之后模型可能開始漏掉工具調(diào)用、忘記系統(tǒng)指令里的約束這些只有靠回歸測試才能發(fā)現(xiàn)。4.4 工程化收尾部署、監(jiān)控與迭代節(jié)奏你實現(xiàn)了一個能跑通的 Agent距離一個能上線的 Agent 還有最后一段路。部署層面我建議把 Agent 服務(wù)拆成兩個進(jìn)程控制面負(fù)責(zé)編排、規(guī)劃、工具調(diào)度和執(zhí)行面負(fù)責(zé)模型調(diào)用、工具實際執(zhí)行。中間通過消息隊列通信。好處是控制面壓力大時可以單獨擴(kuò)副本執(zhí)行面的某個工具超時也不至于拖垮整個 Agent。監(jiān)控指標(biāo)里強(qiáng)制看三個任務(wù)成功率、平均完成時間、單任務(wù) token 成本。這三個數(shù)字是 Agent 業(yè)務(wù)健康的晴雨表。日志系統(tǒng)在決策點六已經(jīng)設(shè)計好上線前再檢查一遍日志是否覆蓋了所有關(guān)鍵狀態(tài)流轉(zhuǎn)。迭代節(jié)奏上我踩過的坑是用增加更復(fù)雜的 prompt來解決所有問題。這幾乎是 Agent 領(lǐng)域最容易犯的錯誤。Prompt 越來越長模型越來越聾。遇到問題的優(yōu)先級應(yīng)該是先看數(shù)據(jù)日志里到底哪里斷了→ 再看代碼工具實現(xiàn)有沒有 bug→ 然后是流程設(shè)計規(guī)劃邏輯是不是有問題→ 最后才調(diào) prompt。用數(shù)據(jù)驅(qū)動迭代而不是憑感覺堆提示詞。5. 寫在最后Agent 工程化的心法做 Agent 這么久我最大的一個體會是Agent 的工程化和傳統(tǒng)軟件開發(fā)思維方式上有一個顯著差異。傳統(tǒng)開發(fā)追求確定性——你寫的代碼給定輸入必然得到預(yù)期輸出。而 Agent 開發(fā)本質(zhì)上是在和概率打交道——同一個 prompt模型這次可能走這條路下次可能走那條路。所以 Agent 工程的核心不是消滅不確定性而是管理不確定性。管理不確定性靠什么靠可觀測性出了問題快速定位、靠護(hù)欄不確定性不至于導(dǎo)致事故、靠評估每次改動都知道是變好了還是變差了。這三件事做好哪怕你的 Agent 內(nèi)部再混沌它對外呈現(xiàn)的行為依然是可控、可靠的。如果你正準(zhǔn)備開始做一個 Agent 項目我能給的最實用的一條建議是不管你有什么宏大的想法第一版一定做得能多小就多小。一個工具、一個場景、一條簡單鏈路跑通它量化它再談擴(kuò)展。我見過太多團(tuán)隊一上來就鋪開十幾個工具的宏大架構(gòu)最后死在調(diào)試的泥潭里。Agent 的能力邊界是在一次次真實任務(wù)中試出來的不是在架構(gòu)設(shè)計文檔里規(guī)劃出來的。最后再分享一個小技巧給你的 Agent 建立一份能力日志。每次發(fā)現(xiàn)它處理不了的案例記錄下來——是什么輸入、卡在哪一步、期望什么輸出。這份日志會隨著時間越來越厚而它會成為你優(yōu)化 Agent 的最有價值的資產(chǎn)。任何框架、任何模型都比不上你對自身業(yè)務(wù)場景的深度理解。Agent 的工程實現(xiàn)最終拼的不是技術(shù)多新而是你對問題的理解有多深、對系統(tǒng)的掌控有多細(xì)。