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