Eino ADK:一文搞定 AI Agent 核心設計模式,從 0 到 1 搭建智能體系統 - 新聞 詳情

當大語言模型突破了 “理解與生成” 的瓶頸,Agent 迅速成為 AI 落地的主流形態。從智能客服到自動化辦公,幾乎所有場景都需要 Agent 來承接 LLM 能力、執行具體任務。

但技術演進中痛點也隨之凸顯,有的團隊因不懂如何銜接 LLM 與業務系統,導致 Agent 只能 “空談”;有的因狀態管理缺失,讓 Agent 執行任務時頻頻 “失憶”,複雜的交互流程也進一步增加了開發難度。

為此,Eino ADK(Agent Development Kit)應運而生,為 Go 開發者提供了一套完整、靈活且強大的智能體開發框架,直接解決傳統開發中的核心難題。

🙋 什麼Agent?

Agent 代表一個獨立的、可執行的智能任務單元,能夠自主學習,適應與作出決策,主要功能包含:

  • 推理:Agent 可以分析數據、識別模式、使用邏輯和可用信息來得出結論、進行推斷及解決問題。
  • 行動:Agent 根據決策、計劃或外部輸入採取行動或執行任務來實現目標。
  • 觀察:Agent 自主收集相關的信息(例如計算機視覺、自然語言處理或傳感器數據分析)來了解上下文,為做出明智的決策打下基礎。
  • 規劃:Agent 可以確定必要的步驟、評估潛在行動,並根據可用信息和預期結果選擇最佳行動方案。
  • 協作:Agent 能夠在複雜且動態的環境中,與他人(無論是人類還是其他 AI 智能體)進行有效協作。

你可以把它想象成一個能夠理解指令、執行任務並給出迴應的“智能體”。任何需要與大語言模型(LLM)交互的場景都可以抽象為一個 Agent。例如:

  • 一個用於查詢天氣信息的 Agent。
  • 一個用於預定會議的 Agent。
  • 一個能夠回答特定領域知識的 Agent。

🙋‍♂️ 什麼是 Eino ADK?

Eino ADK 是一個專為 Go 語言設計的 Agent 和 Multi-Agent 開發框架,設計上參考了 Google-ADK 中對 Agent 與協作機制的定義。

它不僅是一個工具庫,更是一套完整的智能體開發體系:通過統一的抽象接口、靈活的組合模式和強大的協作機制,將複雜的 AI 應用拆解為獨立、可組合的智能體單元,讓開發者能夠像搭建樂高積木一樣構建複雜的智能體系統:

  • 少寫膠水:統一接口與事件流,複雜任務拆解更自然。
  • 快速編排:預設範式 + 工作流,分分鐘搭好管線。
  • 更可控:可中斷、可恢復、可審計,Agent 協作過程“看得見”。

無論你是 AI 應用的新手,還是經驗豐富的開發者,ADK 都能為你提供合適的工具和模式。它的設計哲學是"簡單的事情簡單做,複雜的事情也能做"——讓開發者能夠專注於業務邏輯的實現,而不必擔心底層的技術複雜性。

核心構建

🧠 ChatModelAgent:智能決策的大腦

ChatModelAgent 是 ADK 中最重要的預構建組件,它封裝了與大語言模型的交互邏輯,實現了經典的 ReAct(Reason-Act-Observe)模式,運行過程為:

  1. 調用 LLM(Reason)
  2. LLM 返回工具調用請求(Action)
  3. ChatModelAgent 執行工具(Act)
  4. 將工具結果返回給 LLM(Observation),結合之前的上下文繼續生成,直到模型判斷不需要調用 Tool 後結束。

ReAct

