返回博客列表

Eino:Go 语言终于有了自己的 LangChain

2026-05-31T08:20:00+08:00
EinoGoLLMAI AgentCloudWeGo字节跳动

Eino:Go 语言终于有了自己的 LangChain

先收藏,回头一定用得上。

Python 阵营有 LangChain,TypeScript 有 Vercel AI SDK,Go 呢?很长一段时间里,Go 开发者想做 AI 应用,要么绑死 Python 服务,要么自己从零拼装。Eino 的出现补上了这块拼图。

Eino(读作 ['aino])是字节跳动 CloudWeGo 团队开源的 Go 语言 LLM 应用开发框架,GitHub 上 11.5K Stars、940+ Forks,最新版本 v0.9.2。它从 LangChain、Google ADK 等框架中汲取灵感,但严格遵循 Go 的设计惯例——接口抽象、组合优于继承、显式错误处理。

核心定位一句话:组件化 + 编排 + Agent,三件套搞定 AI 应用

本文提纲

  1. 为什么 Go 需要 Eino
  2. 核心架构:三层抽象
  3. 组件生态:开箱即用的积木块
  4. 编排:Graph 与 Chain
  5. Agent:从 ChatModelAgent 到 DeepAgent
  6. 流处理:框架替你操心
  7. Human-in-the-Loop:打断与恢复
  8. 生态系统全景

为什么 Go 需要 Eino

Go 在后端服务领域占据统治地位——微服务、API Gateway、云原生基础设施。当 AI 能力需要嵌入这些系统时,用 Python 写个独立服务再 RPC 调用,链路长了、延迟高了、运维成本也上去了。

Eino 解决的核心问题:让 Go 开发者用惯用的方式构建 AI 应用,而不是硬搬 Python 的设计模式。

几个关键数据:

指标 数值
GitHub Stars 11,542
Forks 942
最新版本 v0.9.2(2026-05-28)
许可证 Apache 2.0
代码语言 Go(99.97%)
最低 Go 版本 1.18
所属组织 CloudWeGo(字节跳动)

CloudWeGo 本身是字节跳动在云原生领域的主力开源生态(Kitex、Hertz 等),46 个公开仓库、近 5000 关注者。Eino 不是实验项目,它背后有字节跳动生产环境的验证。

核心架构:三层抽象

Eino 的设计思路很清晰,分三层:

graph TB
    subgraph "Agent Layer"
        A1[ChatModelAgent]
        A2[DeepAgent]
        A3[Custom Agent]
    end
    subgraph "Composition Layer"
        B1[Graph]
        B2[Chain]
        B3[GraphTool]
    end
    subgraph "Component Layer"
        C1[ChatModel]
        C2[Tool]
        C3[Retriever]
        C4[Embedding]
        C5[ChatTemplate]
        C6[Document]
    end
    A1 --> B1
    A1 --> B2
    A2 --> B1
    A2 --> A3
    B1 --> C1
    B1 --> C2
    B1 --> C3
    B2 --> C4
    B2 --> C5
    B3 --> B1
  • Component Layer:定义抽象接口(ChatModelToolRetrieverEmbedding 等),官方提供多种实现
  • Composition Layer:用 Graph 和 Chain 把组件编排成工作流,支持分支、并行、状态管理
  • Agent Layer:ChatModelAgent 做简单的 ReAct 循环,DeepAgent 处理复杂的多 Agent 协作

三层之间可以互相嵌套——Graph 可以暴露为 Tool 给 Agent 使用,Agent 也可以作为 Graph 的一个节点。这种设计让"确定性流程"和"自主决策"可以自由组合。

组件生态:开箱即用的积木块

Eino 把 AI 应用的常见能力抽象成标准组件接口,官方实现在 eino-ext 仓库中提供。截止目前支持的情况:

ChatModel(16 个实现)

基础版:OpenAI、Claude、Gemini、DeepSeek、Ollama、Ark(火山引擎)、Qwen、Qianfan、OpenRouter

Agentic 版(支持原生 function calling):agenticopenai、agenticclaude、agenticgemini、agenticdeepseek、agenticqwen、agenticark

Retriever(12 个实现)

Elasticsearch 7/8/9、Milvus/Milvus2、OpenSearch 2/3、Qdrant、Redis、Dify、火山引擎知识库、VikingDB

Embedding(8 个实现)

Ark、DashScope、Gemini、Ollama、OpenAI、Qianfan、Tencent Cloud、Cache

Tool(10 个实现)

Bing Search、BrowserUse、CommandLine、DuckDuckGo、Google Search、HTTP Request、MCP、SearXNG、Sequential Thinking、Wikipedia

值得注意的是 MCP 的支持——这意味着 Eino 可以直接接入任何 MCP 协议的 Tool Server,生态扩展能力拉满。

编排:Graph 与 Chain

当 Agent 的自主决策不够用,你需要精确控制执行流程时,Eino 提供了两种编排方式:

Graph:DAG 编排

graph := compose.NewGraph[*Input, *Output]()
graph.AddLambdaNode("validate", validateFn)
graph.AddChatModelNode("generate", chatModel)
graph.AddLambdaNode("format", formatFn)

graph.AddEdge(compose.START, "validate")
graph.AddEdge("validate", "generate")
graph.AddEdge("generate", "format")
graph.AddEdge("format", compose.END)

runnable, _ := graph.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)

Graph 支持分支、并行、状态管理、Checkpoint。你可以把任意复杂的工作流画成 DAG。

Chain:线性管道

chain := compose.NewChain[*Input, *Output]()
chain.AppendLambda(validateFn)
chain.AppendChatModel(chatModel)
chain.AppendLambda(formatFn)

runnable, _ := chain.Compile(ctx)
result, _ := runnable.Invoke(ctx, input)

Chain 是 Graph 的简化版,适合线性的处理管道。

GraphTool:让 Graph 变成 Tool

这是 Eino 最巧妙的设计之一——把编排好的 Graph 暴露为 Agent 可调用的 Tool:

tool, _ := graphtool.NewInvokableGraphTool(graph, "data_pipeline", "Process and validate data")

agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
    Model: chatModel,
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{tool},
        },
    },
})

