Files
autumn-recruitment/06.AI/agent-design/Eino DAG 工作流设计_test.md
T

148 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [test/review, ai, agent-design, eino-dag]
create time: 2026-08-09 12:00
---
# Eino DAG 工作流设计 — 测试题
## 概述
本测试覆盖 Eino DAG 核心概念(Node/Edge/Workflow)、状态传递机制、Choice 条件分支、ParallelStep 并行执行以及错误处理与重试策略。共 10 道题目(6 选择 + 3 填空 + 1 简答)。
---
## 一、选择题(6道,由浅入深)
> **难度阶梯**: Q1-Q2 基础概念 → Q3-Q4 核心原理 → Q5-Q6 深入应用/边界场景
### Q1(基础)— 考察定义层面
Eino 框架中,以下哪个节点类型**不是**原生支持的?
A. LLM Node — 调用大模型生成文本
B. Tool Node — 执行预注册的外部工具
C. Database Node — 直接执行 SQL 查询
D. Lambda Node — 自定义 Go 函数闭包
### Q2(基础)→
DAG 的核心优势在于并行性——如果两个节点没有数据依赖,它们可以在不同 Goroutine 中同时运行。那么两个节点能否安全并发的判定条件是:
A. 它们的输入相同
B. 它们的上游节点相同
C. 它们没有重叠的 writes
D. 它们的执行时间相近
### Q3(进阶)— 核心原理
在 Eino 中 Choice 节点根据什么决定走向哪个下游节点?
A. 固定的路由规则表
B. 回调函数返回的目标节点 ID
C. 节点的拓扑排序位置
D. 随机选择一个未饱和的下游
### Q4(进阶)— 比较/辨析
关于 ParallelStep 的描述,以下哪个是错误的?
A. 可以对同一上游 fan-out 到多个下游
B. 需要一个 Merge 函数负责将子图结果聚合为最终输出
C. 三个子任务串行执行后合并结果以节省资源
D. 每个子任务可以处理输入的不同维度
### Q5(深入)— 场景推理
一个 RAG 系统中,检索节点的输出可能为空(找不到相关文档)。用 Eino DAG 实现时,最合理的方案是:
A. 在检索节点后加一个 Checkpoint,如果为空就中断整个 DAG
B. 使用 Choice 节点判断 hits 是否为空,为空时走 fallback 路径,不为空时走主路径
C. 配置重试策略无限重试直到有结果
D. 让 LLM 自己编造答案
### Q6(深入)— 源码级/边界场景
关于 Eino DAG 的错误处理策略,"连续失败 N 次后跳过整条链路"对应的是哪种机制?
A. 节点级超时
B. 失败重试
C. 降级路径
D. 熔断器
---
## 二、填空题(3道)
### F1 — 填空1
DAG 在编译期完成_____,确保图中无环。运行时按拓扑序执行所有没有未满足依赖的节点,已就绪节点可并发执行。如果实际项目中节点数超过_____个,建议拆分为嵌套子 DAG。
> **提示**: 第一个空是编译期的关键动作;第二个空是原文中的经验上限值。
### F2 — 填空2
State Schema 中节点的读集合(reads)和写集合(writes)决定了节点间能否安全并行——两个节点如果没有_____就一定能并发执行。如果都写同一个字段则必须串行。
> **提示**: 原文面试常考点的原话。
### F3 — 填空3
重试配置的参数包括 MaxRetries = _____、BackoffBase = 1s、BackoffMul = 2。这是一个标准的_____退避算法。
> **提示**: 回忆重试代码示例中的数值和时间算法名称。
---
## 三、简答题(1道)
### S1
面试官问:"如何用 DAG 实现一个多轮对话系统?"请给出你的架构设计,需要涵盖:
1. State 如何携带上下文
2. Intent 判断的节点设计
3. 专业 Agent 的分发机制
4. 质量保障闭环
> **答题框架提示**:
> 1. 单轮 vs 多轮的建模方式
> 2. 关键节点类型及其职责
> 3. 循环/反馈的设计(如 self-check)
> 4. 复杂度控制
---
## 参考答案与解析
### 选择题答案
| 题号 | 正确答案 | 解析 |
|------|---------|------|
| Q1 | C | Eino 原生的五种节点是:LLM Node、Tool Node、Prompt Node、State Node、Lambda Node。Database Node 不是原生类型——如果需要数据库操作,可以用 Tool Node 或 Lambda Node 封装 SQL 查询逻辑。 |
| Q2 | C | 原文面试常考点:两个节点如果没有重叠的 writes,就一定能并发执行。共享读取不冲突,只有写入冲突才需要序列化。 |
| Q3 | B | Choice 节点基于回调函数(路由函数)返回目标节点 ID,然后 map 中将字符串 key 映射到对应的下游节点。回调函数的签名是 `func(state *eino.State) (string, error)`。 |
| Q4 | C | ParallelStep 是**并行**执行而非串行——三个 Agent 同时启动各自处理 query 的一个维度。C 说"串行执行"完全违背了 ParallelStep 的设计目的。 |
| Q5 | B | Choice 判断 hits 是否为空是最合理的方案:RAG 检索为空时回退到备用路径(如默认回答或直接拒绝),这是原文中提到的降级模式。 |
| Q6 | D | 熔断器的定义是"连续失败 N 次后跳过整条链路"。这是为了防止上游服务不可用时持续浪费资源尝试调用。 |
### 填空题答案
| 题号 | 答案 | 解析 |
|------|------|------|
| F1 | `拓扑排序`;`15` | DAG 编译期做拓扑排序确保无环。原文建议控制在 15 个节点以内,超出则拆分为嵌套子 DAG——因为复杂度随节点数呈组合增长。 |
| F2 | `重叠的 writes`(或"共同的写入字段") | 读读不冲突,读写也不冲突(只要不是同一个字段),只有写写冲突才需要串行。这也是 Eino 状态机的核心并发安全原则。 |
| F3 | `3`;`指数` | 标准指数退避:第一次 1s,第二次 2s,第三次 4s。MaxRetries=3 表示最多重试 3 次。 |
### 简答题参考答案
S1:**参考答案要点**:
1. **单轮建模**:每轮对话作为一个独立的 DAG 实例,但 State 携带历史消息(messages 数组),保证上下文连贯。
2. **IntentNode**:LLM Node 分析用户意图类型(问答/创作/闲聊),通过 Choice 分发给不同专业 Agent。
3. **分发机制**:Choice 根据 IntentNode 的输出路由到不同路径;ParallelStep 并行调用搜索 Agent、知识库加载 Agent 等。
4. **质量保障**:在 LLM 生成后加入质量评估节点做 self-check,如果不达标则重新触发检索节点(形成循环)。
5. **复杂度控制**:单轮 DAG 控制在 15 个节点内;复杂的多轮对话拆分为嵌套子 DAG,外层管理回合切换。
**评分标准**:答出任意 2 个要点即可得满分;完全正确需覆盖全部要点。
## 关联笔记
- [[多智能体协作模式]]
- [[上下文工程与记忆管理]]