从 LLM 到 Agent:文字生成与任务执行之间
沿着一次回答的生成过程,分清模型、检索、工具和 Agent 各自负责什么。
面对一个 AI 应用,容易把它的表现全部归到“模型能力”上:回答得好,是模型聪明;找到了资料,是模型知道;完成了操作,也是模型做的。
但把一次任务拆开,会看到几种不同的工作。模型产生文字或调用请求,检索系统提供材料,工具执行动作,外层程序保存状态、检查权限,并决定流程能否继续。分清这些边界,才能判断问题发生在哪里。
这里先沿着 GPT 类、基于 Transformer 的 decoder-only 自回归模型理解文字生成,再看它如何成为任务系统中的一部分。这条路线不代表所有语言模型的架构。
一次回答是怎样生成的
假设输入是:“帮我解释一下缓存。”文字首先经过分词器,成为一串 Token ID。Token 不固定等于一个字或一个单词;切分方式取决于具体分词器。[1]
编号随后映射为向量表示。模型结合位置信息,在多层计算中处理这些表示,最后得到词表上各个候选 Token 的分数,也就是 logits。解码过程把分数转化为选择依据,挑出下一个 Token,再继续生成。
Attention(注意力)帮助当前位置结合上下文中的信息;FFN(前馈网络)继续变换表示。Transformer Block 还包含残差连接、归一化等结构,具体顺序和实现会因模型而不同。[2] 只记“Attention 很重要”,还不足以解释整个生成过程。
这也给“模型为什么会答错”提供了一个入口:能生成连贯文字,不等于已经查到了可靠证据。事实性还取决于模型训练、可见上下文,以及系统是否提供了合适的材料。
训练与推理,改变的是不同的东西
训练时,模型先计算预测结果,再根据训练目标计算损失。反向传播求出梯度,优化器据此更新参数。推理时,通常使用已经训练好的参数生成结果;我们在对话中补充资料,改变的是这次计算能看到的上下文。[1]
| 场景 | 主要发生什么 | 是否通常更新模型参数 |
|---|---|---|
| 训练、微调 | 用训练目标计算损失与梯度,再更新参数 | 是 |
| 普通对话推理 | 根据输入与历史生成输出 | 否 |
| 把资料放进提示词 | 扩充当前输入 | 否 |
| 检索后再回答 | 把选出的材料提供给模型 | 否,指常见推理阶段的检索增强 |
“这次回答记住了我的要求”和“模型已经学会了这个要求”不能直接画等号。下一次对话能否继续使用它,取决于应用有没有保存、选择并重新提供相应信息。
RAG 补材料,工具补动作
检索增强生成(Retrieval-Augmented Generation,RAG)把检索到的外部材料与生成结合起来。[3] 在常见应用中,程序先寻找相关片段,再把这些片段放进模型上下文。这里的材料可以更新,而不必为了每次资料变化重新训练模型。
但“检索到了相似片段”只是起点。片段可能不回答当前问题,也可能来自过期文档。一个回答即便附上引用,也需要检查:引用是否支持它写出的结论。
工具则解决另一类问题。模型可以提出“读取这个文件”或“查询这个接口”的请求;执行请求的是应用程序。工具返回结果之后,模型才能结合结果继续生成。
比如,读取一份文档的请求可以写成这样:
{
"tool": "read_document",
"arguments": { "document_id": "agent-notes" }
}
这段 JSON 本身没有读取文件。应用需要验证工具是否存在、参数是否有效、访问是否允许,然后执行读取并返回结果。把调用意图和执行动作分开,是理解 Agent 系统的重要一步。
Agent 把结果带回下一轮决策
如果一个系统能够围绕目标,结合当前状态选择下一步动作,并根据结果继续调整,就可以用 Agent 的视角理解它。ReAct 展示了将推理与行动交织、利用环境反馈继续处理任务的一种方法。[4]
例如整理一份社区资料:先读目录;发现某条记录缺少接入依据;再选择读取相关说明;根据结果更新判断。过程中,模型用于选择或解释,工具负责读取,运行程序负责执行和状态管理。
这里并不要求每一步都由模型自由决定。Workflow(工作流)可以固定某些步骤,例如先校验输入、再执行检索;Agent 也可以在这些约束内选择动作。两者能够组合,关键在于哪些步骤固定、哪些选择交给模型。
| 组件 | 关注的问题 | 容易混淆的边界 |
|---|---|---|
| LLM | 根据上下文产生输出 | 输出调用请求不等于动作已经执行 |
| RAG | 为回答提供外部材料 | 检索相关不等于证据充分 |
| Tool | 执行某个具体能力 | 工具成功不等于整体目标完成 |
| Workflow | 规定步骤、分支和状态转移 | 有固定流程也可以使用模型 |
| Agent | 结合目标和反馈选择后续动作 | 需要执行程序、状态和停止规则配合 |
出问题时,沿着边界检查
这些区分最实用的地方,是让排查变得具体。
- 材料没有找到:先看检索范围和查询方式,不急着改提示词。
- 材料找到了,却答错了:检查上下文是否完整、引用是否支持结论、模型是否忽略了限制。
- 请求产生了,却没有执行:检查工具参数、权限与执行结果。
- 工具成功了,任务仍在循环:检查状态更新和停止条件。
学习模型内部计算,有助于理解它怎样生成;学习系统边界,有助于判断它怎样完成任务。下一步可以拿一个足够小的任务,实际记录输入、检索片段、工具请求与返回结果,让上面的图对应到真实过程。
参考资料
- Hugging Face 的 Text generation 与 Fine-tuning:分别介绍生成与微调的实践流程。
- Attention Is All You Need:Transformer 的原始论文;论文中的完整架构是 Encoder–Decoder,并非这里所有 decoder-only 实现的逐项规格。
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks:RAG 的研究来源。原论文包含训练方法,不应把 RAG 的所有形式都限定成只在推理时拼接材料。
- ReAct: Synergizing Reasoning and Acting in Language Models:结合推理、行动与反馈的研究示例。