Eino ADK:一文搞定 AI Agent 核心設(shè)計(jì)模式,從0到1搭建智能體系統(tǒng)

前言
當(dāng)大語(yǔ)言模型突破了“理解與生成”的瓶頸,Agent 迅速成為 AI 落地的主流形態(tài)。從智能客服到自動(dòng)化辦公,幾乎所有場(chǎng)景都需要 Agent 來(lái)承接 LLM 能力、執(zhí)行具體任務(wù)。
但技術(shù)演進(jìn)中痛點(diǎn)也隨之凸顯,有的團(tuán)隊(duì)因不懂如何銜接 LLM 與業(yè)務(wù)系統(tǒng),導(dǎo)致 Agent 只能 “空談”;有的因狀態(tài)管理缺失,讓 Agent 執(zhí)行任務(wù)時(shí)頻頻 “失憶”,復(fù)雜的交互流程也進(jìn)一步增加了開(kāi)發(fā)難度。
為此,Eino ADK(Agent Development Kit)應(yīng)運(yùn)而生,為 Go 開(kāi)發(fā)者提供了一套完整、靈活且強(qiáng)大的智能體開(kāi)發(fā)框架,直接解決傳統(tǒng)開(kāi)發(fā)中的核心難題。
什么是 Agent?
Agent 代表一個(gè)獨(dú)立的、可執(zhí)行的智能任務(wù)單元,能夠自主學(xué)習(xí),適應(yīng)與作出決策,主要功能包含:
- 推理:Agent 可以分析數(shù)據(jù)、識(shí)別模式、使用邏輯和可用信息來(lái)得出結(jié)論、進(jìn)行推斷及解決問(wèn)題。
- 行動(dòng):Agent 根據(jù)決策、計(jì)劃或外部輸入采取行動(dòng)或執(zhí)行任務(wù)來(lái)實(shí)現(xiàn)目標(biāo)。
- 觀察:Agent 自主收集相關(guān)的信息(例如計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理或傳感器數(shù)據(jù)分析)來(lái)了解上下文,為做出明智的決策打下基礎(chǔ)。
- 規(guī)劃:Agent 可以確定必要的步驟、評(píng)估潛在行動(dòng),并根據(jù)可用信息和預(yù)期結(jié)果選擇最佳行動(dòng)方案。
- 協(xié)作:Agent 能夠在復(fù)雜且動(dòng)態(tài)的環(huán)境中,與他人(無(wú)論是人類還是其他 AI 智能體)進(jìn)行有效協(xié)作。
你可以把它想象成一個(gè)能夠理解指令、執(zhí)行任務(wù)并給出回應(yīng)的“智能體”。任何需要與大語(yǔ)言模型(LLM)交互的場(chǎng)景都可以抽象為一個(gè) Agent。例如:
- 一個(gè)用于查詢天氣信息的 Agent。
- 一個(gè)用于預(yù)定會(huì)議的 Agent。
- 一個(gè)能夠回答特定領(lǐng)域知識(shí)的 Agent。
什么是 Eino ADK?
Eino ADK(https://github.com/cloudwego/eino)是一個(gè)專為 Go 語(yǔ)言設(shè)計(jì)的 Agent 和 Multi-Agent 開(kāi)發(fā)框架,設(shè)計(jì)上參考了 Google-ADK(https://google.github.io/adk-docs/agents/)中對(duì) Agent 與協(xié)作機(jī)制的定義。
它不僅是一個(gè)工具庫(kù),更是一套完整的智能體開(kāi)發(fā)體系:通過(guò)統(tǒng)一的抽象接口、靈活的組合模式和強(qiáng)大的協(xié)作機(jī)制,將復(fù)雜的 AI 應(yīng)用拆解為獨(dú)立、可組合的智能體單元,讓開(kāi)發(fā)者能夠像搭建樂(lè)高積木一樣構(gòu)建復(fù)雜的智能體系統(tǒng):
- 少寫(xiě)膠水:統(tǒng)一接口與事件流,復(fù)雜任務(wù)拆解更自然。
- 快速編排:預(yù)設(shè)范式+工作流,分分鐘搭好管線。
- 更可控:可中斷、可恢復(fù)、可審計(jì),Agent 協(xié)作過(guò)程“看得見(jiàn)”。
無(wú)論你是 AI 應(yīng)用的新手,還是經(jīng)驗(yàn)豐富的開(kāi)發(fā)者,ADK 都能為你提供合適的工具和模式。它的設(shè)計(jì)哲學(xué)是"簡(jiǎn)單的事情簡(jiǎn)單做,復(fù)雜的事情也能做"——讓開(kāi)發(fā)者能夠?qū)W⒂跇I(yè)務(wù)邏輯的實(shí)現(xiàn),而不必?fù)?dān)心底層的技術(shù)復(fù)雜性。
核心構(gòu)建
?? ChatModelAgent:智能決策的大腦
ChatModelAgent 是 ADK 中最重要的預(yù)構(gòu)建組件,它封裝了與大語(yǔ)言模型的交互邏輯,實(shí)現(xiàn)了經(jīng)典的 ReAct(https://react-lm.github.io/)(Reason-Act-Observe)模式,運(yùn)行過(guò)程為:
- 調(diào)用 LLM(Reason)
- LLM 返回工具調(diào)用請(qǐng)求(Action)
- ChatModelAgent 執(zhí)行工具(Act)
- 將工具結(jié)果返回給 LLM(Observation),結(jié)合之前的上下文繼續(xù)生成,直到模型判斷不需要調(diào)用 Tool 后結(jié)束。

ReAct 模式的核心是“思考→行動(dòng)→觀察→再思考”的閉環(huán),解決傳統(tǒng) Agent“盲目行動(dòng)”或“推理與行動(dòng)脫節(jié)”的痛點(diǎn),以下是幾種可能的實(shí)踐場(chǎng)景:
- 行業(yè)賽道分析:使用 ReAct 模式避免了一次性搜集全部信息導(dǎo)致的信息過(guò)載,通過(guò)逐步推理聚焦核心問(wèn)題;同時(shí)使用數(shù)據(jù)驗(yàn)證思考,而非憑空靠直覺(jué)決策,過(guò)程可解釋,提升了生成報(bào)告的準(zhǔn)確性。
- Think-1:判斷賽道潛力,需要“政策支持力度、行業(yè)增速、龍頭公司盈利能力、產(chǎn)業(yè)鏈瓶頸”4類信息。
- Act-1:調(diào)用 API 獲取行業(yè)財(cái)報(bào)整體數(shù)據(jù)
- Think-2:分析數(shù)據(jù),判斷行業(yè)高增長(zhǎng)+政策背書(shū),但上游價(jià)格上漲可能擠壓中下游利潤(rùn),需要進(jìn)一步驗(yàn)證是否有影響
- Act-2:調(diào)用 API 獲取供需、行業(yè)研報(bào)等詳細(xì)數(shù)據(jù)
- Think-3:整合結(jié)論生成分析報(bào)告,附關(guān)鍵數(shù)據(jù)來(lái)源
- IT 故障運(yùn)維:使用 ReAct 模式逐步縮小問(wèn)題范圍,避免盲目操作;每一步操作有理有據(jù),方便運(yùn)維工程師實(shí)施解決方案前的二次驗(yàn)證,為后續(xù)復(fù)盤(pán)與制定預(yù)防措施提供基礎(chǔ)。
- Think-1:理清故障的常見(jiàn)原因,例如宕機(jī)的常見(jiàn)原因是“CPU 過(guò)載、內(nèi)存不足、磁盤(pán)滿、服務(wù)崩潰”,需要先查基礎(chǔ)監(jiān)控?cái)?shù)據(jù)
- Act-1:調(diào)用「監(jiān)控系統(tǒng) API」查詢服務(wù)器打點(diǎn)數(shù)據(jù)
- Think-2:判斷主因,例如 CPU 利用率異常則進(jìn)一步排查哪些進(jìn)程 CPU 占用高
- Act-2:用「進(jìn)程管理工具」查 TOP 進(jìn)程,看是否有異常服務(wù)
- Think-3:發(fā)現(xiàn)日志服務(wù)異常,可能是“日志文件過(guò)大”或“配置錯(cuò)誤”,需要進(jìn)一步查看日志服務(wù)的配置和日志文件大小
- Act-3:bash 執(zhí)行命令,發(fā)現(xiàn)日志文件過(guò)大,同時(shí)配置未開(kāi)啟滾動(dòng),也未設(shè)置最大日志大小
- Think-4:向運(yùn)維工程師提供可行的解決方案:清理日志,修改配置并開(kāi)啟滾動(dòng),重啟日志服務(wù)與應(yīng)用
ChatModelAgent 利用 LLM 強(qiáng)大的功能進(jìn)行推理、理解自然語(yǔ)言、作出決策、生成相應(yīng)、進(jìn)行工具交互,充當(dāng)智能體應(yīng)用程序"思考"的部分。您可以使用 ADK 快速構(gòu)建具有 ReAct 能力的 ChatModelAgent:
import github.com/cloudwego/eino/adk
// 創(chuàng)建一個(gè)包含多個(gè)工具的 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 提供了專用于協(xié)調(diào)子 Agent 執(zhí)行流程的 WorkflowAgents 模式,用于通過(guò)預(yù)定義邏輯管理 Agent 的運(yùn)行方式,產(chǎn)生確定的執(zhí)行過(guò)程,協(xié)助實(shí)現(xiàn)可預(yù)測(cè)可控制的多 Agent 協(xié)作方式。您可以按需對(duì)下列模式進(jìn)行排列組合,結(jié)合 ChatModelAgent 構(gòu)造出符合自身需求的完整工作流水線:
- Sequential Agent:將配置中注冊(cè)的 Agents 按順序依次執(zhí)行一次后結(jié)束,運(yùn)行遵循以下原則:
- 線性執(zhí)行:嚴(yán)格按照 SubAgents 數(shù)組的順序執(zhí)行。
- 運(yùn)行結(jié)果傳遞:配置中的每個(gè) Agent 都能夠獲取 Sequential Agent 的完整輸入以及前序 Agent 的輸出。
- 支持提前退出:如果任何一個(gè)子 Agent 產(chǎn)生退出/中斷動(dòng)作,整個(gè) Sequential 流程會(huì)立即終止。
? 可能的實(shí)踐場(chǎng)景有:
- 數(shù)據(jù) ETL:ExtractAgent(從 MySQL 抽取訂單數(shù)據(jù))→ TransformAgent(清洗空值、格式化日期)→ LoadAgent(加載到數(shù)據(jù)倉(cāng)庫(kù))
- CI / CD 流水線:CodeCloneAgent(從代碼倉(cāng)庫(kù)拉取代碼)→UnitTestAgent(運(yùn)行單元測(cè)試,用例失敗時(shí)返回錯(cuò)誤與分析報(bào)告)→CompileAgent(編譯代碼)→DeployAgent(部署到目標(biāo)環(huán)境)
import github.com/cloudwego/eino/adk
// 依次執(zhí)行 制定研究計(jì)劃 -> 搜索資料 -> 撰寫(xiě)報(bào)告
sequential := adk.NewSequentialAgent(ctx, &adk.SequentialAgentConfig{
Name: "research_pipeline",
SubAgents: []adk.Agent{
planAgent, // 制定研究計(jì)劃
searchAgent, // 搜索資料
writeAgent, // 撰寫(xiě)報(bào)告
},
})
- Parallel Agent:將配置中注冊(cè)的 Agents 并發(fā)執(zhí)行,所有 Agent 執(zhí)行完畢后結(jié)束,運(yùn)行遵循以下原則:
- 并發(fā)執(zhí)行:所有子 Agent 同時(shí)啟動(dòng),在獨(dú)立的 goroutine 中并行執(zhí)行。
- 共享輸入:所有子 Agent 接收調(diào)用 Pararllel Agent 時(shí)相同的初始輸入。
- 等待與結(jié)果聚合:內(nèi)部使用 sync.WaitGroup 等待所有子 Agent 執(zhí)行完成,收集所有子 Agent 的執(zhí)行結(jié)果并按接收順序輸出到 AsyncIterator 中。
? 可能的實(shí)踐場(chǎng)景有:
- 多源數(shù)據(jù)采集:MySQLCollector(采集用戶表)+PostgreSQLCollector(采集訂單表)+MongoDBCollector(采集商品評(píng)論)
- 多渠道推送:WeChatPushAgent(推送到微信公眾號(hào))+SMSPushAgent(發(fā)送短信)+AppPushAgent(推送到 APP)
import github.com/cloudwego/eino/adk
// 并發(fā)執(zhí)行 情感分析 + 關(guān)鍵詞提取 + 內(nèi)容摘要
parallel := adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{
Name: "multi_analysis",
SubAgents: []adk.Agent{
sentimentAgent, // 情感分析
keywordAgent, // 關(guān)鍵詞提取
summaryAgent, // 內(nèi)容摘要
},
})
- Loop Agent:將配置中注冊(cè)的 Agents 按順序依次執(zhí)行并循環(huán)多次,運(yùn)行遵循以下原則:
- 循環(huán)執(zhí)行:重復(fù)執(zhí)行 SubAgents 序列,每次循環(huán)都是一個(gè)完整的 Sequential 執(zhí)行過(guò)程。
- 運(yùn)行結(jié)果累積:每次迭代的結(jié)果都會(huì)累積,后續(xù)迭代的輸入可以訪問(wèn)所有歷史信息。
- 條件退出:支持通過(guò)輸出包含 ExitAction 的事件或達(dá)到最大迭代次數(shù)來(lái)終止循環(huán),配置 MaxIteratinotallow=0 時(shí)表示無(wú)限循環(huán)。
? 可能的實(shí)踐場(chǎng)景有:
- 數(shù)據(jù)同步:CheckUpdateAgent(檢查源庫(kù)增量)→ IncrementalSyncAgent(同步增量數(shù)據(jù))→ VerifySyncAgent(驗(yàn)證一致性)
- 壓力測(cè)試:StartClientAgent(啟動(dòng)測(cè)試客戶端)→ SendRequestsAgent(發(fā)送請(qǐng)求)→ CollectMetricsAgent(收集性能指標(biāo))
import github.com/cloudwego/eino/adk
// 循環(huán)執(zhí)行 5 次,每次順序?yàn)椋悍治霎?dāng)前狀態(tài) -> 提出改進(jìn)方案 -> 驗(yàn)證改進(jìn)效果
loop := adk.NewLoopAgent(ctx, &adk.LoopAgentConfig{
Name: "iterative_optimization",
SubAgents: []adk.Agent{
analyzeAgent, // 分析當(dāng)前狀態(tài)
improveAgent, // 提出改進(jìn)方案
validateAgent, // 驗(yàn)證改進(jìn)效果
},
MaxIterations: 5,
})
預(yù)構(gòu)建的 Multi-Agent 范式
Eino ADK 基于日常 Multi-Agent 協(xié)作實(shí)踐中沉淀的最佳工程經(jīng)驗(yàn),為用戶提供兩種預(yù)構(gòu)建的 Multi-Agent 范式,無(wú)需從頭設(shè)計(jì)協(xié)作邏輯即可開(kāi)箱即用,覆蓋「集中式協(xié)調(diào)」與「結(jié)構(gòu)化問(wèn)題解決」兩大核心場(chǎng)景,高效支撐復(fù)雜任務(wù)的智能協(xié)作。
?? Supervisor 模式:集中式協(xié)調(diào)
Supervisor Agent 是 ADK 提供的一種中心化 Multi-Agent 協(xié)作模式,旨在為集中決策與分發(fā)執(zhí)行的通用場(chǎng)景提供解決方案,由一個(gè) Supervisor Agent(監(jiān)督者) 和多個(gè) SubAgent (子 Agent)組成,其中:
- Supervisor Agent 負(fù)責(zé)任務(wù)的分配、子 Agent 完成后的結(jié)果匯總與下一步?jīng)Q策。
- 子 Agents 專注于執(zhí)行具體任務(wù),并在完成后自動(dòng)將任務(wù)控制權(quán)交回 Supervisor。

