PRD: [RAG 产品名称]
| 元数据 | 内容 |
|---|---|
| 文档状态 | [草稿 / 评审中 / 已定稿] |
| 版本号 | v[0.1.0] |
| 作者 | [姓名] |
| 创建日期 | [YYYY-MM-DD] |
| 最后更新 | [YYYY-MM-DD] |
| RAG 类型 | [通用知识库 / 企业知识问答 / 客服辅助 / 代码搜索] |
1. 产品概述
1.1 定位与愿景
[用 3-5 句话描述 RAG 产品的定位。例如:本产品是一个基于 RAG(检索增强生成)技术的[产品类型],将[知识源类型]转化为可供 LLM 检索的知识库,让用户通过自然语言获取精准、可溯源的答案,显著提升[核心场景]的信息获取效率。]
1.2 目标用户
- 主要用户:[如:企业员工、客服人员、研究员]
- 使用场景:[如:内部知识问答、政策法规查询、技术文档检索]
- 用户规模:[如:初期 1,000 人,目标 10,000 人]
1.3 用户痛点
- [痛点 1]:[如:公司内部信息分散在不同系统,找资料费时]
- [痛点 2]:[如:LLM 直接回答存在幻觉,且无法提供来源]
- [痛点 3]:[如:现有搜索引擎关键词匹配差,语义理解不足]
- [痛点 4]:[如:知识更新不及时,回答总是过时的]
1.4 成功指标
| 指标 | 目标值 | 测量方式 |
|---|---|---|
| 回答准确率 | ≥ [X]% | [人工评估 + 自动评估集] |
| 检索命中率 (Recall@K) | ≥ [X]% @ K=[X] | [评测集评估] |
| 引用准确率 | ≥ [X]% | [引用来源验证] |
| 首轮解决率 | ≥ [X]% | [用户无需追问直接获得答案的比例] |
| 知识更新延迟 | ≤ [X] 小时 | [从文档上传到可检索] |
2. 知识源与格式
2.1 支持的知识源
| 知识源类型 | 格式 | 优先级 | 说明 |
|---|---|---|---|
| 内部文档 | [Markdown / PDF / Word / TXT] | P0 | [如:公司内部 Wiki、技术文档] |
| API 文档 | [OpenAPI / Swagger / HTML] | P1 | [如:内部微服务 API 文档] |
| FAQ 数据集 | [CSV / JSON / Excel] | P0 | [如:常见问题与标准回答] |
| 代码仓库 | [GitHub / GitLab 仓库] | P1 | [如:README、文档、注释] |
| 数据库记录 | [MySQL / PostgreSQL / MongoDB] | P2 | [如:产品数据字典] |
| 网页内容 | [URL 抓取 / Sitemap] | P2 | [如:官网帮助中心] |
2.2 格式处理 Pipeline
知识源 → 格式解析器 → 内容提取 → 清洗 → 结构化 → 知识切片- 格式解析器:[如:Unstructured.io / PyMuPDF / Pandoc]
- 内容提取:[如:提取纯文本、表格、图片说明文字]
- 清洗规则:[如:去除页眉页脚、去除 HTML 标签、统一编码 UTF-8]
- 结构化:[如:保留标题层级、分离表格与正文、标记代码块]
2.3 更新策略
- 增量更新:[支持/不支持],监听文件变化自动更新
- 全量重建:[按需/定时],[如:每周日凌晨全量重建索引]
- 版本控制:[如:每次更新保留历史版本,支持回滚]
3. 分块策略 (Chunking)
3.1 分块方案
| 策略名称 | 分块尺寸 | 重叠窗口 | 适用场景 |
|---|---|---|---|
| 固定大小分块 | [如:512 tokens] | [如:128 tokens] | [通用兜底方案] |
| 语义分块 | 动态(段落级) | [如:1 句重叠] | [文档结构清晰时优先] |
| 层级分块 | 章节/小节/段落 | [按结构嵌套] | [长文档、书籍、规范] |
| 递归分块 | 从句子 → 段落递进 | [如:10% 重叠] | [结构不规则的混合内容] |
3.2 分块规则
- 最小块大小:[如:≥ 50 tokens,太短则合并]
- 最大块大小:[如:≤ 2,000 tokens,过长则拆分]
- 标题继承:[如:每个块携带所在章节的标题链作为元数据]
- 代码块保护:[如:完整代码块不做拆分]
- 表格保护:[如:完整表格作为一个 chunk]
3.3 Chunk 元数据 Schema
json
{
"chunk_id": "uuid",
"source_file": "文档路径",
"titles": ["一级标题", "二级标题"],
"page_number": 12,
"chunk_index": 3,
"token_count": 512,
"content_type": "text/code/table"
}4. Embedding 选型
4.1 Embedding 模型选择
| 模型 | 向量维度 | 最大输入 | 价格 | 适用场景 |
|---|---|---|---|---|
| [如:text-embedding-3-small] | 1,536 | 8K tokens | ¥[X]/M tokens | [通用场景,性价比高] |
| [如:text-embedding-3-large] | 3,072 | 8K tokens | ¥[X]/M tokens | [高精度场景,成本敏感] |
| [如:bge-large-zh-v1.5] | 1,024 | 512 tokens | 免费(自建) | [中文场景优化,本地部署] |
| [如:gte-Qwen2-1.5B] | 1,536 | 32K tokens | 免费(自建) | [长文本、中英双语] |
4.2 向量存储
| 方案 | 索引类型 | 支持混合检索 | 说明 |
|---|---|---|---|
| [如:Pinecone] | [HNSW] | [是/否] | [托管服务,免运维] |
| [如:Milvus] | [IVF_FLAT / HNSW] | [是] | [自建,适合大规模] |
| [如:Qdrant] | [HNSW] | [是] | [轻量级,支持过滤] |
| [如:pgvector] | [IVFFlat / HNSW] | [否] | [PostgreSQL 插件,小规模] |
4.3 Embedding 策略
- 多向量策略:[如:同一文本块使用多个 embedding 模型,查询时加权融合]
- 降维策略:[如:默认 1,536 维,支持通过 PCA 降至 256 维]
- 缓存策略:[如:常见查询 embedding 结果缓存 1 小时]
- 刷新频率:[如:知识库更新时重新计算 embedding]
5. 混合检索策略
5.1 检索 Pipeline
用户查询 → 查询重写 → 多路检索 → 重排序 → Top-K 返回5.2 检索算法
| 检索路 | 算法 | 权重 | 说明 |
|---|---|---|---|
| 稠密检索 (Dense) | [向量相似度 (Cosine / IP)] | [如:0.6] | [语义匹配,主要路] |
| 稀疏检索 (Sparse) | [BM25 / SPLADE] | [如:0.3] | [关键词匹配,补充路] |
| 混合检索 (Hybrid) | [RRF (Reciprocal Rank Fusion)] | [按 rank 融合] | [融合稠密+稀疏结果] |
| 元数据过滤 | [结构化查询] | [前置过滤] | [按时间/来源/作者筛选] |
5.3 查询优化
| 优化手段 | 说明 |
|---|---|
| 查询重写 | [LLM 将用户口语化问题转为检索友好表达] |
| 查询扩写 | [使用同义词 / 相关术语扩展查询范围] |
| 消歧 | [用户多次查询后,结合上下文做消歧] |
| HyDE | [先生成假设答案,再检索相似文档] |
| 多轮检索 | [首轮粗略检索 → 分析后做精细检索] |
5.4 重排序 (Reranking)
- 使用的 Re-ranker:[如:Cohere Rerank / BGE-Reranker / Cross-Encoder]
- 重排序 Top-K:[如:取检索 Top 50 → 重排序后取 Top 5]
- 重排序指标:[如:NDCG@5 ≥ 0.8]
6. 引用溯源设计
6.1 引用格式
[回答正文]
引用来源:
- 📄 [文档标题] — [来源路径] — [页数/位置] — [可信度: 高]
- 📄 [文档标题] — [来源路径] — [页数/位置] — [可信度: 中]
6.2 溯源粒度
| 粒度级别 | 说明 | 示例 |
|---|---|---|
| 文档级 | [仅标注来自哪篇文档] | [来源:员工手册 v3.pdf] |
| 章节级 | [标注具体章节] | [来源:员工手册 → 第四章 薪酬福利] |
| 段落级 | [标注具体段落] | [来源:员工手册 → 4.2 节 第 3 段] |
| 行级 | [标注具体行号] | [来源:config.yaml: 第 25-30 行] |
6.3 引用交互
- [交互 1]:点击引用跳转到源文档对应位置
- [交互 2]:悬停引用时展示源文档片段预览
- [交互 3]:用户可选择只看某一个来源的回答
- [交互 4]:来源可信度标识(高/中/低 + 原因说明)
6.4 无引用策略
- 无引用回答:当检索结果不足以支撑回答时:[告知用户 / 拒绝回答 / 注明"推测"]
- 多源冲突:不同来源信息冲突时:[并列展示 + 标注差异 + 建议人工确认]
7. 非功能需求
7.1 性能
| 阶段 | P50 延迟 | P99 延迟 |
|---|---|---|
| 文档处理/索引 | ≤ [X] 秒/文档 | ≤ [Y] 秒/文档 |
| 检索(不含生成) | ≤ [X] ms | ≤ [Y] ms |
| 检索+生成 (E2E) | ≤ [X] 秒 | ≤ [Y] 秒 |
7.2 存储容量
| 存储项 | 预估规模 | 存储方案 |
|---|---|---|
| 原始文档 | [X] TB | [如:S3 / OSS] |
| 向量索引 | [X] GB | [如:Milvus 集群] |
| 结构化元数据 | [X] GB | [如:PostgreSQL] |
| 全文索引 | [X] GB | [如:Elasticsearch] |
7.3 隐私与权限
- 文档级权限:[如:用户只能检索自己有权限的文档]
- 检索结果过滤:[如:根据用户角色过滤不可见的片段]
- 审计日志:[如:记录每次检索的用户、查询内容、返回来源]
- 数据隔离:[如:多租户环境下的知识库完全隔离]
8. 实施路线图
| 里程碑 | 时间 | 交付物 | 负责人 |
|---|---|---|---|
| M1:MVP 检索 | YYYY-MM-DD | 单知识源 + 向量检索 + 基础回答 | [姓名] |
| M2:混合检索 | YYYY-MM-DD | BM25 + 稠密混合 + 重排序 | [姓名] |
| M3:引用溯源 | YYYY-MM-DD | 段落级引用 + 来源跳转 | [姓名] |
| M4:多知识源 | YYYY-MM-DD | 多格式支持 + 增量更新 | [姓名] |
| M5:企业版 | YYYY-MM-DD | 权限管理 + 审计 + 多租户 | [姓名] |
9. 风险与缓解
| 风险 | 概率 | 影响 | 缓解措施 |
|---|---|---|---|
| [检索质量不达标] | [高/中/低] | [高/中/低] | [如:多轮迭代分块策略 + 专家标注评测集] |
| [知识更新延迟] | [高/中/低] | [高/中/低] | [如:事件驱动的增量索引,设置最大延迟告警] |
| [幻觉 + 引用不匹配] | [高/中/低] | [高/中/低] | [如:强制要求引用对应原文,无引用不回答] |
| [大规模向量存储成本] | [高/中/低] | [高/中/低] | [如:量化压缩 + 淘汰低频文档 + 分层存储] |
10. 附录
10.1 相关文档
- [分块策略实验报告]
- [Embedding 模型基准测试]
- [混合检索参数调优记录]
10.2 术语表
| 术语 | 定义 |
|---|---|
| RAG (检索增强生成) | [将检索到的相关文档片段作为上下文输入 LLM 来生成回答] |
| Chunk | [知识库中最小检索单元] |
| HyDE | [假设文档嵌入,先生成假设答案再用它检索] |
| RRF | [倒数排名融合,混合检索结果的融合算法] |
10.3 变更日志
| 版本 | 日期 | 变更内容 | 作者 |
|---|---|---|---|
| v0.1.0 | YYYY-MM-DD | 初稿创建 | [姓名] |