ReAct 模式的核心是**“思考 → 行動 → 觀察 → 再思考”**的閉環,解決傳統 Agent “盲目行動”或“推理與行動脱節”的痛點,以下是幾種可能的實踐場景:

  • 行業賽道分析:使用 ReAct 模式避免了一次性蒐集全部信息導致的信息過載,通過逐步推理聚焦核心問題;同時使用數據驗證思考,而非憑空靠直覺決策,過程可解釋,提升了生成報告的準確性。
    • Think-1:判斷賽道潛力,需要 “政策支持力度、行業增速、龍頭公司盈利能力、產業鏈瓶頸”4 類信息。
    • Act-1:調用 API 獲取行業財報整體數據
    • Think-2:分析數據,判斷行業高增長 + 政策背書,但上游價格上漲可能擠壓中下游利潤,需要進一步驗證是否有影響
    • Act-2: 調用 API 獲取供需、行業研報等詳細數據
    • Think-3: 整合結論生成分析報告,附關鍵數據來源
  • IT 故障運維:使用 ReAct 模式逐步縮小問題範圍,避免盲目操作;每一步操作有理有據,方便運維工程師實施解決方案前的二次驗證,為後續覆盤與制定預防措施提供基礎。
    • Think-1:理清故障的常見原因,例如宕機的常見原因是 “CPU 過載、內存不足、磁盤滿、服務崩潰”,需要先查基礎監控數據
    • Act-1:調用「監控系統 API」查詢服務器打點數據
    • Think-2:判斷主因,例如 CPU 利用率異常則進一步排查哪些進程 CPU 佔用高
    • Act-2:用「進程管理工具」查 TOP 進程,看是否有異常服務
    • Think-3:發現日誌服務異常,可能是 “日誌文件過大” 或 “配置錯誤”,需要進一步查看日誌服務的配置和日誌文件大小
    • Act-3:bash 執行命令,發現日誌文件過大,同時配置未開啓滾動,也未設置最大日誌大小
    • Think-4:向運維工程師提供可行的解決方案:清理日誌,修改配置並開啓滾動,重啓日誌服務與應用

ChatModelAgent 利用 LLM 強大的功能進行推理、理解自然語言、作出決策、生成相應、進行工具交互,充當智能體應用程序 "思考" 的部分。您可以使用 ADK 快速構建具有 ReAct 能力的 ChatModelAgent

import github.com/cloudwego/eino/adk

// 創建一個包含多個工具的 ReAct ChatModelAgent
chatAgent := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
    Name:        "intelligent_assistant",
    Description: "An intelligent assistant capable of using multiple tools to solve complex problems",
    Instruction: "You are a professional assistant who can use the provided tools to help users solve problems",
    Model:       openaiModel,
    ToolsConfig: adk.ToolsConfig{
        Tools: []tool.BaseTool{
            searchTool,
            calculatorTool,
            weatherTool,
        },
    }
})

🎭 WorkflowAgents:精密的流水線

Eino ADK 提供了專用於協調子 Agent 執行流程的 WorkflowAgents 模式,用於通過預定義邏輯管理 Agent 的運行方式,產生確定的執行過程,協助實現可預測可控制的多 Agent 協作方式。您可以按需對下列模式進行排列組合,結合 ChatModelAgent 構造出符合自身需求的完整工作流水線**:**

  • Sequential Agent: 將配置中註冊的 Agents 按順序依次執行一次後結束,運行遵循以下原則:
    • 線性執行:嚴格按照 SubAgents 數組的順序執行。
    • 運行結果傳遞:配置中的每個 Agent 都能夠獲取 Sequential Agent 的完整輸入以及前序 Agent 的輸出。
    • 支持提前退出:如果任何一個子 Agent 產生退出 / 中斷動作,整個 Sequential 流程會立即終止。
  • 可能的實踐場景有:
    • 數據 ETLExtractAgent(從 MySQL 抽取訂單數據)→ TransformAgent(清洗空值、格式化日期)→ LoadAgent(加載到數據倉庫)
    • CI / CD 流水線CodeCloneAgent(從代碼倉庫拉取代碼)→UnitTestAgent(運行單元測試,用例失敗時返回錯誤與分析報告)→CompileAgent(編譯代碼)→DeployAgent(部署到目標環境)
import github.com/cloudwego/eino/adk