Supervisor 模式有如下特點(diǎn):
- 中心化控制:Supervisor 統(tǒng)一管理子 Agent,可根據(jù)輸入與子 Agent 執(zhí)行結(jié)果動(dòng)態(tài)調(diào)整任務(wù)分配。
- 確定性回調(diào):子 Agent 執(zhí)行完畢后會(huì)將運(yùn)行結(jié)果返回到 Supervisor Agent,避免協(xié)作流程中斷。
- 松耦合擴(kuò)展:子 Agent 可獨(dú)立開(kāi)發(fā)、測(cè)試和替換,方便拓展與維護(hù)。
Supervisor 模式的這種層級(jí)化的結(jié)構(gòu)非常適合于動(dòng)態(tài)協(xié)調(diào)多個(gè)專業(yè) Agent 完成復(fù)雜任務(wù)的場(chǎng)景,例如:
- 科研項(xiàng)目管理:Supervisor 分配調(diào)研、實(shí)驗(yàn)、報(bào)告撰寫(xiě)任務(wù)給不同子 Agent。
- 客戶服務(wù)流程:Supervisor 根據(jù)用戶問(wèn)題類型,分配給技術(shù)支持、售后、銷售等子 Agent。
import github.com/cloudwego/eino/adk/prebuilt/supervisor
// 科研項(xiàng)目管理:創(chuàng)建一個(gè)監(jiān)督者模式的 multi-agent
// 包含 research(調(diào)研),experimentation(實(shí)驗(yàn)),report(報(bào)告)三個(gè)子 Agent
supervisor, err := supervisor.New(ctx, &supervisor.Config{
SupervisorAgent: supervisorAgent,
SubAgents: []adk.Agent{
researchAgent,
experimentationAgent,
reportAgent,
},
})?? Plan-Execute 模式:結(jié)構(gòu)化問(wèn)題解決
Plan-Execute Agent 是 ADK 提供的基于「規(guī)劃-執(zhí)行-反思」范式的 Multi-Agent 協(xié)作模式(參考論文 Plan-and-Solve Prompting:https://arxiv.org/abs/2305.04091?ref=blog.langchain.com),旨在解決復(fù)雜任務(wù)的分步拆解、執(zhí)行與動(dòng)態(tài)調(diào)整問(wèn)題,通過(guò) Planner(規(guī)劃器)、Executor(執(zhí)行器)和 Replanner(重規(guī)劃器) 三個(gè)核心智能體的協(xié)同工作,實(shí)現(xiàn)任務(wù)的結(jié)構(gòu)化規(guī)劃、工具調(diào)用執(zhí)行、進(jìn)度評(píng)估與動(dòng)態(tài)重規(guī)劃,最終達(dá)成用戶目標(biāo),其中:
- Planner:根據(jù)用戶目標(biāo),生成一個(gè)包含詳細(xì)步驟且結(jié)構(gòu)化的初始任務(wù)計(jì)劃
- Executor:執(zhí)行當(dāng)前計(jì)劃中的首個(gè)步驟
- Replanner:評(píng)估執(zhí)行進(jìn)度,決定是修正計(jì)劃繼續(xù)交由 Executor 運(yùn)行,或是結(jié)束任務(wù)

Plan-Execute 模式有如下特點(diǎn):
- 明確的分層架構(gòu):通過(guò)將任務(wù)拆解為規(guī)劃、執(zhí)行和反思重規(guī)劃三個(gè)階段,形成層次分明的認(rèn)知流程,體現(xiàn)了 “先思考再行動(dòng),再根據(jù)反饋調(diào)整” 的閉環(huán)認(rèn)知策略,在各類場(chǎng)景中都能達(dá)到較好的效果。
- 動(dòng)態(tài)迭代優(yōu)化:Replanner 根據(jù)執(zhí)行結(jié)果和當(dāng)前進(jìn)度,實(shí)時(shí)判斷任務(wù)是否完成或需調(diào)整計(jì)劃,支持動(dòng)態(tài)重規(guī)劃。該機(jī)制有效解決了傳統(tǒng)單次規(guī)劃難以應(yīng)對(duì)環(huán)境變化和任務(wù)不確定性的瓶頸,提升了系統(tǒng)的魯棒性和靈活性。
- 職責(zé)分明且松耦合:Plan-Execute 模式由多個(gè)智能體協(xié)同工作,支持獨(dú)立開(kāi)發(fā)、測(cè)試和替換。模塊化設(shè)計(jì)方便擴(kuò)展和維護(hù),符合工程最佳實(shí)踐。
- 具備良好擴(kuò)展性:不依賴特定的語(yǔ)言模型、工具或 Agent,方便集成多樣化外部資源,滿足不同應(yīng)用場(chǎng)景需求。
Plan-Execute 模式的「規(guī)劃→執(zhí)行→重規(guī)劃」閉環(huán)結(jié)構(gòu)非常適合需要多步驟推理、動(dòng)態(tài)調(diào)整和工具集成的復(fù)雜任務(wù)場(chǎng)景,例如:
- 復(fù)雜研究分析:通過(guò)規(guī)劃分解研究問(wèn)題,執(zhí)行多輪數(shù)據(jù)檢索與計(jì)算,動(dòng)態(tài)調(diào)整研究方向和假設(shè),提升分析深度和準(zhǔn)確性。
- 自動(dòng)化工作流管理:將復(fù)雜業(yè)務(wù)流程拆解為結(jié)構(gòu)化步驟,結(jié)合多種工具(如數(shù)據(jù)庫(kù)查詢、API 調(diào)用、計(jì)算引擎)逐步執(zhí)行,并根據(jù)執(zhí)行結(jié)果動(dòng)態(tài)優(yōu)化流程。
- 多步驟問(wèn)題解決:適用于需要分步推理和多工具協(xié)作的場(chǎng)景,如法律咨詢、技術(shù)診斷、策略制定等,確保每一步執(zhí)行都有反饋和調(diào)整。
- 智能助理任務(wù)執(zhí)行:支持智能助理根據(jù)用戶目標(biāo)規(guī)劃任務(wù)步驟,調(diào)用外部工具完成具體操作,并根據(jù)重規(guī)劃思考結(jié)合用戶反饋調(diào)整后續(xù)計(jì)劃,提升任務(wù)完成的完整性和準(zhǔn)確性。
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: "制定詳細(xì)的研究計(jì)劃,包括文獻(xiàn)調(diào)研、數(shù)據(jù)收集、分析方法等",
Model: gpt4Model,
}),
Executor: adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
Name: "research_executor",
ToolsConfig: adk.ToolsConfig{
Tools: []tool.BaseTool{
scholarSearchTool,
dataAnalysisTool,
citationTool,
},
},
}),
Replanner: replannerAgent,
})基礎(chǔ)設(shè)計(jì)
統(tǒng)一的 Agent 抽象
ADK 的核心是一個(gè)簡(jiǎn)潔而強(qiáng)大的 Agent 接口:
type Agent interface {
Name(ctx context.Context) string
Description(ctx context.Context) string
Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
}每個(gè) Agent 都有明確的身份(Name)、清晰的職責(zé)(Description)和標(biāo)準(zhǔn)化的執(zhí)行方式(Run),為 Agent 之間的發(fā)現(xiàn)與調(diào)用提供了基礎(chǔ)。無(wú)論是簡(jiǎn)單的問(wèn)答機(jī)器人,還是復(fù)雜的多步驟任務(wù)處理系統(tǒng),都可以通過(guò)這個(gè)統(tǒng)一的接口加以實(shí)現(xiàn)。
異步事件驅(qū)動(dòng)架構(gòu)
ADK 采用了異步事件流設(shè)計(jì),通過(guò) AsyncIterator[*AgentEvent] 實(shí)現(xiàn)非阻塞的事件處理,并通過(guò) Runner 框架運(yùn)行 Agent:
- 實(shí)時(shí)響應(yīng):AgentEvent 包含 Agent 執(zhí)行過(guò)程中特定節(jié)點(diǎn)輸出(Agent 回復(fù)、工具處理結(jié)果等等),用戶可以立即看到 Agent 的思考過(guò)程和中間結(jié)果。
- 追蹤執(zhí)行過(guò)程:AgentEvent 額外攜帶狀態(tài)修改動(dòng)作與運(yùn)行軌跡,便于開(kāi)發(fā)調(diào)試和理解 Agent 行為。
- 自動(dòng)流程控制:框架通過(guò) Runner 自動(dòng)處理中斷、跳轉(zhuǎn)、退出行為,無(wú)需用戶額外干預(yù)。
靈活的協(xié)作機(jī)制
Eino ADK 支持處于同一個(gè)系統(tǒng)內(nèi)的 Agent 之間以多種方式進(jìn)行協(xié)作(交換數(shù)據(jù)或觸發(fā)運(yùn)行):
- 共享 Session:單次運(yùn)行過(guò)程中持續(xù)存在的 KV 存儲(chǔ),用于支持跨 Agent 的狀態(tài)管理和數(shù)據(jù)共享。
// 獲取全部 SessionValues
funcGetSessionValues(ctx context.Context)map[string]any
// 指定 key 獲取 SessionValues 中的一個(gè)值,key 不存在時(shí)第二個(gè)返回值為 false,否則為 true
funcGetSessionValue(ctx context.Context, key string)(any, bool)
// 添加 SessionValues
funcAddSessionValue(ctx context.Context, key string, value any)
// 批量添加 SessionValues
funcAddSessionValues(ctx context.Context, kvs map[string]any)- 移交運(yùn)行(Transfer):攜帶本 Agent 輸出結(jié)果上下文,將任務(wù)移交至子 Agent 繼續(xù)處理。適用于智能體功能可以清晰的劃分邊界與層級(jí)的場(chǎng)景,常結(jié)合 ChatModelAgent 使用,通過(guò) LLM 的生成結(jié)果進(jìn)行動(dòng)態(tài)路由。結(jié)構(gòu)上,以此方式進(jìn)行協(xié)作的兩個(gè) Agent 稱為父子 Agent:

