劃、工具、記憶與循環(huán))
如何讓程序像人一樣把大任務拆成小步驟調(diào)用外部工具獲取信息并記住已經(jīng)做過的事情最終給出可靠的答案一個“最小可用”的 Agent 并不需要龐大的模型或復雜的多智能體框架只需四個彼此協(xié)作的組件規(guī)劃器Planner、工具執(zhí)行器Tools、記憶機制Memory和主循環(huán)控制Main Loop。一、規(guī)劃器Planner—— 決策的“大腦”規(guī)劃器負責回答一個核心問題“根據(jù)當前已知信息下一步該做什么”它有兩種實現(xiàn)模式可以根據(jù)場景切換 狀態(tài)機模式輕量、確定、無需 LLM將任務分解為多個階段每個階段檢查記憶中的特定標志然后決定調(diào)用哪個工具。例如對于一個“先計算后搜索”的任務狀態(tài)機邏輯為# 檢查記憶中的工具返回記錄has_calcany(計算結(jié)果instr(msg)formsginmemoryifmsg[role]tool)has_searchany(AI Agentinstr(msg)formsginmemoryifmsg[role]tool)ifnothas_calc:# 階段1執(zhí)行計算return{tool_calls:[{function:{name:calculator,arguments:{expression:12*934-10}}}]}elifnothas_search:# 階段2執(zhí)行搜索return{tool_calls:[{function:{name:search_info,arguments:{query:AI Agent 發(fā)展現(xiàn)狀與未來趨勢}}}]}else:# 階段3所有工具已完成生成最終回答return{content:綜合所有結(jié)果……,tool_calls:[]}這種模式無需調(diào)用大模型速度快、成本低適用于流程固定的任務。 LLM 模式靈活、泛化、帶工具描述當任務千變?nèi)f化時我們讓大模型本身充當規(guī)劃器。只需在系統(tǒng)提示中附上可用工具的schema函數(shù)名、參數(shù)、用途并讓模型輸出結(jié)構(gòu)化的tool_calls或最終回答。示例提示片段系統(tǒng)你是一個能調(diào)用工具的助手。可用工具calculator(expression)計算數(shù)學表達式search_info(query)搜索當前信息根據(jù)用戶問題決定調(diào)用工具或直接回答并以 JSON 格式返回。LLM 會根據(jù)當前記憶對話歷史自主決定調(diào)用哪個工具、調(diào)用幾次甚至進行反思修正。兩者對比? 表示優(yōu)勢?? 表示權(quán)衡特性狀態(tài)機模式LLM 模式?jīng)Q策依據(jù)硬編碼規(guī)則模型推理執(zhí)行速度? 極快較慢需 API 調(diào)用成本? 幾乎為零每次規(guī)劃需付費任務靈活性低需預定義流程? 高適應新任務可解釋性? 決策路徑清晰依賴模型解釋對記憶的依賴僅檢查特定字段? 全面理解上下文實際生產(chǎn)環(huán)境中兩者常結(jié)合使用用狀態(tài)機處理標準流程用 LLM 處理異常或復雜分支。二、工具執(zhí)行器Tools—— 行動的“手腳”規(guī)劃器決定調(diào)用哪個工具后必須有一個機制將工具名稱映射到實際函數(shù)并執(zhí)行它。最直接的方式是維護一個字典注冊表TOOL_MAP{calculator:lambdaexpression:eval(expression),# 生產(chǎn)環(huán)境請用安全計算庫search_info:lambdaquery:f根據(jù)搜索結(jié)果{query}—— 這里是模擬返回內(nèi)容}# 在循環(huán)中執(zhí)行forcallindecision[tool_calls]:func_namecall[function][name]argscall[function][arguments]resultTOOL_MAP[func_name](**args)# 將結(jié)果寫入記憶見第三部分工具可以是任何外部能力計算器、搜索引擎、數(shù)據(jù)庫查詢、API 調(diào)用、代碼解釋器等。關鍵在于統(tǒng)一輸入輸出格式讓規(guī)劃器和記憶機制無感知地處理結(jié)果。三、記憶機制Memory—— 經(jīng)驗的“便簽本”記憶是 Agent 的“工作區(qū)”它按時間順序存儲所有消息包括系統(tǒng)指令system定義角色和行為準則如“你是一個專業(yè) AI 智能體……”。用戶問題user原始任務。工具返回tool每次工具執(zhí)行的結(jié)果通常包含工具名稱和返回值。最終回答assistant規(guī)劃器生成的輸出。在 Python 中記憶就是一個列表memory[{role:system,content:你是一個專業(yè)AI智能體具備任務拆解、工具調(diào)用、反思修正能力。},{role:user,content:計算 12*934-10并介紹當前AI Agent的發(fā)展現(xiàn)狀與未來趨勢}]# 每次工具執(zhí)行后追加memory.append({role:tool,content:f計算結(jié)果{result}})# 最終回答追加memory.append({role:assistant,content:final_answer})記憶的作用為規(guī)劃器提供“已做之事”的上下文避免重復操作。在 LLM 模式下將完整記憶作為對話歷史傳入模型讓模型理解全局。最終可將記憶持久化實現(xiàn)多輪對話或斷點續(xù)接。四、主循環(huán)控制Main Loop—— 過程的“發(fā)動機”所有組件需要在一個循環(huán)中協(xié)同工作直到任務完成或超出步數(shù)限制。循環(huán)執(zhí)行“規(guī)劃 → 行動 → 觀察”三步形成經(jīng)典的ReActReason Act模式max_steps8forstepinrange(max_steps):# 1. 規(guī)劃decisionplanner.plan(memory)# 狀態(tài)機或 LLM# 2. 如果有最終回答結(jié)束循環(huán)ifdecision.get(content):final_answerdecision[content]memory.append({role:assistant,content:final_answer})break# 3. 否則執(zhí)行工具調(diào)用行動forcallindecision.get(tool_calls,[]):func_namecall[function][name]argscall[function][arguments]resultTOOL_MAP[func_name](**args)# 4. 觀察將結(jié)果寫回記憶memory.append({role:tool,content:result})# 如果達到最大步數(shù)仍未完成可強制輸出當前記憶或報錯最大步數(shù)如 8 步是防止死循環(huán)的安全閥。當 Agent 誤入重復調(diào)用時能主動退出并提示用戶。五、交互流程決策工具調(diào)用執(zhí)行結(jié)果決策最終回答上下文用戶輸入記憶系統(tǒng)規(guī)劃器工具執(zhí)行器輸出結(jié)果MainLoop而主循環(huán)的每一步都遵循“規(guī)劃→行動→觀察”的閉環(huán)用戶工具記憶規(guī)劃器主循環(huán)用戶工具記憶規(guī)劃器主循環(huán)alt[工具調(diào)用][最終回答]傳入當前記憶讀取狀態(tài)返回已有記錄返回決策工具調(diào)用/最終回答執(zhí)行工具返回結(jié)果寫入工具結(jié)果觀察下一輪規(guī)劃寫入最終回答輸出結(jié)果六、一個完整示例計算 搜索以用戶任務“計算 12*934-10并介紹當前 AI Agent 的發(fā)展現(xiàn)狀與未來趨勢”為例我們采用狀態(tài)機模式步數(shù)上限為 8實際執(zhí)行軌跡如下步驟階段決策依據(jù)行動/觀察1規(guī)劃記憶中沒有工具返回調(diào)用calculator參數(shù)12*934-101行動觀察執(zhí)行計算器得到 132將“計算結(jié)果132”寫入記憶2規(guī)劃記憶中有計算但無搜索調(diào)用search_info參數(shù)“AI Agent 發(fā)展…”2行動觀察執(zhí)行搜索返回一段描述將搜索返回內(nèi)容寫入記憶3規(guī)劃計算和搜索都已存在生成綜合回答包含數(shù)字結(jié)果和趨勢概述3完成輸出最終回答退出循環(huán)記憶追加 assistant 內(nèi)容最終回答模擬計算結(jié)果132根據(jù)搜索AI Agent 正在從單一智能體向多智能體協(xié)作演進趨勢是輕量化、可信化、行業(yè)化……綜合以上本次計算結(jié)果為 132AI Agent 正從單智能體向多智能體協(xié)作演進趨勢是輕量化、可信化、行業(yè)化。記憶最終狀態(tài)共 5 條消息system你是一個專業(yè)AI智能體……user計算 12*934-10并介紹……toolcalculator計算結(jié)果132toolsearch_info根據(jù)搜索結(jié)果……assistant綜合回答……七、總結(jié)與擴展一個最小可用的 Agent 架構(gòu)其精髓在于“以記憶為紐帶以規(guī)劃為引擎以工具為手腳以循環(huán)為節(jié)拍”。這種設計具備三個顯著優(yōu)點可觀測性每一步的決策、行動、觀察都被記錄便于調(diào)試和審計。可擴展性新增工具只需注冊到TOOL_MAP調(diào)整規(guī)劃器邏輯即可。成本可控狀態(tài)機模式幾乎不消耗模型調(diào)用LLM 模式僅在需要時啟用。可以在最小架構(gòu)之上疊加更多能力反思機制讓規(guī)劃器回顧歷史步驟判斷是否需要重新規(guī)劃。多智能體協(xié)作規(guī)劃器將任務分配給不同角色的子 Agent。流式輸出在生成最終回答時逐字返回提升用戶體驗。