// 依次執行 制定研究計劃 -> 搜索資料 -> 撰寫報告
sequential := adk.NewSequentialAgent(ctx, &adk.SequentialAgentConfig{
    Name: "research_pipeline",
    SubAgents: []adk.Agent{
        planAgent,    // 制定研究計劃
        searchAgent,  // 搜索資料
        writeAgent,   // 撰寫報告
    },
})




Sequential

  • Parallel Agent: 將配置中註冊的 Agents 併發執行,所有 Agent 執行完畢後結束,運行遵循以下原則:
    • 併發執行:所有子 Agent 同時啓動,在獨立的 goroutine 中並行執行。
    • 共享輸入:所有子 Agent 接收調用 Pararllel Agent 時相同的初始輸入。
    • 等待與結果聚合:內部使用 sync.WaitGroup 等待所有子 Agent 執行完成,收集所有子 Agent 的執行結果並按接收順序輸出到 AsyncIterator 中。
  • 可能的實踐場景有:
    • 多源數據採集MySQLCollector(採集用户表)+ PostgreSQLCollector(採集訂單表)+ MongoDBCollector(採集商品評論)
    • 多渠道推送WeChatPushAgent(推送到微信公眾號)+ SMSPushAgent(發送短信)+ AppPushAgent(推送到 APP)
import github.com/cloudwego/eino/adk

// 併發執行 情感分析 + 關鍵詞提取 + 內容摘要
parallel := adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{
    Name: "multi_analysis",
    SubAgents: []adk.Agent{
        sentimentAgent,  // 情感分析
        keywordAgent,    // 關鍵詞提取
        summaryAgent,    // 內容摘要
    },
})

parallel

  • Loop Agent: 將配置中註冊的 Agents 按順序依次執行並循環多次,運行遵循以下原則:
    • 循環執行:重複執行 SubAgents 序列,每次循環都是一個完整的 Sequential 執行過程。
    • 運行結果累積:每次迭代的結果都會累積,後續迭代的輸入可以訪問所有歷史信息。
    • 條件退出:支持通過輸出包含 ExitAction 的事件或達到最大迭代次數來終止循環,配置 MaxIterations=0 時表示無限循環。
  • 可能的實踐場景有:
    • 數據同步CheckUpdateAgent(檢查源庫增量)→ IncrementalSyncAgent(同步增量數據)→ VerifySyncAgent(驗證一致性)
    • 壓力測試StartClientAgent(啓動測試客户端)→ SendRequestsAgent(發送請求)→ CollectMetricsAgent(收集性能指標)
import github.com/cloudwego/eino/adk

// 循環執行 5 次,每次順序為:分析當前狀態 -> 提出改進方案 -> 驗證改進效果
loop := adk.NewLoopAgent(ctx, &adk.LoopAgentConfig{
    Name: "iterative_optimization",
    SubAgents: []adk.Agent{
        analyzeAgent,  // 分析當前狀態
        improveAgent,  // 提出改進方案
        validateAgent, // 驗證改進效果
    },
    MaxIterations: 5,
})

loop

🛠️ 預構建的 Multi-Agent 範式

Eino ADK 基於日常 Multi-Agent 協作實踐中沉澱的最佳工程經驗,為用户提供兩種預構建的 Multi-Agent 範式,無需從頭設計協作邏輯即可開箱即用,覆蓋「集中式協調」與「結構化問題解決」兩大核心場景,高效支撐複雜任務的智能協作。

🎯 Supervisor 模式:集中式協調

Supervisor Agent 是 ADK 提供的一種中心化 Multi-Agent 協作模式,旨在為集中決策與分發執行的通用場景提供解決方案,由一個 Supervisor Agent(監督者) 和多個 SubAgent (子 Agent)組成,其中:

  • Supervisor Agent 負責任務的分配、子 Agent 完成後的結果彙總與下一步決策。
  • 子 Agents 專注於執行具體任務,並在完成後自動將任務控制權交回 Supervisor。

Supervisor