这意味着你可以构建一个精确控制的数据处理管道,然后让 Agent 自行决定什么时候调用它。确定性流程与自主行为的完美桥接。

Agent:从 ChatModelAgent 到 DeepAgent

ChatModelAgent:简单直接

几行代码搭一个能调用工具的 Agent:

chatModel, _ := openai.NewChatModel(ctx, &openai.ChatModelConfig{
    Model:  "gpt-4o",
    APIKey: os.Getenv("OPENAI_API_KEY"),
})

agent, _ := adk.NewChatModelAgent(ctx, &adk.ChatModelAgentConfig{
    Model: chatModel,
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{weatherTool, calculatorTool},
        },
    },
})

runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: agent})
iter := runner.Query(ctx, "北京今天天气怎么样?")
for {
    event, ok := iter.Next()
    if !ok {
        break
    }
    fmt.Println(event.Message.Content)
}

Agent 内部处理完整的 ReAct 循环——决定何时调用工具、何时直接回复。你只需要提供 Model 和 Tools,框架搞定循环逻辑。

DeepAgent:复杂任务分解

面对复杂任务,DeepAgent 会把问题拆解为步骤、委托给子 Agent、追踪进度:

deepAgent, _ := deep.New(ctx, &deep.Config{
    ChatModel: chatModel,
    SubAgents: []adk.Agent{researchAgent, codeAgent},
    ToolsConfig: adk.ToolsConfig{
        ToolsNodeConfig: compose.ToolsNodeConfig{
            Tools: []tool.BaseTool{shellTool, pythonTool, webSearchTool},
        },
    },
})

runner := adk.NewRunner(ctx, adk.RunnerConfig{Agent: deepAgent})
iter := runner.Query(ctx, "分析 report.csv 中的销售数据并生成汇总图表")

DeepAgent 可以协调多个专业 Agent,执行 Shell 命令、运行 Python 代码、搜索网页。本质上是把多 Agent 协作模式封装成了一个开箱即用的组件。

流处理:框架替你操心

LLM 应用绕不开流式输出。但在多组件编排的场景下,流处理非常棘手——多个组件的流需要合并、拆分、转换、拼接。

Eino 的做法是组件只需实现自己需要的流式接口,框架自动处理流之间的转换

  • 自动拼接(Concat):多个 chunk 合并为完整输出
  • 自动装箱(Box):统一不同类型的流
  • 自动合并(Merge):并行节点的流合并
  • 自动复制(Copy):一个流的输出分发给多个下游

这意味着你写组件时不用关心"我在一个 Graph 里的流要怎么和上下游对接",框架全部搞定。

Human-in-the-Loop:打断与恢复

Agent 在执行过程中可能需要人工介入——确认操作、补充信息、纠正方向。Eino 提供了 Interrupt/Resume 机制:

// Agent 执行到需要人工确认的节点时自动暂停
// 框架处理状态持久化和路由
// 人工输入后从断点恢复执行

框架处理了状态持久化和恢复路由,开发者只需要定义哪里需要打断、怎么收集人工输入。这在生产环境中非常实用——比如 Agent 要执行数据库写入操作之前,先让人类确认一下。

生态系统全景

Eino 不只是一个核心库,而是一整套生态:

仓库 定位 Stars
cloudwego/eino 核心框架:类型、流、组件抽象、编排、Agent 11,542
cloudwego/eino-ext 组件实现、回调、DevOps 调试 727
cloudwego/eino-examples 示例应用和最佳实践 651

加上 CloudWeGo 生态的 Kitex(RPC 框架)、Hertz(HTTP 框架),从 AI 推理到服务通信到 API 暴露,整个技术栈都可以用 Go 一语言搞定。

如果你在做后端服务,想在现有 Go 技术栈里嵌入 AI 能力,Eino 值得认真看看。不是在 Go 里写 Python 风格的代码,而是用 Go 的方式做 AI 应用。

试过了?评论区说说你的体验。还没试?收藏起来周末折腾。


作者: itech001
来源: 公众号:AI人工智能时代
网站: https://www.theaiera.cn/ 每日分享最前沿的AI新闻资讯和技术研究。

本文首发于 AI人工智能时代,转载请注明出处。

觉得文章不错?分享给更多人!