Eino 是字节跳动(ByteDance)开源的一款 Go 语言 AI Agent 框架,隶属于 CloudWeGo 微服务生态。它提供了一个类型安全(Type-Safe)的 DAG 图编排引擎,专门用于构建 LLM 驱动的推理工作流。

如果说 Dapr 解决的是 Agent 的"宏观分布式生存"问题,那 Eino 解决的就是 Agent 的"微观推理编排"问题。

设计哲学:为什么需要 Eino?

Go 语言在云原生后端占据主导地位(Kubernetes、Dapr、Docker、Istio 均用 Go 编写),但长期以来缺乏一个原生、成熟的 AI Agent 框架。Python 生态的 LangChain 虽强大,但在 Go 后端集成时需要:

Eino 填补了这一空白,带来以下核心价值:

核心概念

Eino 的核心抽象是一张类型安全的有向无环图(DAG)

D2 Diagram
qtopie.github.io
概念说明
Node一个处理步骤(如"生成计划"、“调用工具”、“总结输出”),具有泛型化的输入类型 I 和输出类型 O
Edge节点间的有向连接,数据沿 Edge 流动且携带类型信息
Branch动态条件分支,根据运行时输出决定路由到哪个下游节点
State全图流转的强类型状态,与 context.Context 并行传递。分支点支持局部裁剪的状态投影

类型安全的图编排

Eino 与 LangChain 最本质的区别在于类型系统:

// Eino: 编译时类型安全(泛型)
graph := eino.NewGraph[PlannerState]()
graph.AddNode("planner", &PlannerNode{})   // PlannerState → PlanResult
graph.AddNode("executor", &ExecutorNode{})  // PlanResult → ExecutionResult
// 编译器确保 Node 的输入输出类型匹配

// LangChain: 运行时字典(类型不安全)
chain = planner | executor
# 如果 executor 期望的 key 不在 planner 输出中  运行时才崩溃

推理模式

ReAct 循环:思考 - 行动 - 观察

D2 Diagram
qtopie.github.io

这是 Eino 中最核心的模式,通过 Branch 实现循环控制:

graph := eino.NewGraph[ReActState]()
graph.AddNode("think", &ThinkNode{})
graph.AddNode("act", &ActionNode{})
graph.AddNode("observe", &ObservationNode{})
graph.AddNode("critique", &CritiqueNode{})

graph.AddEdge("think", "act")
graph.AddEdge("act", "observe")
graph.AddEdge("observe", "critique")

// 反思分支:不满足条件则回到 think 重新规划
graph.AddBranch("critique", func(s ReActState) string {
    if s.MaxIterationsReached || s.IsSatisfied {
        return "__end__"
    }
    return "think"
})

Prompt 链

线性 Prompt 序列建模为子图:

graph.AddNode("decompose", &TaskDecomposer{})   // 任务拆解
graph.AddNode("research", &WebSearcher{})        // 搜索信息
graph.AddNode("synthesize", &ResultSynthesizer{}) // 综合输出

graph.AddEdge("decompose", "research")
graph.AddEdge("research", "synthesize")

Tool Call 路由

通过 Branch 将 LLM 决策路由到具体的工具节点:

graph.AddNode("planner", &PlannerNode{})  // LLM 选择工具
graph.AddNode("search", &SearchTool{})
graph.AddNode("code", &CodeExecutor{})
graph.AddNode("calculator", &CalcTool{})

// 动态路由:根据 planner 输出决定调用哪个工具
graph.AddBranch("planner", func(s ToolState) string {
    return s.SelectedTool  // "search" / "code" / "calculator"
})
graph.AddEdge("search", "summarizer")
graph.AddEdge("code", "summarizer")
graph.AddEdge("calculator", "summarizer")

Eino Inside, Dapr Outside

Eino 与 Dapr Durable Agents 形成了天然互补的分层协作模式:

D2 Diagram
qtopie.github.io

关键特性

特性说明
编译时类型安全Go 泛型确保节点的 I/O 类型匹配,错误在编译期暴露而非运行时
DAG 组合支持图嵌套(一个 Node 本身可以是一个子图)
动态分支Branch 根据运行时输出决定路由路径
反思循环内置 Reflection 循环(自批评模式),有限迭代防止死循环
流式原生Node 通过 Go channel 模式产出流式 Token
Provider 抽象通过 eino-ext 适配 OpenAI、Gemini、DeepSeek 等 LLM
云原生整合与 CloudWeGo 生态深度配合(Hertz HTTP、Kitex RPC)

CloudWeGo 生态系统

Eino 是字节跳动 CloudWeGo 生态的 AI 推理组件。CloudWeGo 包括:

项目角色仓库
EinoAI Agent 图编排cloudwego/eino
Eino-extLLM/工具适配器cloudwego/eino-ext
HertzHTTP 微服务框架cloudwego/hertz
KitexRPC 通信框架cloudwego/kitex
Netpoll高性能网络库cloudwego/netpoll

这些组件可以独立使用,也可以组合构建完整的云原生 AI 服务。

对比其他框架

维度Eino (Go)LangChain (Python)Semantic Kernel (.NET)
语言GoPythonC#
类型安全编译时泛型运行时字典部分(.NET 泛型)
推理模型DAG 图优先LCEL 链式Plugin + Planner
并发Goroutine(轻量原生)asyncioTask
部署单二进制,无需运行时需要 Python/venv需要 .NET 运行时
性能~2-5x 快于 Python较慢中等
生态规模成长中(~50 集成)庞大(1000+)中等
最佳场景Go 后端微服务、边缘 AI快速原型、数据科学.NET 企业应用

参考资源

总结

Eino 为 Go 语言生态带来了一个原生的、类型安全的 AI Agent 框架。它的核心价值在于:

对于 Go 技术栈的团队来说,Eino 是在云原生环境中构建 AI Agent 的首选框架。