掘金 人工智能 10月25日 03:02
Eino ADK:赋能 Go 开发者构建智能体应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

随着大语言模型(LLM)的普及,Agent 成为 AI 落地的关键形态。然而,传统 Agent 开发面临 LLM 与业务系统衔接难、状态管理缺失等痛点。Eino ADK(Agent Development Kit)应运而生,为 Go 开发者提供了一套完整、灵活且强大的智能体开发框架。它通过统一的 Agent 抽象、异步事件驱动架构、灵活的协作机制(如共享 Session、显式调用)以及中断与恢复功能,解决了传统开发中的核心难题。ADK 提供了 ChatModelAgent(封装 LLM 交互)、WorkflowAgents(Sequential、Parallel、Loop)以及预构建的 Multi-Agent 范式(Supervisor、Plan-Execute),让开发者能像搭积木一样构建复杂的智能体系统,专注于业务逻辑实现。

🧩 **Agent 核心概念与价值**:Agent 被定义为独立的、可执行的智能任务单元,具备推理、行动、观察和规划能力,并支持协作。它们是连接 LLM 能力与具体业务场景的桥梁,能够处理从智能客服到自动化办公的各类任务,解决了传统 Agent 开发中 LLM 能力无法有效落地的“空谈”问题。

🚀 **Eino ADK 的核心优势**:该框架为 Go 开发者提供了端到端的智能体开发解决方案。其关键优势包括:统一的 Agent 抽象接口、异步事件驱动架构(AsyncIterator)实现实时响应与过程追踪、灵活的协作机制(Session 共享、Transfer、ToolCall)以及强大的中断与恢复功能,大大简化了复杂 AI 应用的开发和维护。

🛠️ **丰富的 Agent 组件与范式**:Eino ADK 提供了多种核心组件和预构建范式,如封装 LLM 交互的 ChatModelAgent(支持 ReAct 模式)、用于编排执行流程的 WorkflowAgents(Sequential、Parallel、Loop)以及用于集中协调和结构化问题解决的 Supervisor 和 Plan-Execute Multi-Agent 范式。这些组件和范式使得开发者能够高效地搭建复杂的智能体系统,如同“搭积木”一般。

💡 **简化开发与提升效率**:通过 ADK,开发者可以显著减少“胶水代码”,快速编排 Agent 流程,并获得更可控的 Agent 协作过程(可中断、可恢复、可审计)。框架的设计理念是“简单的事情简单做,复杂的事情也能做”,让开发者能专注于业务逻辑,而非底层技术复杂性,从而加速 AI 应用的落地。

当大语言模型突破了 “理解与生成” 的瓶颈,Agent 迅速成为 AI 落地的主流形态。从智能客服到自动化办公,几乎所有场景都需要 Agent 来承接 LLM 能力、执行具体任务。

但技术演进中痛点也随之凸显,有的团队因不懂如何衔接 LLM 与业务系统,导致 Agent 只能 “空谈”;有的因状态管理缺失,让 Agent 执行任务时频频 “失忆”,复杂的交互流程也进一步增加了开发难度。

为此,Eino ADK(Agent Development Kit)应运而生,为 Go 开发者提供了一套完整、灵活且强大的智能体开发框架,直接解决传统开发中的核心难题。

🙋 什么Agent?

Agent 代表一个独立的、可执行的智能任务单元,能够自主学习,适应与作出决策,主要功能包含:

你可以把它想象成一个能够理解指令、执行任务并给出回应的“智能体”。任何需要与大语言模型(LLM)交互的场景都可以抽象为一个 Agent。例如:

🙋‍♂️ 什么是 Eino ADK?

Eino ADK 是一个专为 Go 语言设计的 Agent 和 Multi-Agent 开发框架,设计上参考了 Google-ADK 中对 Agent 与协作机制的定义。

它不仅是一个工具库,更是一套完整的智能体开发体系:通过统一的抽象接口、灵活的组合模式和强大的协作机制,将复杂的 AI 应用拆解为独立、可组合的智能体单元,让开发者能够像搭建乐高积木一样构建复杂的智能体系统:

无论你是 AI 应用的新手,还是经验丰富的开发者,ADK 都能为你提供合适的工具和模式。它的设计哲学是"简单的事情简单做,复杂的事情也能做"——让开发者能够专注于业务逻辑的实现,而不必担心底层的技术复杂性。

核心构建

🧠 ChatModelAgent:智能决策的大脑

ChatModelAgent 是 ADK 中最重要的预构建组件,它封装了与大语言模型的交互逻辑,实现了经典的 ReAct(Reason-Act-Observe)模式,运行过程为:

    调用 LLM(Reason)LLM 返回工具调用请求(Action)ChatModelAgent 执行工具(Act)将工具结果返回给 LLM(Observation),结合之前的上下文继续生成,直到模型判断不需要调用 Tool 后结束。

ReAct 模式的核心是“思考 → 行动 → 观察 → 再思考”的闭环,解决传统 Agent “盲目行动”或“推理与行动脱节”的痛点,以下是几种可能的实践场景:

ChatModelAgent 利用 LLM 强大的功能进行推理、理解自然语言、作出决策、生成相应、进行工具交互,充当智能体应用程序 "思考" 的部分。您可以使用 ADK 快速构建具有 ReAct 能力的 ChatModelAgent

import github.com/cloudwego/eino/adk// 创建一个包含多个工具的 ReAct ChatModelAgentchatAgent := 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 构造出符合自身需求的完整工作流水线**:**