Supervisor 模式有如下特點:

  • 中心化控制:Supervisor 統一管理子 Agent,可根據輸入與子 Agent 執行結果動態調整任務分配。
  • 確定性回調:子 Agent 執行完畢後會將運行結果返回到 Supervisor Agent,避免協作流程中斷。
  • 鬆耦合擴展:子 Agent 可獨立開發、測試和替換,方便拓展與維護。

Supervisor 模式的這種層級化的結構非常適合於動態協調多個專業 Agent 完成複雜任務的場景,例如:

  • 科研項目管理:Supervisor 分配調研、實驗、報告撰寫任務給不同子 Agent。
  • 客户服務流程:Supervisor 根據用户問題類型,分配給技術支持、售後、銷售等子 Agent。
import github.com/cloudwego/eino/adk/prebuilt/supervisor

// 科研項目管理:創建一個監督者模式的 multi-agent
// 包含 research(調研),experimentation(實驗),report(報告)三個子 Agent
supervisor, err := supervisor.New(ctx, &supervisor.Config{
    SupervisorAgent: supervisorAgent,
    SubAgents: []adk.Agent{
        researchAgent,
        experimentationAgent,
        reportAgent,
    },
})


🎯 Plan-Execute 模式:結構化問題解決

Plan-Execute Agent 是 ADK 提供的基於「規劃-執行-反思」範式的 Multi-Agent 協作模式(參考論文 Plan-and-Solve Prompting),旨在解決複雜任務的分步拆解、執行與動態調整問題,通過 Planner(規劃器)、Executor(執行器)和 Replanner(重規劃器) 三個核心智能體的協同工作,實現任務的結構化規劃、工具調用執行、進度評估與動態重規劃,最終達成用户目標,其中:

  • Planner:根據用户目標,生成一個包含詳細步驟且結構化的初始任務計劃
  • Executor:執行當前計劃中的首個步驟
  • Replanner:評估執行進度,決定是修正計劃繼續交由 Executor 運行,或是結束任務

Plan-Execute

Plan-Execute 模式有如下特點:

  • 明確的分層架構:通過將任務拆解為規劃、執行和反思重規劃三個階段,形成層次分明的認知流程,體現了 “先思考再行動,再根據反饋調整” 的閉環認知策略,在各類場景中都能達到較好的效果。
  • 動態迭代優化:Replanner 根據執行結果和當前進度,實時判斷任務是否完成或需調整計劃,支持動態重規劃。該機制有效解決了傳統單次規劃難以應對環境變化和任務不確定性的瓶頸,提升了系統的魯棒性和靈活性。
  • 職責分明且鬆耦合:Plan-Execute 模式由多個智能體協同工作,支持獨立開發、測試和替換。模塊化設計方便擴展和維護,符合工程最佳實踐。
  • 具備良好擴展性:不依賴特定的語言模型、工具或 Agent,方便集成多樣化外部資源,滿足不同應用場景需求。

Plan-Execute 模式的「規劃 → 執行 → 重規劃」閉環結構非常適合需要多步驟推理、動態調整和工具集成的複雜任務場景,例如:

  • 複雜研究分析:通過規劃分解研究問題,執行多輪數據檢索與計算,動態調整研究方向和假設,提升分析深度和準確性。
  • 自動化工作流管理:將複雜業務流程拆解為結構化步驟,結合多種工具(如數據庫查詢、API 調用、計算引擎)逐步執行,並根據執行結果動態優化流程。
  • 多步驟問題解決:適用於需要分步推理和多工具協作的場景,如法律諮詢、技術診斷、策略制定等,確保每一步執行都有反饋和調整。
  • 智能助理任務執行:支持智能助理根據用户目標規劃任務步驟,調用外部工具完成具體操作,並根據重規劃思考結合用户反饋調整後續計劃,提升任務完成的完整性和準確性。
import github.com/cloudwego/eino/adk/prebuilt/planexecute

