一个 LLM Agent,归根结底是四个要素的组合:
1 | Agent = LLM + Prompt + Tool + Memory |
这四个东西拼在一起,就是一个可组装 Pipeline。最基础的形态是顺序多轮对话——一步接一步走下去,当前步的输出是下一步的输入。LangChain 就是这个思路的典型代表。
但是现实任务往往没这么规整。三个分析步骤可以并行跑;查完数据之后,是发邮件还是继续分析,取决于数据的值。这时候你需要一张 有向无环图(DAG)——节点是操作,边是依赖,LLM 在节点处做决策。而加上循环和持久化状态,就从 DAG 扩展到了完整的图编排——LangGraph 就是这个思路。
这就是本文要讲的:从线性 Pipeline 到 DAG,把 Agent 的四个要素拆开,看每一层在 API 层面到底发生了什么。
我们会先画出 DAG 这张执行蓝图,然后深入 API 的消息协议理解节点间通信,接着给模型注册能力、加上参数校验闭环,再看 MCP 如何把工具集成标准化,最后理解记忆——记忆的本质就是状态管理,无论是 LangGraph 的 StateGraph 还是 Agent 的记忆系统,都是在解决同一个问题:跨步骤的数据怎么保持、怎么读取、怎么更新。
一、从最简单的调用到任务编排
一次调用就够了?
先看最基础的用法——问一句答一句:
1 | const reply = await openai.chat.completions.create({ |
简单 Q&A 场景,一次调用够了。但真实需求不会这么乖。假设用户说:
“查一下以太坊最近7天的链上活跃地址趋势,发邮件给我”
这条指令背后需要:
- 查 Dune 仪表盘拿到原始数据
- 分析数据判断趋势(增长 / 下降 / 震荡)
- 写一段分析报告
- 调用邮件 API 发送出去
一个 chat.completions.create 做不到——模型不会帮你查 Dune,不会发邮件。你需要把一个大问题拆成多个步骤,分步执行,再把结果串起来。
用团队分工来理解
想象一个项目组接到任务”出一份以太坊近期链上分析报告”:
graph LR
A[产品定义需求] --> B[研究员拉取基础数据]
B --> C[数据分析师
量化维度]
B --> D[竞品分析师
竞争维度]
B --> E[用户研究员
体验维度]
C --> F[报告汇总]
D --> F
E --> F
more >>