import github.com/cloudwego/eino/adk// 依次执行 制定研究计划 -> 搜索资料 -> 撰写报告sequential := adk.NewSequentialAgent(ctx, &adk.SequentialAgentConfig{    Name: "research_pipeline",    SubAgents: []adk.Agent{        planAgent,    // 制定研究计划        searchAgent,  // 搜索资料        writeAgent,   // 撰写报告    },})

import github.com/cloudwego/eino/adk// 并发执行 情感分析 + 关键词提取 + 内容摘要parallel := adk.NewParallelAgent(ctx, &adk.ParallelAgentConfig{    Name: "multi_analysis",    SubAgents: []adk.Agent{        sentimentAgent,  // 情感分析        keywordAgent,    // 关键词提取        summaryAgent,    // 内容摘要    },})

import github.com/cloudwego/eino/adk// 循环执行 5 次,每次顺序为:分析当前状态 -> 提出改进方案 -> 验证改进效果loop := adk.NewLoopAgent(ctx, &adk.LoopAgentConfig{    Name: "iterative_optimization",    SubAgents: []adk.Agent{        analyzeAgent,  // 分析当前状态        improveAgent,  // 提出改进方案        validateAgent, // 验证改进效果    },    MaxIterations: 5,})

🛠️ 预构建的 Multi-Agent 范式

Eino ADK 基于日常 Multi-Agent 协作实践中沉淀的最佳工程经验,为用户提供两种预构建的 Multi-Agent 范式,无需从头设计协作逻辑即可开箱即用,覆盖「集中式协调」与「结构化问题解决」两大核心场景,高效支撑复杂任务的智能协作。

🎯 Supervisor 模式:集中式协调

Supervisor Agent 是 ADK 提供的一种中心化 Multi-Agent 协作模式,旨在为集中决策与分发执行的通用场景提供解决方案,由一个 Supervisor Agent(监督者) 和多个 SubAgent (子 Agent)组成,其中:

Supervisor 模式有如下特点:

Supervisor 模式的这种层级化的结构非常适合于动态协调多个专业 Agent 完成复杂任务的场景,例如:

import github.com/cloudwego/eino/adk/prebuilt/supervisor// 科研项目管理:创建一个监督者模式的 multi-agent// 包含 research(调研),experimentation(实验),report(报告)三个子 Agentsupervisor, 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(重规划器) 三个核心智能体的协同工作,实现任务的结构化规划、工具调用执行、进度评估与动态重规划,最终达成用户目标,其中:

Plan-Execute 模式有如下特点:

Plan-Execute 模式的「规划 → 执行 → 重规划」闭环结构非常适合需要多步骤推理、动态调整和工具集成的复杂任务场景,例如:

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:

🤝 灵活的协作机制

Eino ADK 支持处于同一个系统内的 Agent 之间以多种方式进行协作(交换数据或触发运行):

// 获取全部 SessionValuesfunc GetSessionValues(ctx context.Context) map[string]any// 指定 key 获取 SessionValues 中的一个值,key 不存在时第二个返回值为 false,否则为 truefunc GetSessionValue(ctx context.Context, key string) (any, bool)// 添加 SessionValuesfunc AddSessionValue(ctx context.Context, key string, value any)// 批量添加 SessionValuesfunc AddSessionValues(ctx context.Context, kvs map[string]any)

// 设置父子 Agent 关系func SetSubAgents(ctx context.Context, agent Agent, subAgents []Agent) (Agent, error)// 指定目标 Agent 名称,构造 Transfer Eventfunc NewTransferToAgentAction(destAgentName string) *AgentAction

// 将 Agent 转换为 Toolfunc NewAgentTool(_ context.Context, agent Agent, options ...AgentToolOption) tool.BaseTool

🔄 中断与恢复机制

Eino ADK 提供运行时中断与恢复的功能,允许正在运行中的 Agent 主动中断并保存其当前状态,并在未来从中断点恢复执行。该功能为长时间等待、可暂停或需要外部输入(Human in the loop)等场景下的开发提供协助。

// 1. 创建支持断点恢复的 Runnerrunner := 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 构建了一个项目开发经理智能体,面向多方面管理协同的场景:

该示例的设计涵盖了文中介绍的大部分概念,您可以基于示例回顾之前的提到的种种设计理念。另外,请试想普通开发模式下如何完成该示例的编写,ADK 的优势便立刻凸显了出来:

设计点传统开发模式基于 Eino ADK 开发
Agent 抽象没有统一定义,团队协作开发效率差,后期维护成本高统一定义,职责独立,代码整洁,便于各 Agent 分头开发
输入输出没有统一定义,输入输出混乱运行过程只能手动加日志,不利于调试有统一定义,全部基于事件驱动运行过程通过 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,让智能体开发变得简单而强大!

参考资料

[1]Eino ADK:github.com/cloudwego/e…

[2]Google-ADK:google.github.io/adk-docs/ag…

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

[4]源码:github.com/cloudwego/e…

[5]Eino ADK 文档:www.cloudwego.io/zh/docs/ein…

[6]Eino ADK 源码:github.com/cloudwego/e…

[7]业界讨论:mp.weixin.qq.com/s/KuWfwNGxq…

[8]Eino ADK Examples:github.com/cloudwego/e…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Eino ADK Agent LLM Go开发 智能体 AI框架
相关文章