使用 Go Micro 建立 AI Agent CLI
透過專注於四個核心組件:工具發現、模型整合、對話記憶與執行迴圈,大約只需 150 行程式碼即可實現一個 AI Agent CLI。這種方法消除了手動撰寫「if-then」邏輯來將使用者請求路由到特定服務的需求,而是依靠大型語言模型 (LLM) 根據提供的描述來推理應呼叫哪種工具。
工具呼叫 Agent 的四個組件
建立一個功能完備的 AI Agent 需要解決三個主要問題:為 LLM 提供可用工具列表、在收到請求時執行這些工具,以及透過對話記憶來維持上下文。
1. 工具發現
LLM 必須知道有哪些可用的函式可以呼叫。在 Go Micro 框架中,服務會將其端點註冊到註冊表 (registry) 中,其中包含請求類型與欄位元數據 (metadata)。這使得 Agent 可以自動生成工具列表,其中每個工具都包含名稱、描述(源自處理器 (handler) 的 doc comments)以及參數架構 (parameter schema)(源自請求結構體 (request struct) 的欄位)。
對於不使用 Go Micro 的開發者,此步驟涉及手動列舉端點並為 LLM 建立 {name, description, parameters} 列表。
2. 模型整合與執行
整合 LLM 需要一個與供應商無關的介面。透過使用統一的 ai.Model 介面,開發者只需更改一個字串,即可在 Anthropic、OpenAI、Gemini、Groq、Mistral、Together 或 Atlas Cloud 等供應商之間進行切換。
執行是由將工具列表與模型進行連接來處理的。當模型決定呼叫特定工具(例如 users_Users_Create)時,處理器會將請求路由到適當的 RPC 並將結果回傳給模型。
3. 對話記憶
為了支援後續問題,Agent 需要一個訊息累積器。一個簡單的 History 物件——一個包含 Add、Messages 與 Reset 方法的訊息切片 (slice)——會追蹤使用者的提示詞 (prompt) 與助理的回答。這些累積的歷史紀錄會在每次後續呼叫時傳回給 LLM,以維持上下文。
4. 執行迴圈
Agent 的核心邏輯是一個執行以下序列的迴圈:
- 記錄提示詞:將使用者的輸入加入到歷史紀錄中。
- 呼叫模型:將提示詞、系統指令、工具列表與對話歷史紀錄傳送給 LLM。
- 處理回覆:列印並記錄助理的初始回覆到歷史紀錄中。
- 執行工具:模型決定呼叫哪些工具;處理器執行它們,並回報結果。
- 最終答案:模型根據工具輸出產生最終答案,隨後將其列印並記錄。
為何實作如此簡潔
實作的簡潔性是透過三個架構選擇來實現的:
- 自我描述服務:在程式碼中使用 doc comments 與
@example標籤,讓 LLM 能夠接收使用提示,而無需開發者撰寫獨立的工具架構。 - 統一供應商介面:針對多個 LLM 供應商使用單一介面,消除了對特定供應商撰寫黏合程式碼 (glue code) 的需求。
- 自動執行連接:工具呼叫與 RPC 分發之間的連接透過
ai.WithTools(tools)自動處理,消除了手動路由邏輯的需求。
擴展 AI Agent
一旦建立了基礎迴圈,Agent 可以透過以下幾種增強功能進行擴展:
- 安全性:在執行具破壞性的工具呼叫之前增加確認步驟。
- 可觀測性:將每次工具呼叫記錄到稽核軌跡 (audit trail) 中。
- 安全性:過濾工具列表以限制 Agent 對特定服務的存取權限。
- 介面:將 REPL (Read-Eval-Print Loop) 替換為 Slack bot 或透過
micro flow觸發的事件驅動機制。