// 設(shè)置父子 Agent 關(guān)系
funcSetSubAgents(ctx context.Context, agent Agent, subAgents []Agent)(Agent, error)
// 指定目標(biāo) Agent 名稱,構(gòu)造 Transfer Event
funcNewTransferToAgentAction(destAgentName string) *AgentAction- 顯式調(diào)用(ToolCall):將 Agent 視為工具進(jìn)行調(diào)用。適用于 Agent 運(yùn)行僅需要明確清晰的參數(shù)而非完整運(yùn)行上下文的場(chǎng)景,常結(jié)合 ChatModelAgent,作為工具運(yùn)行后將結(jié)果返回給 ChatModel 繼續(xù)處理。除此之外,ToolCall 同樣支持調(diào)用符合工具接口構(gòu)造的、不含 Agent 的普通工具。

// 將 Agent 轉(zhuǎn)換為 Tool
funcNewAgentTool(_ context.Context, agent Agent, options ...AgentToolOption)tool.BaseTool中斷與恢復(fù)機(jī)制
Eino ADK 提供運(yùn)行時(shí)中斷與恢復(fù)的功能,允許正在運(yùn)行中的 Agent 主動(dòng)中斷并保存其當(dāng)前狀態(tài),并在未來(lái)從中斷點(diǎn)恢復(fù)執(zhí)行。該功能為長(zhǎng)時(shí)間等待、可暫停或需要外部輸入(Human in the loop)等場(chǎng)景下的開(kāi)發(fā)提供協(xié)助。
- Agent 內(nèi)部運(yùn)行過(guò)程中,通過(guò)拋出含 Interrupt Action 的 Event 主動(dòng)通知 Runner 中斷運(yùn)行,并允許攜帶額外信息供調(diào)用方閱讀與使用。
- Runner 通過(guò)初始化時(shí)注冊(cè)的 CheckPointStore 記錄當(dāng)前運(yùn)行狀態(tài)
- 重新準(zhǔn)備好運(yùn)行后,通過(guò) Resume 方法攜帶恢復(fù)運(yùn)行所需要的新信息,從斷點(diǎn)處重新啟動(dòng)該 Agent 運(yùn)行
// 1. 創(chuàng)建支持?jǐn)帱c(diǎn)恢復(fù)的 Runner
runner := adk.NewRunner(ctx, adk.RunnerConfig{
Agent: complexAgent,
CheckPointStore: memoryStore, // 內(nèi)存狀態(tài)存儲(chǔ)
})
// 2. 開(kāi)始執(zhí)行
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 內(nèi)部拋出 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. 攜帶用戶輸入信息,從斷點(diǎn)恢復(fù)執(zhí)行
iter, err := runner.Resume(ctx, "1", adk.WithToolOptions([]tool.Option{subagents.WithNewInput(nInput)}))快速開(kāi)始
安裝
go get github.com/cloudwego/eino@latest項(xiàng)目開(kāi)發(fā)經(jīng)理智能體
下面的示例使用 Eino ADK 構(gòu)建了一個(gè)項(xiàng)目開(kāi)發(fā)經(jīng)理智能體,面向多方面管理協(xié)同的場(chǎng)景:
- Project Manager Agent:項(xiàng)目經(jīng)理智能體,整體使用 Supervisor 模式,各 Agent 的功能如下:
- ResearchAgent:調(diào)研 Agent,負(fù)責(zé)調(diào)研并生成可行方案,支持中斷后從用戶處接收額外的上下文信息來(lái)提高調(diào)研方案生成的準(zhǔn)確性。
- CodeAgent:編碼 Agent,使用知識(shí)庫(kù)工具,召回相關(guān)知識(shí)作為參考,生成高質(zhì)量的代碼。
- ReviewAgent:評(píng)論 Agent,使用順序工作流編排問(wèn)題分析、評(píng)價(jià)生成、評(píng)價(jià)驗(yàn)證三個(gè)步驟,對(duì)調(diào)研結(jié)果 / 編碼結(jié)果進(jìn)行評(píng)審,給出合理的評(píng)價(jià),供項(xiàng)目經(jīng)理進(jìn)行決策。
- ProjectManagerAgent:項(xiàng)目經(jīng)理 Agent,根據(jù)動(dòng)態(tài)的用戶輸入,路由并協(xié)調(diào)多個(gè)負(fù)責(zé)不同維度工作的子智能體開(kāi)展工作。
- 該 Agent 可能的工作場(chǎng)景為:
- 從零開(kāi)始實(shí)現(xiàn)項(xiàng)目:項(xiàng)目經(jīng)理從需求入手,經(jīng)由調(diào)研、編碼、評(píng)論三個(gè) Agent 工作,最終完成項(xiàng)目交付。
- 對(duì)已有項(xiàng)目的完善:項(xiàng)目經(jīng)理從評(píng)論 Agent 獲得項(xiàng)目仍舊需要完善的功能點(diǎn),交由編碼 Agent 進(jìn)行實(shí)現(xiàn),再交由評(píng)論 Agent 對(duì)修改后的代碼進(jìn)行評(píng)審。
- 開(kāi)展技術(shù)調(diào)研:項(xiàng)目經(jīng)理要求調(diào)研 Agent 生成技術(shù)調(diào)研報(bào)告,然后由評(píng)論 Agent 給出評(píng)審意見(jiàn)。調(diào)用方結(jié)合返回的技術(shù)調(diào)研報(bào)告和評(píng)審意見(jiàn),決定后續(xù)動(dòng)作。

