从 LLM 到 Agent:文字生成与任务执行之间

沿着一次回答的生成过程,分清模型、检索、工具和 Agent 各自负责什么。

LLMAgentRAG

面对一个 AI 应用,容易把它的表现全部归到“模型能力”上:回答得好,是模型聪明;找到了资料,是模型知道;完成了操作,也是模型做的。

但把一次任务拆开,会看到几种不同的工作。模型产生文字或调用请求,检索系统提供材料,工具执行动作,外层程序保存状态、检查权限,并决定流程能否继续。分清这些边界,才能判断问题发生在哪里。

这里先沿着 GPT 类、基于 Transformer 的 decoder-only 自回归模型理解文字生成,再看它如何成为任务系统中的一部分。这条路线不代表所有语言模型的架构。

一次回答是怎样生成的

假设输入是:“帮我解释一下缓存。”文字首先经过分词器,成为一串 Token ID。Token 不固定等于一个字或一个单词;切分方式取决于具体分词器。[1]

编号随后映射为向量表示。模型结合位置信息,在多层计算中处理这些表示,最后得到词表上各个候选 Token 的分数,也就是 logits。解码过程把分数转化为选择依据,挑出下一个 Token,再继续生成。

生成流程:文本变成 Token ID,再映射成向量并结合位置信息,经过多层计算得到 logits,解码选出下一个 Token;生成结果继续参与后续生成。
图 1 · 一步生成的概念流程。实际推理可用 KV Cache 复用计算,不必每一步重算全部历史。

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]

Agent 循环:目标和当前状态交给模型,模型选择回答或提出工具请求;运行程序检查边界后执行工具,工具结果更新状态并进入下一轮。目标完成、受阻或预算用尽时停止。
图 2 · 一个常见的工具使用循环。执行前的检查和停止条件属于系统设计。

例如整理一份社区资料:先读目录;发现某条记录缺少接入依据;再选择读取相关说明;根据结果更新判断。过程中,模型用于选择或解释,工具负责读取,运行程序负责执行和状态管理。

这里并不要求每一步都由模型自由决定。Workflow(工作流)可以固定某些步骤,例如先校验输入、再执行检索;Agent 也可以在这些约束内选择动作。两者能够组合,关键在于哪些步骤固定、哪些选择交给模型。

组件 关注的问题 容易混淆的边界
LLM 根据上下文产生输出 输出调用请求不等于动作已经执行
RAG 为回答提供外部材料 检索相关不等于证据充分
Tool 执行某个具体能力 工具成功不等于整体目标完成
Workflow 规定步骤、分支和状态转移 有固定流程也可以使用模型
Agent 结合目标和反馈选择后续动作 需要执行程序、状态和停止规则配合

出问题时,沿着边界检查

这些区分最实用的地方,是让排查变得具体。

  • 材料没有找到:先看检索范围和查询方式,不急着改提示词。
  • 材料找到了,却答错了:检查上下文是否完整、引用是否支持结论、模型是否忽略了限制。
  • 请求产生了,却没有执行:检查工具参数、权限与执行结果。
  • 工具成功了,任务仍在循环:检查状态更新和停止条件。

学习模型内部计算,有助于理解它怎样生成;学习系统边界,有助于判断它怎样完成任务。下一步可以拿一个足够小的任务,实际记录输入、检索片段、工具请求与返回结果,让上面的图对应到真实过程。

参考资料

  1. Hugging Face 的 Text generation 与 Fine-tuning:分别介绍生成与微调的实践流程。
  2. Attention Is All You Need:Transformer 的原始论文;论文中的完整架构是 Encoder–Decoder,并非这里所有 decoder-only 实现的逐项规格。
  3. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks:RAG 的研究来源。原论文包含训练方法,不应把 RAG 的所有形式都限定成只在推理时拼接材料。
  4. ReAct: Synergizing Reasoning and Acting in Language Models:结合推理、行动与反馈的研究示例。
继续阅读 · 模型为什么会“忘记”前面的对话?