指出 RAG agent 在检索阶段可能因过时知识、提示注入或错误分块而出错,论证审批流程需同时展示检索内容和行动建议,而非仅展示最终动作。
检索失败是与生成失败不同的风险
大多数人在环(Human-in-the-Loop)指南都专注于模型的输出:它写的邮件是否合格、退款金额是否合理、评论是否恰当。而 RAG agent 在此之前增加了一步——它从向量库、工单历史或一组抓取文档中拉取上下文,然后在检索到的内容基础上起草行动。
这一"接地"步骤本身可能失败。检索器可能拉取到一篇已被更新的过时 KB 文章。它可能暴露一份包含间接提示注入的文档——这些文本是专门植入以被检索器拾取并被当作指令处理的。或者它只是检索到了错误的 chunk,然后 agent 仍然自信地基于此行动。这些都不会显示为生成问题。草稿可能读起来完全正常但仍然是错的,因为它是建立在糟糕的接地之上。
所以 RAG agent 的审批门需要展示比拟议行动更多的东西——它需要展示 agent 检索到了什么来支撑这个行动。
审批卡片应该承载什么
一个支持分诊 RAG agent 是一个具体的好案例:它检索过去的工单和 KB 文章,然后提议回复或工单状态更改。你发送给 Impri 的 preview.body 应该将检索到的片段与拟议文本一起包含,而不仅仅是最终答案,这样人工审核者可以在同一视图中检查接地情况:
import requests
import os
IMPRI_KEY = os.environ["IMPRI_API_KEY"]
def push_rag_action(ticket_id, retrieved_chunks, draft_reply):
citations = "\n".join(
f"> **Source ({c['doc_id']}, updated {c['updated_at']}):** {c['text'][:200]}"
for c in retrieved_chunks
)
body = f"""**Proposed reply to ticket #{ticket_id}:**
{draft_reply}
---
**Retrieved context this reply is grounded on:**
{citations}
"""
resp = requests.post(
"https://api.impri.dev/v1/actions",
headers={"Authorization": f"Bearer {IMPRI_KEY}"},
json={
"kind": "ticket.reply",
"title": f"RAG reply for ticket #{ticket_id}",
"preview": {"format": "markdown", "body": body},
"expires_in": 21600,
"editable": ["preview.body"],
"idempotent": False,
},
)
return resp.json()["id"]
在同一张卡片中放入引用不需要额外成本——它只是 markdown body 中的一个额外部分——但它将审核从"这个回复听起来对吗"变成了"这个回复与实际检索到的内容匹配吗",而后者才是真正捕捉糟糕接地的问题。
通过行动所承诺的内容来命名 action kind
kind 是 Impri 不做验证的自由格式字符串,所以用它来让审查者能够一目了然地了解行动的检索驱动特性:
扫描二十个待处理行动收件箱的审核者,能够在瞥之间区分哪些是检索接地的、因此值得检查来源的,哪些是简单的直接请求。
将检索内容视为不受信任的输入
如果检索语料库的任何部分来自你无法控制的地方——抓取的页面、用户提交的文档、公共 wiki——在 agent 的 system prompt 中将那段文本视为数据而非指令。Impri 不会解析或解释它存储的行动内容;它只是将你发送的内容作为卡片呈现给人类阅读。这意味着 Impri 可以暴露隐藏在检索 chunk 中的可疑指令(因为你把引用包含在了 preview 中),但它不会为你检测或标记它。阅读卡片的人类才是真正的防线——这正是为什么引用需要首先出现在卡片中,而不是仅仅出现在模型的输出中。
这解决不了什么
Impri 不会排名、验证或重新检索任何内容。它不是一个 RAG 评估工具,也不会告诉你某个引用是否真正支撑旁边的声明——人类仍然需要做出那个判断。它给你的是一个检查点:agent 可以基于检索提出回复,但它不能在没有存储的已批准决策的情况下发送、发布或应用该回复,而围绕你的发送/发布函数的封装应该是达到那个副作用的唯一路径(参见向 agent 添加审批以了解封装模式)。
有关特定框架的 RAG 集成,请参阅 LangChain 和 LlamaIndex 指南。初次使用 Impri?从快速入门开始。