該示例的設(shè)計(jì)涵蓋了文中介紹的大部分概念,您可以基于示例回顧之前的提到的種種設(shè)計(jì)理念。另外,請(qǐng)?jiān)囅肫胀ㄩ_(kāi)發(fā)模式下如何完成該示例的編寫(xiě),ADK 的優(yōu)勢(shì)便立刻凸顯了出來(lái):
設(shè)計(jì)點(diǎn) | 傳統(tǒng)開(kāi)發(fā)模式 | 基于 Eino ADK 開(kāi)發(fā) |
Agent 抽象 | 沒(méi)有統(tǒng)一定義,團(tuán)隊(duì)協(xié)作開(kāi)發(fā)效率差,后期維護(hù)成本高 | 統(tǒng)一定義,職責(zé)獨(dú)立,代碼整潔,便于各 Agent 分頭開(kāi)發(fā) |
輸入輸出 | 沒(méi)有統(tǒng)一定義,輸入輸出混亂 運(yùn)行過(guò)程只能手動(dòng)加日志,不利于調(diào)試 | 有統(tǒng)一定義,全部基于事件驅(qū)動(dòng) 運(yùn)行過(guò)程通過(guò) iterator 透出,所見(jiàn)即所得 |
Agent 協(xié)作 | 通過(guò)代碼手動(dòng)傳遞上下文 | 框架自動(dòng)傳遞上下文 |
中斷恢復(fù)能力 | 需要從零開(kāi)始實(shí)現(xiàn),解決序列化與反序列化、狀態(tài)存儲(chǔ)與恢復(fù)等問(wèn)題 | 僅需在 Runner 中注冊(cè) CheckPointStore 提供斷點(diǎn)數(shù)據(jù)存儲(chǔ)介質(zhì) |
Agent 模式 | 需要從零開(kāi)始實(shí)現(xiàn) | 多種成熟模式開(kāi)箱即用 |
核心代碼如下,完整代碼詳見(jiàn) Eino-Examples 項(xiàng)目中提供的源碼(https://github.com/cloudwego/eino-examples/tree/main/adk/multiagent/integration-project-manager):
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)
}
}結(jié)尾
Eino ADK 不僅僅是一個(gè)開(kāi)發(fā)框架,更是一個(gè)完整的智能體開(kāi)發(fā)生態(tài)。它通過(guò)統(tǒng)一的抽象、靈活的組合和強(qiáng)大的協(xié)作機(jī)制,讓 Go 開(kāi)發(fā)者能夠輕松構(gòu)建從簡(jiǎn)單對(duì)話機(jī)器人到復(fù)雜多智能體系統(tǒng)的各種 AI 應(yīng)用。


