// Plan-Execute 模式的科研助手
researchAssistant := planexecute.New(ctx, &planexecute.Config{
    Planner: adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
        Name: "research_planner",
        Instruction: "制定詳細的研究計劃,包括文獻調研、數據收集、分析方法等",
        Model: gpt4Model,
    }),
    Executor: adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
        Name: "research_executor",
        ToolsConfig: adk.ToolsConfig{
            Tools: []tool.BaseTool{
                scholarSearchTool,
                dataAnalysisTool,
                citationTool,
            },
        },
    }),
    Replanner: replannerAgent,
})

基礎設計

🎯 統一的 Agent 抽象

ADK 的核心是一個簡潔而強大的 Agent 接口:

type Agent interface {
    Name(ctx context.Context) string
    Description(ctx context.Context) string
    Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
}

每個 Agent 都有明確的身份(Name)、清晰的職責(Description)和標準化的執行方式(Run),為 Agent 之間的發現與調用提供了基礎。無論是簡單的問答機器人,還是複雜的多步驟任務處理系統,都可以通過這個統一的接口加以實現。

⚡ 異步事件驅動架構

ADK 採用了異步事件流設計,通過 AsyncIterator[*AgentEvent] 實現非阻塞的事件處理,並通過 Runner 框架運行 Agent:

  • 實時響應AgentEvent 包含 Agent 執行過程中特定節點輸出(Agent 回覆、工具處理結果等等),用户可以立即看到 Agent 的思考過程和中間結果。
  • 追蹤執行過程AgentEvent 額外攜帶狀態修改動作與運行軌跡,便於開發調試和理解 Agent 行為。
  • 自動流程控制:框架通過 Runner 自動處理中斷、跳轉、退出行為,無需用户額外干預。

🤝 靈活的協作機制

Eino ADK 支持處於同一個系統內的 Agent 之間以多種方式進行協作(交換數據或觸發運行):

  • 共享 Session:單次運行過程中持續存在的 KV 存儲,用於支持跨 Agent 的狀態管理和數據共享。
// 獲取全部 SessionValues
func GetSessionValues(ctx context.Context) map[string]any

// 指定 key 獲取 SessionValues 中的一個值,key 不存在時第二個返回值為 false,否則為 true
func GetSessionValue(ctx context.Context, key string) (any, bool)

// 添加 SessionValues
func AddSessionValue(ctx context.Context, key string, value any)

// 批量添加 SessionValues
func AddSessionValues(ctx context.Context, kvs map[string]any)


  • 移交運行(Transfer):攜帶本 Agent 輸出結果上下文,將任務移交至子 Agent 繼續處理。適用於智能體功能可以清晰的劃分邊界與層級的場景,常結合 ChatModelAgent 使用,通過 LLM 的生成結果進行動態路由。結構上,以此方式進行協作的兩個 Agent 稱為父子 Agent:

Transfer

// 設置父子 Agent 關係
func SetSubAgents(ctx context.Context, agent Agent, subAgents []Agent) (Agent, error)

// 指定目標 Agent 名稱,構造 Transfer Event
func NewTransferToAgentAction(destAgentName string) *AgentAction


  • 顯式調用(ToolCall):將 Agent 視為工具進行調用。適用於 Agent 運行僅需要明確清晰的參數而非完整運行上下文的場景,常結合 ChatModelAgent,作為工具運行後將結果返回給 ChatModel 繼續處理。除此之外,ToolCall 同樣支持調用符合工具接口構造的、不含 Agent 的普通工具。

ToolCall

// 將 Agent 轉換為 Tool
func NewAgentTool(_ context.Context, agent Agent, options ...AgentToolOption) tool.BaseTool


🔄 中斷與恢復機制

Eino ADK 提供運行時中斷與恢復的功能,允許正在運行中的 Agent 主動中斷並保存其當前狀態,並在未來從中斷點恢復執行。該功能為長時間等待、可暫停或需要外部輸入(Human in the loop)等場景下的開發提供協助。

  • Agent 內部運行過程中,通過拋出含 Interrupt ActionEvent 主動通知 Runner 中斷運行,並允許攜帶額外信息供調用方閲讀與使用。
  • Runner 通過初始化時註冊的 CheckPointStore 記錄當前運行狀態
  • 重新準備好運行後,通過 Resume 方法攜帶恢復運行所需要的新信息,從斷點處重新啓動該 Agent 運行
