← 返回

知识库工程(三):提示词、RAG 与 Agent 如何协作

系列导航:1 | 2 | 3 | 4

提示词、RAG 和 Agent 经常被写成三个可替换的方案。它们处在不同层次:提示词组织一次模型调用中的信息与约束,RAG 从外部知识中选择证据,Agent 根据任务状态决定下一步动作。一个完整应用可以同时使用三者,也可以只使用其中一部分。

分清职责后,很多故障会更容易定位。模型漏掉文档中的事实,应先检查检索与上下文;模型格式不稳定,再检查提示词和结构化输出;模型需要多次查询、计算或调用业务工具,才进入 Agent 编排。只改提示词无法补回没有进入上下文的证据。

Prompt 是一次调用的上下文编排

实际送给模型的输入通常由系统规则、用户任务、少量示例、检索证据、对话状态和工具定义组成。它们共享同一个 token 预算:

$$ T_{sys}+T_{user}+T_{demo}+T_{rag}+T_{history}+T_{tool}+T_{output}\leq T_{window} $$

上下文窗口扩大后,预算约束依旧存在,因为输入长度还会影响延迟、费用与注意力分配。系统规则应该短而稳定,业务数据保持结构清晰,检索片段携带来源与版本。少量示例适合约束输出模式,不能用来长期保存不断变化的知识。

Prompt 中常见的几个区块有不同优先级。系统规则定义身份、权限和禁止事项;用户消息描述当前目标;证据区提供可引用事实;工具定义列出允许执行的动作。检索文档属于不可信数据,其中若出现“忽略系统要求”,应用不能把它提升为指令。

RAG 在生成前选择证据

一次基础 RAG 包含查询改写、候选召回、过滤、重排、上下文组装和生成。查询改写解决代词、省略和多轮上下文问题,召回负责扩大候选范围,重排比较问题与段落的匹配程度,组装阶段处理去重、版本与 token 预算。

检索结果必须连同来源进入 Prompt。只有正文,没有文档标识、页码或更新时间,模型生成后就难以给出可核对引用。旧版制度和新版制度同时被召回时,生成模型也不适合自行猜测哪一版有效,检索前应先按状态和时间过滤。

RAG 适合知识密集且资料可索引的任务,例如制度问答、项目文档检索、代码说明和客服知识。需要精确计算、实时余额或写入业务状态时,应调用确定性工具。模型可以解释工具结果,数据真值仍由业务系统提供。

Agent 把单次问答扩展成有状态循环

ReAct 将推理与动作交替组织。模型根据当前观察选择动作,环境执行工具并返回结果,模型再判断是否继续。工程实现无需暴露完整内部推理文本,可以保留结构化计划摘要、工具调用、观察结果和停止原因。

flowchart TD A[用户目标] --> B[读取会话与长期记忆] B --> C[选择下一步动作] C --> D[检索知识] C --> E[调用受控工具] D --> F[校验并记录观察] E --> F F --> G{任务完成或预算耗尽?} G -->|否| C G -->|是| H[生成可引用结果]

循环必须由运行时控制。调用次数、总 token、总耗时和工具权限都有硬上限;同一动作连续失败时应停止或切换策略。模型输出“完成”也要经过程序检查,例如所需字段是否齐全、写操作是否返回成功、引用是否存在。

开放式 Agent 与固定工作流也应分开。报销审批、数据迁移和发布流程已有稳定步骤,状态机或任务编排器更合适;Agent 可以负责理解自然语言、选择已有流程或处理少量非结构化环节。让模型自由决定所有顺序,会降低可复现性并增加副作用风险。

检索工具与业务工具承担不同风险

知识库检索通常是只读动作,主要风险是越权召回和错误证据。业务工具可能发送消息、修改数据、触发任务或产生费用,需要更严格的参数校验和授权。工具描述只告诉模型何时使用,服务端仍要验证调用者身份、资源范围与幂等键。

工具返回内容也属于外部输入。网页、邮件和文档可能带有提示注入文本,Agent 不能把工具结果中的指令当成系统规则。安全处理可以分三层:检索阶段按权限过滤,Prompt 中明确区分指令区与数据区,执行前由服务端检查动作和参数。高影响操作还需要人工确认。

记忆在 Agent 中同时参与读和写

RAG 通常读取预先建设的文档库,Agent 记忆还会吸收运行中的事件。任务开始时可以读取用户偏好、历史决策和未完成事项;任务结束后再选择哪些结果值得保存。写入不应由每轮模型输出直接决定,应用规则需要过滤临时信息、敏感数据和未经确认的推断。

记忆也会改变行动路径。旧记录称某服务部署在 A 环境,新任务已经迁移到 B 环境,Agent 若没有时间版本就可能操作错误目标。长期记录需要有效期、来源和被替代关系,读取时优先选择当前状态,并把历史事件留给审计。

对一次 Agent 执行,可以保存以下可复核状态:目标、选用的 Prompt 版本、读取的记忆 ID、检索查询、候选证据、工具名、参数摘要、结果类型、预算消耗和停止原因。完整私密正文与密钥不能写入普通轨迹。

三层问题要分开评测

Prompt 评测观察指令遵循、格式稳定性和拒答行为。RAG 评测观察相关段落是否进入候选、排序位置、引用覆盖和无答案识别。Agent 评测增加任务成功率、工具选择、无效循环、费用、耗时与副作用。

一个回答看起来正确,可能引用了错误文档;一次任务执行成功,也可能多调用了不必要工具。评测记录要能逐层还原,不能只对输出文本打分。模型评审适合扩大样本覆盖,关键事实、权限和写操作仍需规则或人工核验。

选择组合方式时,可以从任务复杂度出发。单轮改写只需要 Prompt;基于资料回答采用 Prompt 加 RAG;需要跨来源搜索、计算和工具执行时加入 Agent;步骤稳定且风险高的任务使用确定性工作流,并把 LLM 放在需要语言理解的位置。组件越多,观测、评测和权限控制也要同步增加。

参考资料