一、先定义检索边界
RAG 不是把所有文档塞进提示词。先确定允许纳入的来源、更新频率、访问权限和文档版本,并为每个片段保留来源标识。
二、切分文档并保留上下文
优先按标题、段落和列表切分,避免把步骤拆散。每个片段至少保留文档名、章节、版本或更新时间等元数据。
chunk = {
"text": "...",
"source": "docs/guide.md",
"section": "Authentication",
"version": "placeholder"
}示例中的版本值是占位符;生产数据应来自真实文档元数据。
三、检索和生成分开评估
- 先检查正确文档是否出现在 Top-K 结果中。
- 再检查模型是否只使用检索到的证据。
- 对没有证据的问题要求明确说明“资料不足”。
- 对权限受限文档在检索层过滤,而不是生成后再隐藏。
四、回答必须带引用
回答应返回来源标题、章节或稳定链接。引用不能只写一个模糊的“知识库”,否则用户无法复核。
五、最小测试集
- 答案直接存在于单个文档。
- 答案需要跨两个文档综合。
- 问题使用同义词或不同表述。
- 文档中没有答案,系统应拒答。
- 用户试图访问无权限文档。
- 文档版本更新后,旧答案不应继续被优先召回。
本文讲解 RAG 的可复现设计方法,没有声称已在某个具体模型、向量数据库或生产数据集上完成性能测试。实际效果需要使用目标语料建立评测集后验证。