// 1. 創建支持斷點恢復的 Runner
runner := adk.NewRunner(ctx, adk.RunnerConfig{
    Agent:           complexAgent,
    CheckPointStore: memoryStore, // 內存狀態存儲
})

// 2. 開始執行
iter := runner.Query(ctx, "recommend a book to me", adk.WithCheckPointID("1"))
for {
    event, ok := iter.Next()
    if !ok {
       break
    }
    if event.Err != nil {
       log.Fatal(event.Err)
    }
    if event.Action != nil {
        // 3. 由 Agent 內部拋出 Interrupt 事件
        if event.Action.Interrupted != nil {
           ii, _ := json.MarshalIndent(event.Action.Interrupted.Data, "", "\t")
           fmt.Printf("action: interrupted\n")
           fmt.Printf("interrupt snapshot: %v", string(ii))
        }
    }
}

// 4. 從 stdin 接收用户輸入
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("\nyour input here: ")
scanner.Scan()
fmt.Println()
nInput := scanner.Text()

// 5. 攜帶用户輸入信息,從斷點恢復執行
iter, err := runner.Resume(ctx, "1", adk.WithToolOptions([]tool.Option{subagents.WithNewInput(nInput)}))


快速開始

安裝

go get github.com/cloudwego/eino@latest


項目開發經理智能體

下面的示例使用 Eino ADK 構建了一個項目開發經理智能體,面向多方面管理協同的場景:

  • Project Manager Agent:項目經理智能體,整體使用 Supervisor 模式,各 Agent 的功能如下:
    • ResearchAgent:調研 Agent,負責調研並生成可行方案,支持中斷後從用户處接收額外的上下文信息來提高調研方案生成的準確性。
    • CodeAgent:編碼 Agent,使用知識庫工具,召回相關知識作為參考,生成高質量的代碼。
    • ReviewAgent:評論 Agent,使用順序工作流編排問題分析、評價生成、評價驗證三個步驟,對調研結果 / 編碼結果進行評審,給出合理的評價,供項目經理進行決策。
    • ProjectManagerAgent:項目經理 Agent,根據動態的用户輸入,路由並協調多個負責不同維度工作的子智能體開展工作。
  • 該 Agent 可能的工作場景為:
    • 從零開始實現項目:項目經理從需求入手,經由調研、編碼、評論三個 Agent 工作,最終完成項目交付。
    • 對已有項目的完善:項目經理從評論 Agent 獲得項目仍舊需要完善的功能點,交由編碼 Agent 進行實現,再交由評論 Agent 對修改後的代碼進行評審。
    • 開展技術調研:項目經理要求調研 Agent 生成技術調研報告,然後由評論 Agent 給出評審意見。調用方結合返回的技術調研報告和評審意見,決定後續動作。

ProjetctManager

設計點 傳統開發模式 基於 Eino ADK 開發
Agent 抽象 沒有統一定義,團隊協作開發效率差,後期維護成本高 統一定義,職責獨立,代碼整潔,便於各 Agent 分頭開發
輸入輸出 沒有統一定義,輸入輸出混亂;<br>運行過程只能手動加日誌,不利於調試 有統一定義,全部基於事件驅動;<br>運行過程通過 iterator 透出,所見即所得
Agent 協作 通過代碼手動傳遞上下文 框架自動傳遞上下文
中斷恢復能力 需要從零開始實現,解決序列化與反序列化、狀態存儲與恢復等問題 僅需在 Runner 中註冊 CheckPointStore,提供斷點數據存儲介質
Agent 模式 需要從零開始實現 多種成熟模式開箱即用

核心代碼如下,完整代碼詳見 Eino-Examples 項目中提供的源碼

