主题
React + AI 应用开发
RAG 引用、来源和无答案状态如何设计前端交互?
好的 RAG UI 要让用户知道答案依据什么、证据是否可访问,以及系统什么时候其实没有足够依据。
面试官想考什么
- 引用是模型生成的还是检索返回的? 考察证据真实性。
- 用户无权访问某文档怎么办? 考察权限过滤。
- 没有检索结果时 UI 如何表达? 考察产品诚实性。
- 流式文本和引用如何对齐? 考察事件协议与可读性。
一句话回答
text
引用必须来自服务端检索结果并带稳定 sourceId、权限过滤和证据片段,前端按引用标记关联来源;证据不足时明确展示无可靠答案并提供改问入口,不能只用模型自报的链接制造可信感。面试回答详解
1. 证据模型
json
{
"sourceId": "doc-42#chunk-3",
"title": "安全规范",
"url": "/documents/42",
"snippet": "经过权限过滤的片段",
"page": 4,
"score": 0.82
}sourceId 由检索系统产生,模型只引用 id 或 span,不允许模型凭空拼 URL。服务端返回的 snippet 也应做敏感信息过滤。
2. 权限和多租户
检索阶段先做 ACL/tenant filter,答案生成阶段只能使用已授权 context,引用详情接口再次鉴权。前端隐藏一个来源不是安全措施;即便用户手工修改 URL,也不能读取未授权文档。
3. UI 交互
- 正文中的
[1]映射到来源列表,点击可定位证据。 - 来源展示标题、更新时间、文档类型和可访问状态。
- 片段过长可折叠,敏感字段脱敏。
- 引用加载失败时显示“来源暂不可访问”,不要把未验证内容标为已证实。
- 无答案、证据不足、检索失败和模型失败使用不同状态。
4. 流式一致性
可以先发送 retrieval.completed,再发送带 citation span 的文本事件;或者文本结束后发送 citations。前者体验好但要处理引用尚未到达,后者简单但延迟更高。事件应带 citation id 和 offset,前端不要按正文字符串猜测引用位置。
5. 评估指标
除首 token 外,关注 citation coverage、citation correctness、点击来源率、无答案误答率、权限拦截率和用户纠错率。引用多不等于引用好,必须评估证据是否真正支持结论。
可直接背诵的 30 秒回答
text
RAG 引用不能由模型随便生成,而应来自服务端检索结果,带稳定 sourceId、权限过滤和证据片段。前端用 citation id 关联正文和来源面板,区分无答案、证据不足、检索失败和模型失败。详情接口仍要鉴权,并通过引用覆盖率、正确性和无答案误答率评估体验。扩展知识
无答案的几种状态
- 没有命中:知识库可能没有相关内容。
- 命中但权限不足:不能暴露“存在某文档”的额外信息。
- 证据冲突:展示冲突并要求用户确认范围。
- 证据不足:允许模型回答常识,但必须标记来源边界。
面试官追问链
追问一:前端能否根据 score 决定是否回答?
- 考察点:职责边界。
- 回答方向:阈值策略应由服务端统一,前端只呈现状态;score 不能直接等同于答案正确率。
追问二:引用链接被用户删掉了怎么办?
- 考察点:数据完整性。
- 回答方向:以 sourceId 和服务端详情为准,链接只是展示字段;删除或权限变化后呈现失效状态。
追问三:怎样防止引用面板泄露敏感片段?
- 考察点:权限与最小披露。
- 回答方向:检索、答案、详情三处都做 ACL,snippet 脱敏并限制长度,不能把原始 chunk 全部发到浏览器。