使用 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 物件——一個包含 AddMessagesReset 方法的訊息切片 (slice)——會追蹤使用者的提示詞 (prompt) 與助理的回答。這些累積的歷史紀錄會在每次後續呼叫時傳回給 LLM,以維持上下文。

4. 執行迴圈

Agent 的核心邏輯是一個執行以下序列的迴圈:

  1. 記錄提示詞:將使用者的輸入加入到歷史紀錄中。
  2. 呼叫模型:將提示詞、系統指令、工具列表與對話歷史紀錄傳送給 LLM。
  3. 處理回覆:列印並記錄助理的初始回覆到歷史紀錄中。
  4. 執行工具:模型決定呼叫哪些工具;處理器執行它們,並回報結果。
  5. 最終答案:模型根據工具輸出產生最終答案,隨後將其列印並記錄。

為何實作如此簡潔

實作的簡潔性是透過三個架構選擇來實現的:

  • 自我描述服務:在程式碼中使用 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 觸發的事件驅動機制。

Sources