func main() {
    ctx := context.Background()

    // Init chat model for agents
    tcm, err := openai.NewChatModel(ctx, &openai.ChatModelConfig{
       APIKey:  os.Getenv("OPENAI_API_KEY"),
       Model:   os.Getenv("OPENAI_MODEL"),
       BaseURL: os.Getenv("OPENAI_BASE_URL"),
       ByAzure: func() bool {
          return os.Getenv("OPENAI_BY_AZURE") == "true"
       }(),
    })
    if err != nil {
       log.Fatal(err)
    }

    // Init research agent
    researchAgent, err := agents.NewResearchAgent(ctx, tcm)
    if err != nil {
       log.Fatal(err)
    }

    // Init code agent
    codeAgent, err := agents.NewCodeAgent(ctx, tcm)
    if err != nil {
       log.Fatal(err)
    }

    // Init technical agent
    reviewAgent, err := agents.NewReviewAgent(ctx, tcm)
    if err != nil {
       log.Fatal(err)
    }

    // Init project manager agent
    s, err := agents.NewProjectManagerAgent(ctx, tcm)
    if err != nil {
       log.Fatal(err)
    }

    // Combine agents into ADK supervisor pattern
    // Supervisor: project manager
    // Sub-agents: researcher / coder / reviewer
    supervisorAgent, err := supervisor.New(ctx, &supervisor.Config{
       Supervisor: s,
       SubAgents:  []adk.Agent{researchAgent, codeAgent, reviewAgent},
    })
    if err != nil {
       log.Fatal(err)
    }

    // Init Agent runner
    runner := adk.NewRunner(ctx, adk.RunnerConfig{
       Agent:           supervisorAgent,
       EnableStreaming: true,                // enable stream output
       CheckPointStore: newInMemoryStore(),  // enable checkpoint for interrupt & resume
    })

    // Replace it with your own query
    query := "please generate a simple ai chat project with python."
    checkpointID := "1"

    // Start runner with a new checkpoint id
    iter := runner.Query(ctx, query, adk.WithCheckPointID(checkpointID))
    interrupted := false
    for {
       event, ok := iter.Next()
       if !ok {
          break
       }
       if event.Err != nil {
          log.Fatal(event.Err)
       }
       if event.Action != nil && event.Action.Interrupted != nil {
          interrupted = true
       }
       prints.Event(event)
    }

    if !interrupted {
       return
    }
    
    // interrupt and ask for additional user context
    scanner := bufio.NewScanner(os.Stdin)
    fmt.Print("\ninput additional context for web search: ")
    scanner.Scan()
    fmt.Println()
    nInput := scanner.Text()

    // Resume by checkpoint id, with additional user context injection
    iter, err = runner.Resume(ctx, checkpointID, adk.WithToolOptions([]tool.Option{agents.WithNewInput(nInput)}))
    if err != nil {
       log.Fatal(err)
    }
    for {
       event, ok := iter.Next()
       if !ok {
          break
       }
       if event.Err != nil {
          log.Fatal(event.Err)
       }
       prints.Event(event)
    }
}




結尾

Eino ADK 不僅僅是一個開發框架,更是一個完整的智能體開發生態。它通過統一的抽象、靈活的組合和強大的協作機制,讓 Go 開發者能夠輕鬆構建從簡單對話機器人到複雜多智能體系統的各種 AI 應用。

💡 立即開始你的智能體開發之旅

Eino ADK,讓智能體開發變得簡單而強大!

User Group

參考資料

[1]Eino ADK:https://github.com/cloudwego/eino

[2]Google-ADK:https://google.github.io/adk-docs/agents/

[3]ReAct:https://react-lm.github.io/

[4]源碼:https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/integration-project-manager

[5]Eino ADK 文檔:https://www.cloudwego.io/zh/docs/eino/core_modules/eino_adk/

[6]Eino ADK 源碼:https://github.com/cloudwego/eino/tree/main/adk

[7]業界討論:https://mp.weixin.qq.com/s/KuWfwNGxq9X4sVduPobMQQ

[8]Eino ADK Examples:https://github.com/cloudwego/eino-examples/tree/main/adk