| LLM 角色 |
NLP 翻译官 — 只做自然语言理解与生成 |
决策者 — 决定调什么工具、何时调、下一步做什么 |
| 流程控制 |
编排器代码 — if/else/switch 静态路由,执行路径在代码中可知 |
LLM 自主 — 通过 tool call 序列逐步推进,执行路径每次都可能不同 |
| 函数 / 算法调用 |
普通函数调用 — 编排器直接调,不经过 LLM,不需要 tool schema |
tool 调用 — LLM 选工具 → 代码执行 → 结果回 LLM,需要注册 function/tool schema |
| 状态管理 |
显式维护 — 编排器用变量或状态机管理,清晰可见 |
隐式维护 — 状态编码在 LLM 的上下文中,容易被遗忘或混淆 |
| 错误恢复 |
确定性恢复 — 编排器有明确的状态转移规则,出错了可以回退到已知状态 |
LLM 自行处理 — 可能跑偏或者循环,需要人工或额外逻辑干预 |
| 可调试性 |
白盒 — 执行路径在代码中静态可知,单步调试轻松 |
黑盒 — 需追踪 LLM 的 tool call 序列,调试困难 |
| LLM 成本 |
低 — 每步只调一次 LLM,每次调用 token 少、任务单一 |
高 — ReAct 循环多次调 LLM,每次携带完整上下文,token 消耗大 |
| 实现复杂度 |
中 — 需要设计状态机、维护 workflow_state、编写守卫逻辑 |
低(起步) — 只需定义工具列表,LLM 自动编排流程 |
| 灵活性 |
固定 — 流程由代码定义,适合业务逻辑明确、固定的场景 |
高 — LLM 可以灵活应对未预定义的路径和开放性问题 |
| 可预测性 |
高 — 系统行为由代码定义,不受 LLM 幻觉影响 |
低 — 每次执行可能不同,LLM 可能生成不存在的行为或幻觉 |
| 适用场景 |
确定性工作流 — 客服对话、物流流程、表单填写、多轮信息收集 |
开放式探索 — 代码生成、自动编程、信息检索、分析推理 |
| 记忆机制 |
分层管理 — 对话历史给 LLM 看,workflow_state 由编排器独占。编排器按步骤剪裁上下文长度,每轮仅调 1-2 次 LLM,每次上下文有限 |
全量上下文 — 所有信息在 LLM 的 prompt 中。每轮 ReAct 循环多次调用 LLM,每次都携带完整上下文,靠 KV Cache 优化重复前缀 |