Files
CamTalk/docs/Eino/Eino 知识索引.md

246 lines
9.7 KiB
Markdown
Raw Normal View History

2026-06-19 14:35:06 +08:00
---
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]] — 快速开始总览