用架構(gòu)的范式遷移與核心組件解析)
1. 從流程到智能體一次認(rèn)知范式的遷移最近在社區(qū)里看到不少朋友在討論“Agent”這個(gè)概念尤其是在Anthropic和OpenAI相繼發(fā)布關(guān)于Agent的官方指南和最佳實(shí)踐之后這股討論的熱度就更高了。大家似乎都意識(shí)到單純調(diào)用大語(yǔ)言模型LLM的API或者用LangChain、Dify這類框架搭一個(gè)簡(jiǎn)單的問答流水線Workflow已經(jīng)不夠“酷”了。下一個(gè)階段是讓AI能夠自主思考、規(guī)劃并執(zhí)行復(fù)雜任務(wù)也就是所謂的“智能體”Agent。但說實(shí)話從“流程”到“智能體”這中間的變化遠(yuǎn)不止是換個(gè)名字那么簡(jiǎn)單。它背后代表的是一種根本性的設(shè)計(jì)思路和架構(gòu)范式的遷移。我花了些時(shí)間仔細(xì)研讀了Anthropic和OpenAI關(guān)于Agent的官方材料并結(jié)合自己過去搭建各種自動(dòng)化流程的經(jīng)驗(yàn)有了一些新的理解。今天就想和大家聊聊這個(gè)轉(zhuǎn)變到底意味著什么以及我們作為開發(fā)者該如何重新思考我們構(gòu)建AI應(yīng)用的方式。簡(jiǎn)單來說傳統(tǒng)的Workflow更像是一張精心設(shè)計(jì)好的“樂譜”或“劇本”。每一步做什么遇到什么情況怎么處理都需要開發(fā)者預(yù)先定義好。它高效、穩(wěn)定、可預(yù)測(cè)但缺乏應(yīng)對(duì)“劇本外”情況的靈活性。而Agent則更像一個(gè)擁有明確目標(biāo)、能夠自主調(diào)用工具、并根據(jù)環(huán)境反饋不斷調(diào)整策略的“演員”或“探險(xiǎn)家”。它的核心是“自主性”和“適應(yīng)性”其行為不是完全預(yù)設(shè)的而是在一個(gè)循環(huán)中動(dòng)態(tài)生成的感知觀察任務(wù)和上下文、思考規(guī)劃或推理下一步、行動(dòng)調(diào)用工具或生成輸出、然后根據(jù)結(jié)果再次感知如此循環(huán)。理解這個(gè)區(qū)別對(duì)于我們?cè)O(shè)計(jì)下一代AI應(yīng)用至關(guān)重要。下面我就從幾個(gè)維度來拆解一下我的理解。2. 核心理念對(duì)比預(yù)設(shè)流程 vs. 自主智能體要理解Agent最好的方式就是把它和我們已經(jīng)熟悉的Workflow放在一起對(duì)比。這種對(duì)比不是非此即彼而是幫助我們看清兩種范式各自的疆域和適用場(chǎng)景。2.1 Workflow確定性的效率機(jī)器Workflow或者說自動(dòng)化流程是我們過去幾年在RPA機(jī)器人流程自動(dòng)化、低代碼平臺(tái)乃至早期LLM應(yīng)用如基于LangChain的Chain中常見的設(shè)計(jì)模式。它的核心特征非常鮮明1. 線性或分支確定的執(zhí)行路徑一個(gè)典型的文檔處理Workflow可能是這樣的觸發(fā)收到新文件- 解析提取文本- 分類判斷文檔類型- 分支A如果是合同提取關(guān)鍵條款并歸檔- 分支B如果是報(bào)告進(jìn)行摘要并發(fā)送郵件。每一條路徑都是預(yù)先定義好的就像火車在既定的軌道上運(yùn)行雖然可能有道岔但所有道岔的位置和切換條件都是明確的。2. 狀態(tài)機(jī)驅(qū)動(dòng)Workflow通常由一個(gè)狀態(tài)機(jī)State Machine來管理。每個(gè)節(jié)點(diǎn)Step代表一個(gè)狀態(tài)節(jié)點(diǎn)間的轉(zhuǎn)移Transition由明確的規(guī)則或條件觸發(fā)。例如在Dify的Workflow畫布中你拖拽節(jié)點(diǎn)并用連線定義它們的關(guān)系本質(zhì)上就是在構(gòu)建一個(gè)可視化的狀態(tài)機(jī)。這種方式的優(yōu)勢(shì)是邏輯清晰、易于調(diào)試和監(jiān)控。你可以精確地知道流程執(zhí)行到了哪一步卡在了哪里。3. 工具作為被調(diào)用的“函數(shù)”在Workflow中工具Tools無論是搜索引擎API、數(shù)據(jù)庫(kù)查詢還是一個(gè)代碼解釋器都是被流程“調(diào)用”的被動(dòng)對(duì)象。流程說“現(xiàn)在去搜一下”工具就去執(zhí)行然后返回結(jié)果流程繼續(xù)往下走。工具本身沒有“意愿”或“選擇權(quán)”。4. 有限的上下文處理Workflow的上下文Context傳遞通常是線性的、有限的。上一個(gè)節(jié)點(diǎn)的輸出作為下一個(gè)節(jié)點(diǎn)的輸入。雖然有些高級(jí)框架支持更復(fù)雜的上下文管理如LangGraph的“狀態(tài)”概念但其范圍和流轉(zhuǎn)方式依然是開發(fā)者預(yù)先設(shè)計(jì)好的。實(shí)操心得在構(gòu)建復(fù)雜但邊界清晰的業(yè)務(wù)自動(dòng)化時(shí)Workflow依然是首選。比如定期的數(shù)據(jù)報(bào)表生成、內(nèi)容審核流水線、客服工單的自動(dòng)分配與跟進(jìn)等。它的可預(yù)測(cè)性在商業(yè)環(huán)境中是巨大的優(yōu)點(diǎn)因?yàn)椤胺€(wěn)定不出錯(cuò)”往往比“聰明但偶爾失控”更重要。2.2 Agent目標(biāo)驅(qū)動(dòng)的自主系統(tǒng)Agent的設(shè)計(jì)哲學(xué)則完全不同。它不再是執(zhí)行劇本的演員而是被賦予了一個(gè)目標(biāo)Goal或意圖Intent然后自主決定如何達(dá)成它。Anthropic在其指南中強(qiáng)調(diào)Agent的核心在于推理Reasoning和工具使用Tool Use的循環(huán)。1. 目標(biāo)導(dǎo)向與動(dòng)態(tài)規(guī)劃你給Agent一個(gè)任務(wù)“幫我分析一下公司上個(gè)季度的銷售數(shù)據(jù)并寫一份總結(jié)報(bào)告。” 你不會(huì)告訴它第一步該打開哪個(gè)Excel文件第二步該用哪個(gè)圖表類型。Agent需要自己“思考”要完成這個(gè)報(bào)告我需要哪些數(shù)據(jù)從哪里獲取可能需要調(diào)用數(shù)據(jù)庫(kù)查詢工具或CRM API。獲取數(shù)據(jù)后如何分析可能調(diào)用數(shù)據(jù)分析庫(kù)或讓LLM直接解讀。報(bào)告的結(jié)構(gòu)應(yīng)該怎樣基于分析結(jié)果進(jìn)行規(guī)劃。這個(gè)“思考-規(guī)劃”的過程是動(dòng)態(tài)生成的而不是預(yù)設(shè)的。2. 核心循環(huán)ReAct模式及其演進(jìn)一個(gè)經(jīng)典的Agent架構(gòu)遵循ReActReasoning Acting模式。OpenAI和Anthropic的指南都深入探討了這一模式Reason思考分析當(dāng)前情況、目標(biāo)、可用工具和歷史記錄決定下一步做什么。這通常體現(xiàn)為L(zhǎng)LM生成的“內(nèi)部獨(dú)白”Inner Monologue或“鏈?zhǔn)剿伎肌盋hain-of-Thought例如“用戶需要銷售報(bào)告。我首先需要獲取銷售數(shù)據(jù)。我可以調(diào)用query_database工具參數(shù)是時(shí)間范圍‘上一季度’?!盇ct行動(dòng)執(zhí)行思考的結(jié)果通常是調(diào)用一個(gè)工具query_database或直接生成給用戶的回答。Observe觀察獲取行動(dòng)的結(jié)果數(shù)據(jù)庫(kù)返回的JSON數(shù)據(jù)并將其作為新的上下文進(jìn)入下一輪循環(huán)?,F(xiàn)在更先進(jìn)的框架如LangGraph將這一循環(huán)抽象得更加精細(xì)可能包括規(guī)劃Planning、執(zhí)行Execution、評(píng)估Evaluation等更多階段但核心思想不變基于觀察的持續(xù)決策。3. 工具作為能力的延伸對(duì)Agent而言工具不再是被動(dòng)調(diào)用的函數(shù)而是其“身體”的一部分是其感知和影響外部世界的能力。一個(gè)強(qiáng)大的Agent可能集成數(shù)十種工具從代碼執(zhí)行、網(wǎng)絡(luò)搜索到操作軟件界面。關(guān)鍵在于Agent需要學(xué)會(huì)在合適的時(shí)間、選擇合適的工具、并傳入正確的參數(shù)。這要求LLM對(duì)工具的功能有深刻的理解也就是所謂的“工具使用”能力。4. 復(fù)雜的記憶與上下文管理Agent需要處理更長(zhǎng)遠(yuǎn)和復(fù)雜的上下文。它不僅要記住整個(gè)對(duì)話歷史還要記住自己之前的思考過程、嘗試過的行動(dòng)及其結(jié)果。這涉及到短期記憶當(dāng)前會(huì)話、長(zhǎng)期記憶向量數(shù)據(jù)庫(kù)存儲(chǔ)的過往經(jīng)驗(yàn)以及工作記憶當(dāng)前任務(wù)相關(guān)的關(guān)鍵信息的管理。良好的記憶機(jī)制是Agent能夠從錯(cuò)誤中學(xué)習(xí)、避免重復(fù)嘗試無效路徑的關(guān)鍵。5. 評(píng)估與安全護(hù)欄Guardrails由于Agent具有自主性其行為的不確定性也大大增加。因此評(píng)估Evaluation和安全護(hù)欄Guardrails變得至關(guān)重要。這不僅僅是檢查輸出是否包含有害內(nèi)容還包括目標(biāo)對(duì)齊評(píng)估Agent的一系列行動(dòng)是否始終朝著用戶設(shè)定的目標(biāo)前進(jìn)有沒有跑偏或陷入死循環(huán)工具使用安全調(diào)用刪除數(shù)據(jù)庫(kù)的工具時(shí)參數(shù)是否經(jīng)過了嚴(yán)格的驗(yàn)證成本與效率監(jiān)控Agent是否在無意義地循環(huán)調(diào)用昂貴或耗時(shí)的API Anthropic的指南特別強(qiáng)調(diào)了在Agent循環(huán)中內(nèi)置評(píng)估步驟的重要性這通常是另一個(gè)LLM調(diào)用或一套規(guī)則系統(tǒng)用于審核主Agent的決策。注意事項(xiàng)從Workflow轉(zhuǎn)向Agent最大的挑戰(zhàn)是控制力的讓渡。你無法再精確預(yù)知Agent的每一步操作只能通過設(shè)定清晰的目標(biāo)、提供高質(zhì)量的工具、以及構(gòu)建堅(jiān)固的安全護(hù)欄來引導(dǎo)它。這要求開發(fā)者從“流程工程師”轉(zhuǎn)變?yōu)椤澳繕?biāo)設(shè)定師”和“規(guī)則制定者”。3. 架構(gòu)演進(jìn)從鏈?zhǔn)秸{(diào)用到圖式編排理念的變化必然帶來技術(shù)架構(gòu)的革新。早期基于LangChain的LLM應(yīng)用其核心是“鏈”Chain這就是一種典型的Workflow思想。而現(xiàn)代Agent框架則普遍采用了“圖”Graph的架構(gòu)。3.1 LangChain Chain線性思維的體現(xiàn)在LangChain中一個(gè)簡(jiǎn)單的Chain可能是這樣的PromptTemplate-LLM-OutputParser。你可以把它串聯(lián)起來形成順序執(zhí)行鏈SequentialChain。更復(fù)雜一點(diǎn)的可能會(huì)根據(jù)LLM的輸出條件跳轉(zhuǎn)到不同的子鏈。但無論如何其執(zhí)行流在編寫代碼時(shí)就已經(jīng)在很大程度上被確定了。調(diào)試時(shí)你可以追蹤一個(gè)輸入是如何經(jīng)過一個(gè)個(gè)節(jié)點(diǎn)變成輸出的邏輯非常直觀但也相對(duì)僵化。3.2 LangGraph/CrewAI圖計(jì)算與動(dòng)態(tài)流新興的Agent框架如LangGraphLangChain的新核心或CrewAI其基礎(chǔ)模型是一個(gè)有向圖。圖中的節(jié)點(diǎn)Node代表一個(gè)特定的操作比如“調(diào)用LLM進(jìn)行規(guī)劃”、“執(zhí)行Python代碼”、“進(jìn)行網(wǎng)絡(luò)搜索”。邊Edge代表狀態(tài)流轉(zhuǎn)的條件。關(guān)鍵的區(qū)別在于狀態(tài)State是共享的整個(gè)圖有一個(gè)中心化的狀態(tài)對(duì)象所有節(jié)點(diǎn)都可以讀取和修改這個(gè)狀態(tài)。這完美對(duì)應(yīng)了Agent需要維護(hù)的復(fù)雜上下文用戶輸入、工具調(diào)用結(jié)果、歷史記錄等。流轉(zhuǎn)是動(dòng)態(tài)決定的下一個(gè)執(zhí)行哪個(gè)節(jié)點(diǎn)不是由固定的連線決定而是由一個(gè)“路由”Router邏輯根據(jù)當(dāng)前狀態(tài)動(dòng)態(tài)計(jì)算出來的。這個(gè)路由邏輯本身通常也是一個(gè)LLM調(diào)用。例如在一個(gè)分析任務(wù)的Agent中狀態(tài)可能包含“是否已獲取數(shù)據(jù)”。路由LLM會(huì)根據(jù)這個(gè)狀態(tài)決定下一步是進(jìn)入“數(shù)據(jù)獲取”節(jié)點(diǎn)還是進(jìn)入“數(shù)據(jù)分析”節(jié)點(diǎn)。這種圖式架構(gòu)天然適合描述Agent的ReAct循環(huán)LLM思考節(jié)點(diǎn)-工具調(diào)用節(jié)點(diǎn)- 結(jié)果更新狀態(tài)- 根據(jù)新狀態(tài)再次路由到LLM思考節(jié)點(diǎn)。一個(gè)簡(jiǎn)化的工作流與智能體架構(gòu)對(duì)比表特性維度傳統(tǒng)工作流 (Workflow)智能體 (Agent)設(shè)計(jì)核心預(yù)設(shè)的執(zhí)行路徑與規(guī)則目標(biāo)導(dǎo)向的自主決策控制流線性/分支確定性高循環(huán)ReAct動(dòng)態(tài)路由非確定性狀態(tài)管理節(jié)點(diǎn)間傳遞通常局部中心化共享狀態(tài)全局可見工具角色被動(dòng)調(diào)用的函數(shù)主動(dòng)選擇的能力延伸上下文有限、線性傳遞復(fù)雜、長(zhǎng)期、需主動(dòng)管理調(diào)試相對(duì)簡(jiǎn)單可逐步跟蹤復(fù)雜需關(guān)注推理過程與決策邏輯適用場(chǎng)景流程固定、邊界清晰的自動(dòng)化任務(wù)目標(biāo)明確但路徑開放、需探索與決策的復(fù)雜任務(wù)3.3 實(shí)際構(gòu)建中的選擇并非取代而是分層在實(shí)際項(xiàng)目中我們不必做出非此即彼的選擇。一個(gè)成熟的復(fù)雜AI系統(tǒng)往往是分層架構(gòu)融合了Workflow的確定性和Agent的自主性。外層Agent作為協(xié)調(diào)者。一個(gè)主Agent接收用戶的高層目標(biāo)如“優(yōu)化網(wǎng)站SEO”它負(fù)責(zé)拆解任務(wù)、規(guī)劃步驟。中層Workflow作為執(zhí)行者。主Agent可能會(huì)將一個(gè)確定的子任務(wù)如“提取所有頁(yè)面的Meta描述標(biāo)簽”委托給一個(gè)精心設(shè)計(jì)、高效穩(wěn)定的Workflow去執(zhí)行。這個(gè)Workflow可能就是用Dify或傳統(tǒng)腳本編寫的。內(nèi)層工具作為基礎(chǔ)能力。無論是Agent還是Workflow最終都調(diào)用底層的工具函數(shù)、API來完成任務(wù)。這種“Agent - Workflow - Tool”的分層既利用了Agent的宏觀規(guī)劃和靈活性又保證了關(guān)鍵子任務(wù)的執(zhí)行效率和可靠性是一種非常實(shí)用的工程實(shí)踐。4. 核心組件深度解析構(gòu)建健壯Agent的基石理解了理念和架構(gòu)我們來看看要構(gòu)建一個(gè)實(shí)用的Agent需要關(guān)注哪些核心組件。這些組件決定了Agent的智商能力和情商穩(wěn)定性。4.1 規(guī)劃器Planner任務(wù)拆解的智慧規(guī)劃是Agent區(qū)別于簡(jiǎn)單工具調(diào)用的首要能力。一個(gè)好的規(guī)劃器能將模糊的用戶指令轉(zhuǎn)化為可執(zhí)行的動(dòng)作序列。1. 規(guī)劃的實(shí)現(xiàn)方式LLM直接規(guī)劃最簡(jiǎn)單的方式直接提示LLM“為了完成目標(biāo)X請(qǐng)列出需要執(zhí)行的步驟?!?這種方式快速但可能缺乏條理且無法在規(guī)劃時(shí)考慮工具的具體約束。思維鏈CoT規(guī)劃要求LLM以“首先…然后…最后…”的格式進(jìn)行逐步推理生成規(guī)劃。這能提高規(guī)劃的邏輯性。任務(wù)樹分解將大任務(wù)遞歸分解成子任務(wù)形成一棵樹。例如目標(biāo)“寫一份行業(yè)分析報(bào)告”可分解為“搜集資料”、“分析數(shù)據(jù)”、“撰寫報(bào)告”三個(gè)子任務(wù)而“搜集資料”又可進(jìn)一步分解為“搜索新聞”、“查閱財(cái)報(bào)”、“訪談專家”等??蚣苋鏑rewAI的Task和Process就支持這種層級(jí)化任務(wù)分解?;诠ぞ叩囊?guī)劃更高級(jí)的規(guī)劃器在規(guī)劃時(shí)會(huì)參考可用工具列表及其描述。例如LLM知道有search_web和query_database兩個(gè)工具后它會(huì)規(guī)劃出“先用search_web獲取市場(chǎng)概況再用query_database獲取內(nèi)部銷售數(shù)據(jù)”的更合理步驟。2. 規(guī)劃的關(guān)鍵挑戰(zhàn)與技巧幻覺與不切實(shí)際LLM可能會(huì)規(guī)劃出一些不存在的工具或無法實(shí)現(xiàn)的步驟。解決方案在系統(tǒng)提示詞中明確列出所有可用工具及其詳細(xì)描述、輸入輸出格式。甚至可以提供工具使用的示例。規(guī)劃粒度問題規(guī)劃得太粗Agent不知道如何執(zhí)行規(guī)劃得太細(xì)會(huì)限制Agent的臨場(chǎng)應(yīng)變能力且消耗更多Token。解決方案采用分層規(guī)劃。先做高層規(guī)劃戰(zhàn)略然后在執(zhí)行每個(gè)高層步驟時(shí)再進(jìn)行詳細(xì)的戰(zhàn)術(shù)規(guī)劃。動(dòng)態(tài)重規(guī)劃計(jì)劃趕不上變化。當(dāng)工具調(diào)用失敗或結(jié)果出乎意料時(shí)Agent需要能調(diào)整原計(jì)劃。解決方案在ReAct循環(huán)的“思考”階段不僅要決定下一步動(dòng)作還要評(píng)估當(dāng)前計(jì)劃是否依然可行??梢栽O(shè)計(jì)一個(gè)獨(dú)立的“評(píng)估節(jié)點(diǎn)”來負(fù)責(zé)此事。實(shí)操心得規(guī)劃提示詞Planning Prompt的設(shè)計(jì)至關(guān)重要。一個(gè)好的提示詞模板應(yīng)該包含清晰的角色設(shè)定“你是一個(gè)經(jīng)驗(yàn)豐富的項(xiàng)目規(guī)劃師”、明確的目標(biāo)、可用的工具清單、規(guī)劃輸出的格式要求例如必須輸出為JSON或帶編號(hào)的列表以及一兩個(gè)規(guī)劃示例Few-shot。這能極大提高規(guī)劃的質(zhì)量和穩(wěn)定性。4.2 工具使用Tool Use能力邊界的地圖工具是Agent的手和腳。工具集的設(shè)計(jì)質(zhì)量直接決定了Agent能做什么、不能做什么。1. 工具的設(shè)計(jì)原則功能單一且明確一個(gè)工具只做一件事并且有清晰的功能描述。search_web(query: str)就比do_research(topic: str)要好因?yàn)楹笳吆x模糊。描述詳盡工具的文本描述提供給LLM的必須極其詳盡包括功能、輸入?yún)?shù)名稱、類型、含義、示例、輸出格式、可能的錯(cuò)誤碼。LLM完全依賴這段文本來理解和使用工具。健壯且安全工具的實(shí)現(xiàn)代碼必須有完善的錯(cuò)誤處理如網(wǎng)絡(luò)超時(shí)、API限流并對(duì)輸入?yún)?shù)進(jìn)行嚴(yán)格的驗(yàn)證和清理防止注入攻擊。特別是執(zhí)行刪除、寫入、系統(tǒng)命令等危險(xiǎn)操作的工具必須有額外的授權(quán)或確認(rèn)機(jī)制。2. 工具的選擇與調(diào)用LLM如何從一堆工具中選出正確的那一個(gè)這依賴于工具描述的嵌入與檢索將所有工具的描述轉(zhuǎn)換成向量存儲(chǔ)在向量數(shù)據(jù)庫(kù)中。當(dāng)Agent需要選擇工具時(shí)將當(dāng)前的“思考”或用戶問題也轉(zhuǎn)換成向量進(jìn)行相似度檢索快速篩選出最相關(guān)的幾個(gè)工具候選。這比讓LLM一次性處理所有工具描述要高效得多。參數(shù)提取選定工具后LLM需要從對(duì)話歷史或上下文中提取出符合工具接口要求的參數(shù)。這是一個(gè)典型的“信息抽取”任務(wù)。提示詞需要明確指示“請(qǐng)根據(jù)以上對(duì)話為book_flight工具提取參數(shù)departure_city,arrival_city,date?!?. 新興模式工具即代碼一些前沿探索正在將工具的使用推向更高層次。例如讓Agent直接生成一小段Python代碼來執(zhí)行復(fù)雜操作然后在一個(gè)安全的沙箱環(huán)境中運(yùn)行它。這相當(dāng)于賦予了Agent“創(chuàng)造新工具”的能力但其安全性挑戰(zhàn)也呈指數(shù)級(jí)增長(zhǎng)。4.3 記憶系統(tǒng)Memory經(jīng)驗(yàn)的沉淀沒有記憶的Agent就像金魚每次對(duì)話都是新的開始。記憶系統(tǒng)讓Agent能夠進(jìn)行多輪復(fù)雜協(xié)作并積累經(jīng)驗(yàn)。1. 記憶的類型對(duì)話歷史最基礎(chǔ)的記憶存儲(chǔ)用戶與Agent的所有交互記錄。通常以列表形式保存并作為上下文的一部分喂給LLM。實(shí)體記憶存儲(chǔ)關(guān)于特定實(shí)體如人、地點(diǎn)、事件的事實(shí)信息。例如用戶說過“我對(duì)花生過敏”這個(gè)信息就應(yīng)該作為“用戶”實(shí)體的一個(gè)屬性被存儲(chǔ)下來并在未來的相關(guān)場(chǎng)景如推薦餐廳中被回憶起來。向量記憶這是實(shí)現(xiàn)“長(zhǎng)期記憶”和“關(guān)聯(lián)回憶”的關(guān)鍵。將對(duì)話中的關(guān)鍵信息、工具調(diào)用的結(jié)果總結(jié)等轉(zhuǎn)換成文本摘要再編碼成向量存入向量數(shù)據(jù)庫(kù)如Chroma, Pinecone。當(dāng)需要回憶時(shí)將當(dāng)前問題向量化去數(shù)據(jù)庫(kù)中搜索語(yǔ)義上最相關(guān)的記憶片段作為上下文注入。這解決了傳統(tǒng)上下文窗口長(zhǎng)度有限的問題。摘要記憶對(duì)于非常長(zhǎng)的對(duì)話或任務(wù)歷史定期或按需讓LLM對(duì)之前的內(nèi)容進(jìn)行摘要用摘要替代原始冗長(zhǎng)的記錄以節(jié)省上下文空間同時(shí)保留核心信息。2. 記憶的讀寫策略何時(shí)寫重要的決策點(diǎn)、工具調(diào)用的關(guān)鍵結(jié)果、用戶明確提供的個(gè)人信息、任務(wù)達(dá)成的里程碑。何時(shí)讀在每一輪“思考”開始前根據(jù)當(dāng)前的任務(wù)和目標(biāo)主動(dòng)從向量記憶中檢索相關(guān)經(jīng)驗(yàn)。例如當(dāng)用戶再次問到一個(gè)類似的問題時(shí)Agent可以檢索到上次是如何解決的從而避免重復(fù)勞動(dòng)或重復(fù)犯錯(cuò)。3. 記憶的挑戰(zhàn)記憶不是越多越好。無關(guān)的記憶會(huì)干擾LLM的判斷形成“噪聲”。因此需要設(shè)計(jì)精妙的檢索策略如基于時(shí)間、相關(guān)性、重要性的加權(quán)檢索和記憶整理壓縮、摘要、遺忘機(jī)制。4.4 評(píng)估與安全Evaluation Safety不可或缺的剎車系統(tǒng)這是Agent系統(tǒng)中最容易被忽視但也最致命的一環(huán)。一個(gè)不受控的Agent可能會(huì)陷入死循環(huán)、調(diào)用危險(xiǎn)工具、或產(chǎn)生有害輸出。1. 評(píng)估的類型過程評(píng)估在Agent執(zhí)行過程中進(jìn)行。例如在每次工具調(diào)用前檢查參數(shù)是否安全在每次LLM生成思考后判斷其推理邏輯是否合理、是否偏離目標(biāo)。這通常由一個(gè)輕量級(jí)的“監(jiān)督者”LLM或一套規(guī)則系統(tǒng)來完成。結(jié)果評(píng)估在任務(wù)完成后進(jìn)行。評(píng)估最終輸出是否滿足了用戶的需求質(zhì)量如何。這可以用于對(duì)Agent進(jìn)行迭代優(yōu)化。成本與效率評(píng)估監(jiān)控Agent執(zhí)行任務(wù)所花費(fèi)的Token數(shù)、API調(diào)用次數(shù)、耗時(shí)等。對(duì)于可能無限循環(huán)或進(jìn)行無意義搜索的Agent必須設(shè)置硬性限制如最大步數(shù)、最大Token消耗。2. 安全護(hù)欄的實(shí)現(xiàn)工具調(diào)用白名單嚴(yán)格限制Agent可以調(diào)用的工具范圍。對(duì)于高風(fēng)險(xiǎn)工具設(shè)置額外的確認(rèn)步驟或權(quán)限等級(jí)。輸入/輸出過濾對(duì)用戶輸入和Agent輸出進(jìn)行內(nèi)容安全過濾防止提示詞注入、敏感信息泄露或生成不當(dāng)內(nèi)容。人機(jī)回環(huán)Human-in-the-loop對(duì)于關(guān)鍵決策或高風(fēng)險(xiǎn)操作設(shè)計(jì)暫停點(diǎn)要求人工確認(rèn)后再繼續(xù)。這在金融、醫(yī)療等領(lǐng)域的Agent中尤為重要。避坑指南千萬(wàn)不要在開發(fā)后期才考慮安全和評(píng)估。安全護(hù)欄必須與Agent核心邏輯同步設(shè)計(jì)。一個(gè)實(shí)用的方法是在架構(gòu)設(shè)計(jì)之初就為每一個(gè)“行動(dòng)節(jié)點(diǎn)”配置一個(gè)對(duì)應(yīng)的“評(píng)估節(jié)點(diǎn)”。評(píng)估節(jié)點(diǎn)像一個(gè)哨兵決定是否放行這次行動(dòng)。這雖然增加了復(fù)雜度但能從根本上避免“失控”的風(fēng)險(xiǎn)。5. 實(shí)戰(zhàn)設(shè)計(jì)一個(gè)簡(jiǎn)單的多步驟研究Agent理論說了這么多我們來動(dòng)手設(shè)計(jì)一個(gè)相對(duì)簡(jiǎn)單的Agent感受一下從理念到架構(gòu)的落地過程。假設(shè)我們要構(gòu)建一個(gè)“多步驟研究Agent”它的目標(biāo)是根據(jù)用戶提出的一個(gè)復(fù)雜問題例如“對(duì)比一下OpenAI的o1-preview模型和Anthropic的Claude 3.5 Sonnet在復(fù)雜推理任務(wù)上的表現(xiàn)”自動(dòng)進(jìn)行多輪網(wǎng)絡(luò)搜索、信息整合并最終生成一份結(jié)構(gòu)化的分析報(bào)告。5.1 系統(tǒng)架構(gòu)設(shè)計(jì)我們將采用基于“圖”的架構(gòu)思想但不依賴特定框架用偽代碼和組件圖來說明。核心組件主控LLM負(fù)責(zé)規(guī)劃、思考、總結(jié)。我們選用一個(gè)擅長(zhǎng)推理的模型如Claude 3.5 Sonnet或GPT-4o。工具集web_search(query: str, num_results: int): 執(zhí)行網(wǎng)絡(luò)搜索返回標(biāo)題、鏈接和摘要。fetch_webpage_content(url: str): 抓取指定網(wǎng)頁(yè)的正文內(nèi)容。summarize_text(text: str, focus: str): 對(duì)長(zhǎng)文本進(jìn)行摘要聚焦于特定方面。compare_entities(entity_a_info: str, entity_b_info: str, criteria: list): 根據(jù)給定標(biāo)準(zhǔn)對(duì)比兩段信息。記憶系統(tǒng)對(duì)話歷史存儲(chǔ)在內(nèi)存列表中。研究筆記向量記憶一個(gè)向量數(shù)據(jù)庫(kù)用于存儲(chǔ)從網(wǎng)頁(yè)中提取的關(guān)鍵事實(shí)、數(shù)據(jù)和觀點(diǎn)摘要。狀態(tài)State一個(gè)共享的字典對(duì)象包含以下關(guān)鍵字段user_query: 原始用戶問題。research_plan: 主控LLM生成的初步研究步驟列表。collected_info: 一個(gè)列表存放收集到的所有信息片段每條包含來源、內(nèi)容、摘要。current_step: 當(dāng)前執(zhí)行到研究計(jì)劃的哪一步。report_draft: 最終報(bào)告的草稿。執(zhí)行圖節(jié)點(diǎn)與邊我們的Agent可以抽象為以下幾個(gè)節(jié)點(diǎn)它們根據(jù)狀態(tài)決定執(zhí)行流節(jié)點(diǎn)制定計(jì)劃輸入狀態(tài)中的user_query。邏輯調(diào)用主控LLM提示它根據(jù)問題制定一個(gè)分步研究計(jì)劃。例如“1. 搜索o1-preview的官方技術(shù)報(bào)告和評(píng)測(cè)。2. 搜索Claude 3.5 Sonnet的官方文檔和基準(zhǔn)測(cè)試。3. 查找第三方對(duì)兩者進(jìn)行對(duì)比的評(píng)測(cè)文章。4. 整合信息從推理速度、準(zhǔn)確性、成本等維度進(jìn)行對(duì)比?!陛敵龈聽顟B(tài)中的research_plan和current_step。節(jié)點(diǎn)執(zhí)行研究步驟輸入狀態(tài)中的research_plan和current_step。邏輯這是一個(gè)循環(huán)子圖。根據(jù)當(dāng)前步驟的描述決定需要調(diào)用哪個(gè)工具主要是web_search。獲取搜索結(jié)果后可能并行或串行地調(diào)用fetch_webpage_content和summarize_text將提煉后的信息存入collected_info和向量記憶。輸出更新collected_infocurrent_step加一。節(jié)點(diǎn)評(píng)估與路由輸入整個(gè)狀態(tài)。邏輯判斷是繼續(xù)執(zhí)行下一個(gè)研究步驟還是進(jìn)入“生成報(bào)告”階段。判斷依據(jù)可以是是否所有計(jì)劃步驟都已完成收集的信息是否已經(jīng)足夠例如collected_info達(dá)到一定數(shù)量或質(zhì)量輸出決定下一個(gè)節(jié)點(diǎn)是“執(zhí)行研究步驟”還是“生成報(bào)告”。節(jié)點(diǎn)生成報(bào)告輸入狀態(tài)中的user_query和collected_info可能還會(huì)從向量記憶中檢索相關(guān)信息。邏輯調(diào)用主控LLM將所有收集到的信息作為上下文生成最終的結(jié)構(gòu)化分析報(bào)告。輸出更新狀態(tài)中的report_draft并將報(bào)告返回給用戶。5.2 關(guān)鍵實(shí)現(xiàn)細(xì)節(jié)與提示詞設(shè)計(jì)1. 規(guī)劃階段的提示詞示例你是一個(gè)專業(yè)的研究助理。你的任務(wù)是為用戶提出的復(fù)雜問題制定一個(gè)高效、全面的研究計(jì)劃。 用戶問題{user_query} 請(qǐng)遵循以下步驟思考 1. 理解問題的核心確定需要研究的關(guān)鍵實(shí)體如產(chǎn)品、技術(shù)、人物和對(duì)比維度。 2. 思考為了全面回答這個(gè)問題需要獲取哪些方面的信息這些信息可能分布在哪些類型的來源中官方文檔、技術(shù)博客、學(xué)術(shù)論文、評(píng)測(cè)報(bào)告 3. 將這些信息需求轉(zhuǎn)化為具體的、可執(zhí)行的網(wǎng)絡(luò)搜索查詢。請(qǐng)列出3-5個(gè)搜索查詢?cè)~這些詞應(yīng)能有效覆蓋不同信息面。 請(qǐng)以JSON格式輸出你的研究計(jì)劃包含以下字段 - key_entities: [列表關(guān)鍵實(shí)體] - research_dimensions: [列表需要研究的維度如“性能”、“價(jià)格”、“適用場(chǎng)景”] - search_queries: [列表具體的搜索查詢字符串]2. 工具調(diào)用搜索的提示詞示例給LLM的思考步驟當(dāng)前狀態(tài)我們正在執(zhí)行研究計(jì)劃的第{current_step}步目標(biāo)是“{step_description}”。 我們已經(jīng)收集到的相關(guān)信息有{brief_context_from_memory}。 請(qǐng)決定下一步行動(dòng) A. 如果認(rèn)為當(dāng)前信息已足夠完成本步驟的分析請(qǐng)直接生成一個(gè)本步驟的信息小結(jié)。 B. 如果認(rèn)為還需要更多信息請(qǐng)生成一個(gè)用于web_search工具的查詢。請(qǐng)確保查詢具體、明確能搜到高質(zhì)量信息。 你的輸出必須是以下JSON格式之一 {“action”: “summarize_step”, “content”: “本步驟的小結(jié)內(nèi)容…”} 或 {“action”: “search”, “query”: “具體的搜索查詢?cè)~”}3. 信息整合與報(bào)告生成的提示詞示例你是一位技術(shù)分析師。以下是你圍繞問題“{user_query}”收集到的所有研究資料摘要 {formatted_collected_info} 請(qǐng)基于以上信息撰寫一份結(jié)構(gòu)清晰、論據(jù)充分的對(duì)比分析報(bào)告。 報(bào)告需包含 1. 引言簡(jiǎn)述問題背景。 2. 分維度對(duì)比針對(duì)每個(gè)研究維度分別陳述雙方的表現(xiàn)引用具體的數(shù)據(jù)或事實(shí)來源。 3. 綜合結(jié)論總結(jié)各自的優(yōu)勢(shì)和劣勢(shì)并給出適用場(chǎng)景的建議。 4. 參考文獻(xiàn)列出信息的主要來源。 請(qǐng)確保報(bào)告客觀、準(zhǔn)確避免主觀臆斷。5.3 潛在問題與優(yōu)化方向信息冗余與沖突不同來源的信息可能重復(fù)或矛盾。需要在信息存入collected_info時(shí)進(jìn)行去重和可信度評(píng)估優(yōu)先采用官方來源、高權(quán)威性網(wǎng)站。搜索循環(huán)Agent可能為了追求“完美”信息而陷入無限搜索。必須設(shè)置最大搜索輪次如每個(gè)子問題最多搜索3次和超時(shí)機(jī)制。報(bào)告質(zhì)量依賴信息質(zhì)量Garbage in, garbage out。如果搜索查詢?cè)O(shè)計(jì)得不好抓取到的信息質(zhì)量差最終報(bào)告也會(huì)很差。優(yōu)化搜索查詢的生成是關(guān)鍵可以引入“查詢優(yōu)化”節(jié)點(diǎn)讓LLM基于初步搜索結(jié)果反思并優(yōu)化查詢?cè)~。成本控制每次LLM調(diào)用、工具調(diào)用都有成本。需要對(duì)整個(gè)Agent流程進(jìn)行成本預(yù)估和監(jiān)控對(duì)于簡(jiǎn)單的子任務(wù)可以考慮使用更小、更便宜的模型。這個(gè)簡(jiǎn)單的例子展示了如何將ReAct循環(huán)、規(guī)劃、工具使用、記憶等概念組合成一個(gè)可運(yùn)行的Agent。雖然離真正的“智能”還有距離但它已經(jīng)具備了根據(jù)目標(biāo)自主制定計(jì)劃、執(zhí)行多步操作、并整合結(jié)果的基本能力。6. 未來展望與個(gè)人思考從Workflow到Agent的演進(jìn)本質(zhì)上是從“自動(dòng)化”走向“智能化”。Workflow解決了“已知流程的自動(dòng)執(zhí)行”問題而Agent試圖解決的是“未知問題的自主求解”。這無疑是AI應(yīng)用的一個(gè)激動(dòng)人心的方向?;仡橝nthropic和OpenAI的指南以及社區(qū)的實(shí)踐我認(rèn)為有幾個(gè)趨勢(shì)會(huì)越來越明顯1. 專用化Agent與通用基礎(chǔ)模型的結(jié)合未來我們可能不會(huì)只有一個(gè)“萬(wàn)能Agent”而是會(huì)涌現(xiàn)出大量“專用Agent”——精通財(cái)務(wù)分析的Agent、擅長(zhǎng)UI設(shè)計(jì)的Agent、專攻代碼調(diào)試的Agent。它們基于同一個(gè)強(qiáng)大的基礎(chǔ)模型如Claude、GPT但擁有定制化的工具鏈、提示詞模板和領(lǐng)域知識(shí)庫(kù)。構(gòu)建這樣的Agent將成為開發(fā)者的核心技能。2. 多Agent協(xié)作成為常態(tài)復(fù)雜任務(wù)需要分工協(xié)作。我們會(huì)看到由多個(gè)Agent組成的“團(tuán)隊(duì)”或“劇組”其中一個(gè)扮演“項(xiàng)目經(jīng)理”負(fù)責(zé)規(guī)劃和協(xié)調(diào)其他的扮演“研究員”、“寫手”、“設(shè)計(jì)師”等角色各司其職共同完成任務(wù)??蚣苋鏑rewAI、AutoGen正是在探索這一范式。3. 評(píng)估與基準(zhǔn)測(cè)試的標(biāo)準(zhǔn)化如何評(píng)價(jià)一個(gè)Agent的好壞它比另一個(gè)Agent“聰明”在哪里這需要一套超越傳統(tǒng)NLP評(píng)測(cè)的、針對(duì)規(guī)劃、工具使用、多步任務(wù)完成的基準(zhǔn)測(cè)試體系。類似SWE-bench評(píng)測(cè)代碼能力、WebArena評(píng)測(cè)網(wǎng)頁(yè)交互能力的基準(zhǔn)會(huì)越來越重要。4. 開發(fā)范式的變化開發(fā)Agent更像是在“培養(yǎng)”或“訓(xùn)練”一個(gè)數(shù)字員工而不是“編寫”一個(gè)程序。調(diào)試過程不再是單純地看日志和堆棧跟蹤而是需要分析Agent的“思考過程”它的內(nèi)部獨(dú)白理解它為什么做出了某個(gè)錯(cuò)誤決策然后通過修改提示詞、增加示例、調(diào)整工具描述來“教導(dǎo)”它。對(duì)我個(gè)人而言轉(zhuǎn)向Agent思維最大的收獲是重新審視了“人機(jī)交互”的邊界。我們不再是與一個(gè)執(zhí)行固定命令的機(jī)器對(duì)話而是在與一個(gè)擁有一定自主性的合作伙伴協(xié)作。這要求我們學(xué)會(huì)如何清晰地表達(dá)意圖、設(shè)定邊界、并提供有效的反饋。同時(shí)也對(duì)系統(tǒng)的可靠性和安全性提出了前所未有的高要求。這條路才剛剛開始工具和框架也在快速迭代。但萬(wàn)變不離其宗理解其核心范式——目標(biāo)導(dǎo)向、感知-思考-行動(dòng)循環(huán)、工具擴(kuò)展、記憶與評(píng)估——能幫助我們?cè)诩姺钡募夹g(shù)細(xì)節(jié)中抓住主線構(gòu)建出真正有用且可靠的智能體。