246 lines
9.7 KiB
Markdown
246 lines
9.7 KiB
Markdown
|
|
---
|
|||
|
|
tags: [eino, llm-framework, golang, agent, ai]
|
|||
|
|
create time: 2026-04-29 21:30
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Eino 知识索引
|
|||
|
|
|
|||
|
|
## 概述
|
|||
|
|
|
|||
|
|
Eino 是字节跳动(CloudWeGo)开源的大模型应用开发框架,基于 Go 语言。覆盖从组件定义、流程编排到 DevOps 工具链的全流程。本文档作为知识索引,列举 Eino 的关键概念与使用入口,后续可基于此构建知识问答。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、是什么 —— Eino 核心定位
|
|||
|
|
|
|||
|
|
| 维度 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| **语言** | Go(强类型,编译时类型检查) |
|
|||
|
|
| **定位** | 大模型应用开发框架,覆盖全流程 |
|
|||
|
|
| **仓库** | [github.com/cloudwego/eino](https://github.com/cloudwego/eino) + [eino-ext](https://github.com/cloudwego/eino-ext) |
|
|||
|
|
| **特色** | 组件抽象 → 图编排 → ADK Agent → DevOps 工具链,层层递进 |
|
|||
|
|
| **适用场景** | 从简单对话到复杂 Multi-Agent 系统,均可应对 |
|
|||
|
|
|
|||
|
|
> [!question] 思考:为什么选 Go 而不是 Python?强类型在大模型应用规模化后能带来什么收益?
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、怎么分层 —— Eino 架构分层
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
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 接口(统一抽象)
|
|||
|
|
|
|||
|
|
```go
|
|||
|
|
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 类型全景
|
|||
|
|
|
|||
|
|
```mermaid
|
|||
|
|
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](https://www.cloudwego.io)
|
|||
|
|
- GitHub:[https://github.com/cloudwego/eino](https://github.com/cloudwego/eino)
|
|||
|
|
- 扩展库:[https://github.com/cloudwego/eino-ext](https://github.com/cloudwego/eino-ext)
|
|||
|
|
- 示例:[https://github.com/cloudwego/eino-examples](https://github.com/cloudwego/eino-examples)
|
|||
|
|
- 文档:[https://www.cloudwego.io/zh/docs/eino/](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]] — 快速开始总览
|