9.7 KiB
9.7 KiB
tags, create time
| tags | create time | |||||
|---|---|---|---|---|---|---|
|
2026-04-29 21:30 |
Eino 知识索引
概述
Eino 是字节跳动(CloudWeGo)开源的大模型应用开发框架,基于 Go 语言。覆盖从组件定义、流程编排到 DevOps 工具链的全流程。本文档作为知识索引,列举 Eino 的关键概念与使用入口,后续可基于此构建知识问答。
一、是什么 —— Eino 核心定位
| 维度 | 说明 |
|---|---|
| 语言 | Go(强类型,编译时类型检查) |
| 定位 | 大模型应用开发框架,覆盖全流程 |
| 仓库 | github.com/cloudwego/eino + eino-ext |
| 特色 | 组件抽象 → 图编排 → ADK Agent → DevOps 工具链,层层递进 |
| 适用场景 | 从简单对话到复杂 Multi-Agent 系统,均可应对 |
[!question] 思考:为什么选 Go 而不是 Python?强类型在大模型应用规模化后能带来什么收益?
二、怎么分层 —— Eino 架构分层
graph TD
A["Eino 框架"] --> B["组件层 Components"]
A --> C["编排层 Orchestration"]
A --> D["ADK 层 Agent 开发套件"]
A --> E["工具层 DevOps"]
B --> B1["ChatModel"]
B --> B2["ChatTemplate"]
B --> B3["Tool / ToolsNode"]
B --> B4["Retriever"]
B --> B5["Document Loader"]
B --> B6["Embedding / Indexer"]
B --> B7["Lambda 自定义"]
C --> C1["Chain 链式"]
C --> C2["Graph 有向图"]
C --> C3["Workflow 字段映射"]
C --> C4["Stream 流处理"]
C --> C5["Callback 横切面"]
D --> D1["Agent 接口"]
D --> D2["ChatModelAgent ReAct"]
D --> D3["WorkflowAgents"]
D --> D4["Multi-Agent 范式"]
D --> D5["Middleware 中间件"]
E --> E1["Tracing 链路追踪"]
E --> E2["IDE 插件 / 可视化"]
E --> E3["Debug 调试"]
三、怎么用 —— 快速上手路径
3.1 入门四步走
| 步骤 | 主题 | 入口文档 |
|---|---|---|
| Step 1 | ChatModel 与 Message:学会调模型 | Eino/quick_start/chapter_01_chatmodel_and_message |
| Step 2 | ChatModelAgent + Runner + AgentEvent:学会跑 Agent | Eino/quick_start/chapter_02_chatmodelagent_runner_agentevent |
| Step 3 | Memory & Session:让 Agent 有记忆 | Eino/quick_start/chapter_03_memory_and_session |
| Step 4 | Tool & FileSystem:让 Agent 能干活 | Eino/quick_start/chapter_04_tool_and_filesystem |
3.2 进阶专题
| 主题 | 关键内容 | 入口文档 |
|---|---|---|
| Middleware | 横切面注入,PlanTask / Summarization / Skill 等内置中间件 | Eino/quick_start/chapter_05_middleware |
| Callback & Trace | 执行过程可观测、可追踪 | Eino/quick_start/chapter_06_callback_and_trace |
| Interrupt & Resume | Human-in-the-loop,断点续跑 | Eino/quick_start/chapter_07_interrupt_resume |
| Graph & Tool | 低代码编排,图即是工具 | Eino/quick_start/chapter_08_graph_tool |
| A2UI Protocol | Agent 生成 UI 协议 | chapter_10_a2ui_protocol |
| Skill Console | 技能注册与管理 | Eino/quick_start/chapter_09_skill_console |
四、关键概念清单
4.1 组件 Component
| 组件 | 职责 | 为什么需要 |
|---|---|---|
| ChatModel | 与大模型交互的核心接口 | 统一不同模型(OpenAI / Ark / Gemini)的调用方式 |
| ChatTemplate | 构造 Prompt 模板 | 将变量注入系统/用户消息,结构化管理 |
| Tool / ToolsNode | 可被模型调用的工具 | 让 LLM 从"只会说"变成"能执行" |
| Retriever | 检索外部知识 | RAG 的核心,给模型注入上下文 |
| Document Loader | 加载各类文档 | 将 PDF / Markdown / 网页等转为可处理文本 |
| Embedding / Indexer | 向量化 + 索引 | 语义检索基础 |
| Lambda | 自定义函数作为组件 | 当现有组件不满足需求时,自由扩展 |
[!question] 思考:Lambda 和 Tool 的区别是什么?什么场景用哪个?
4.2 编排 Orchestration
| 编排方式 | 特点 | 适用场景 |
|---|---|---|
| Chain | 简单的顺序执行,有向无环 | 线性 Pipeline |
| Graph | 有向图(可含环),灵活分支控制 | ReAct Agent 等复杂路由 |
| Workflow | 字段级别的数据映射与传递 | 抖音场景:字段粒度的图映射 |
额外能力:
- Stream 流处理:自动处理流式输入输出,支持流的复制、合并、拼接
- Callback 横切面:在组件执行前后注入逻辑(日志、追踪、统计)
- 编译时类型检查:Graph Compile 时验证节点类型对齐,而非运行时才发现
4.3 ADK —— Agent 开发套件
Agent 接口(统一抽象)
type Agent interface {
Name(ctx context.Context) string
Description(ctx context.Context) string
Run(ctx context.Context, input *AgentInput, options ...AgentRunOption) *AsyncIterator[*AgentEvent]
}
三个核心要素:身份(Name) + 职责(Description) + 标准化执行(Run → AsyncIterator)
Agent 类型全景
graph LR
A["Agent 接口"] --> B["ChatModelAgent\nReAct 模式"]
A --> C["WorkflowAgents\n流程编排"]
A --> D["Multi-Agent\n协作范式"]
A --> E["自定义 Agent\n实现接口"]
C --> C1["Sequential\n顺序执行"]
C --> C2["Parallel\n并发执行"]
C --> C3["Loop\n循环执行"]
D --> D1["Supervisor\n集中式协调"]
D --> D2["Plan-Execute\n规划-执行-反思"]
D --> D3["DeepAgents\n规划驱动集中协作"]
| Agent 类型 | 一句话描述 | 典型场景 |
|---|---|---|
| ChatModelAgent | 基于 ReAct 的思考-行动循环 | 需要模型自主决策和工具调用的场景 |
| SequentialAgent | 按顺序依次执行子 Agent | ETL 流水线、CI/CD |
| ParallelAgent | 多个子 Agent 并发执行 | 多源数据采集、多渠道推送 |
| LoopAgent | 循环执行直到满足退出条件 | 数据同步、迭代优化 |
| Supervisor | 中心调度,统一分配与汇总 | 科研项目管理、客服流程 |
| Plan-Execute | Planner → Executor → Replanner 闭环 | Excel 处理、多步骤推理 |
| DeepAgents | Main Agent + WriteTodos + TaskTool | 长流程阶段性管理、多角色协作 |
Agent 协作机制
| 机制 | 使用方式 | 适用场景 |
|---|---|---|
| History | 框架自动传递前序 Agent 输出 | Agent 间默认信息流 |
| Shared Session | KV 存储,GetSessionValue / AddSessionValue |
跨 Agent 共享状态 |
| Transfer(移交) | NewTransferToAgentAction 将任务移交子 Agent |
边界清晰的层级式分工 |
| ToolCall(工具调用) | NewAgentTool 将 Agent 封装为 Tool |
仅需参数、无需完整上下文时 |
中断与恢复
- Agent 运行时通过
Interrupt Action主动中断 CheckPointStore保存断点状态Resume方法携带新信息从断点恢复- 适用场景:需要外部输入、人工审批、长时等待
Middleware 中间件体系
| 内置中间件 | 功能 |
|---|---|
| PlanTask | 任务规划与拆解 |
| Summarization | 上下文摘要压缩 |
| ToolSearch | 动态工具搜索与选择 |
| ToolReduction | 工具调用结果精简 |
| Skill | 技能注册与匹配 |
| FileSystem | 文件读写能力注入 |
| PatchToolCalls | 工具调用修正 |
五、实战案例索引
| 案例 | 核心知识点 | 入口文档 |
|---|---|---|
| ReAct Agent | Graph 编排 + Tool 调用 | Eino/docs/overview/eino_open_source |
| Excel Agent | Plan-Execute + Multi-Agent + CodeAgent | Eino/docs/overview/eino_adk_excel_agent |
| 项目管理 Agent | Supervisor + 中断恢复 + Transfer | Eino/docs/overview/eino_adk0_1 |
| 字节内部实践 | 豆包、抖音等真实场景 | Eino/docs/overview/bytedance_eino_practice |
六、进阶对比与选型
| 对比维度 | Eino | LangChain / LlamaIndex |
|---|---|---|
| 语言 | Go(强类型) | Python(动态类型) |
| 类型安全 | 编译时校验 | 运行时才发现 |
| 长期维护 | 类型系统天然可维护 | 动态语言大型项目维护成本高 |
| 并发模型 | goroutine 原生并发 | asyncio / 多线程 |
| 编排能力 | Graph + Workflow 双模式 | LCEL + Graph |
| Agent 框架 | ADK 统一抽象 + 多种范式 | LangGraph Agent |
[!question] 思考:Eino 的 Graph vs Agent,什么时候直接用 Graph,什么时候用 ADK Agent?
七、版本演进速览
| 版本 | 关键变化 |
|---|---|
| v0.1 | 首个开源版本,核心组件 + Chain/Graph |
| v0.2 | Callback 体系完善 |
| v0.3 | 小幅 break change |
| v0.4 | Compose 优化 |
| v0.5 | ADK 实现 |
| v0.6 | JSON Schema 优化 |
| v0.7 | Interrupt/Resume 重构 |
| v0.8 | ADK Middleware 体系 |
八、外部资源
- 项目主页:https://www.cloudwego.io
- GitHub:https://github.com/cloudwego/eino
- 扩展库:https://github.com/cloudwego/eino-ext
- 示例:https://github.com/cloudwego/eino-examples
- 文档:https://www.cloudwego.io/zh/docs/eino/
关联笔记
- Eino/docs/overview/eino_open_source — 开源发布文
- Eino/docs/overview/eino_adk0_1 — ADK 设计模式详解
- Eino/docs/overview/eino_adk_excel_agent — Excel Agent 实战
- Eino/quick_start/README — 快速开始总览