向量知识库产品实战操作手册
如果要从零搭一个企业级向量知识库产品,每一步该做什么、怎么选——这是一份可执行的决策清单。
向量库RAG产品设计实战
本文从"如果要创建一个企业级向量知识库产品"的视角,梳理每一步该做什么、用到什么原理。
阶段一:基础设施选型
步骤1:选择向量库
要做的事:
- 评估数据规模(当前 + 未来3年预估)
- 确认数据安全要求(能否上云)
- 评估团队运维能力
- 确认已有技术栈
决策输出:
| 场景 | 推荐 |
|---|---|
| 国内B端、千万级、有运维团队 | Milvus |
| 团队小、百万级、快速上线 | Qdrant |
| 已有 PostgreSQL、向量搜索非核心 | pgvector |
| 原型验证阶段 | Chroma |
此决策影响后续所有环节,变更成本高。
步骤2:选择向量模型
要做的事:
- 确认主要语言(纯中文 / 中英混合)
- 确认部署方式(本地 / API)
- 评估维度与成本的平衡
- 用实际业务数据做小规模测试,对比几个候选模型的检索效果
决策输出:
| 场景 | 推荐 |
|---|---|
| 纯中文、私有化部署 | bge-large-zh(1024维) |
| 中英混合、私有化部署 | bge-m3(1024维) |
| 可接受数据出外网 | OpenAI text-embedding-3-small(1536维) |
一旦选定,迁移 = 全部数据重新向量化,成本极高。
步骤3:选择 Chat 模型
要做的事:
- 确认生成质量要求
- 确认部署方式(本地 / API)
- 向量模型和 Chat 模型通常独立部署,可分别选型
决策输出示例:
- 私有化 + 质量要求高:本地部署 ChatGLM / Qwen + GPU 服务器
- 可上云:Claude API / OpenAI API
阶段二:数据工程
步骤4:数据源接入
要做的事:
- 盘点所有需要接入的数据源(OA、文档系统、数据库、邮件等)
- 为每种数据源确定解析方式
- 设计增量同步机制(什么时候同步、怎么发现数据变更)
各数据源的解析方式:
| 数据源 | 解析方式 | 难度 |
|---|---|---|
| Markdown | 直接读文本 | 低 |
| PDF 解析库,扫描件需 OCR | 中~高 | |
| Word/Excel | docx/xlsx 库提取 | 中 |
| 数据库记录 | 拼成自然语言再向量化 | 中 |
| 网页 | 爬取 HTML,清理标签 | 中 |
| 图片 | OCR 识别文字 | 高 |
步骤5:设计元数据结构
要做的事:
- 根据业务需求确定每条数据需要带哪些元数据
- 区分自动生成的和需要业务系统提供的
典型的元数据结构:
{
"source": "文件名或数据来源",
"chunk_index": 0,
"department": "华东销售部",
"doc_type": "审批/报告/制度",
"author": "张三",
"created_date": "2024-10-15",
"access_level": "部门内/全公司/机密"
}元数据结构一旦定了不容易改(历史数据要补字段),需要前期充分讨论。
步骤6:设计切片策略
要做的事:
- 按知识库(或文档类型)分别确定切片策略
- 切片长度不能超过向量模型的最大输入长度
决策参考:
| 文档类型 | 推荐策略 | 参数参考 |
|---|---|---|
| 通用文档 | 递归切片 | 300-500字,重叠50-100字 |
| 规章制度 | 按条款/章节切 | 以自然分隔符为边界 |
| 对话记录 | 按轮次切 | 一问一答为一个切片 |
| API文档 | 按接口/函数切 | 每个接口定义为一个切片 |
| 结构不规则的内容 | 语义切片 | 相似度阈值约0.5 |
验证方式: 准备 20-30 个真实测试问题,每种策略跑一遍对比效果。
步骤7:设计隔离策略
要做的事:
- 确定哪些业务需要应用隔离(不同集合)
- 确定集合内部用元数据做数据隔离的规则
- 多租户场景是否需要物理隔离
决策参考:
| 隔离需求 | 方式 | 实现 |
|---|---|---|
| 不同业务模块 | 应用隔离 | 不同 Collection |
| 同一模块内不同用户权限 | 数据隔离 | 元数据过滤 |
| 不同客户/租户 | 物理隔离 | 独立向量库实例 |
应用隔离不只是为了安全,还影响搜索质量、索引效率、运维灵活性。
阶段三:检索与生成
步骤8:配置检索策略
完整检索流水线:
用户提问
│
▼
⓪ 元数据过滤(缩小搜索范围)
│ 只保留符合条件的文档子集
│
├──────────────┐
▼ ▼
① 向量检索 ② BM25 检索
语义召回 关键词召回
Top 20 Top 20
│ │
└──────┬───────┘
▼
③ RRF 融合排序(合并多路结果,统一打分)
│
▼
④ 规则加权(可选,业务逻辑调分)
│
▼
⑤ Rerank 模型精排(可选,逐条精读重排)
│
▼ Top 3
⑥ 喂给 LLM 生成回答
各环节说明:
| 顺序 | 环节 | 靠什么实现 | 必须吗 |
|---|---|---|---|
| ⓪ | 元数据过滤 | 向量库原生能力(WHERE 条件) | 可选,有元数据时建议开启 |
| ① | 向量检索 | Embedding 模型(如 bge-large-zh-v1.5) | 必须 |
| ② | BM25 关键词检索 | 经典算法,无需模型 | 建议开启(与向量互补) |
| ③ | RRF 融合排序 | 经典算法,无需模型 | 多路召回时自动使用 |
| ④ | 规则加权 | 自定义代码逻辑 | 可选,需自建程序 |
| ⑤ | Rerank 模型 | Rerank 模型(如 bge-reranker-v2-m3) | 可选,追求高精度时开启 |
多路召回的价值(为什么不只用向量检索):
- 向量检索擅长语义理解:用户问"怎么处理表格数据" → 能找到"Excel读写"相关文档
- BM25 擅长精确匹配:用户问"pandas read_excel 报错 FileNotFoundError" → 精准命中含该报错的文档
- 两路互补盲区,RRF 融合后效果优于任何单路
Dify 中的对应关系:
| Dify 检索模式 | 实际覆盖的环节 |
|---|---|
| 向量检索 | 仅 ① |
| 全文检索 | 仅 ② |
| 混合检索 | ① + ② + ③ |
| 混合检索 + Rerank | ① + ② + ③ + ⑤ |
决策参考:
| 场景 | 推荐配置 | Dify 设置 |
|---|---|---|
| 基础版 | 纯向量搜索,Top 5 | 向量检索 |
| 标准版 | 向量 + 关键词多路召回,Top 5 | 混合检索(语义 0.7 / 关键词 0.3) |
| 高精度版 | 多路召回 + Rerank,Top 3 | 混合检索 + Rerank 模型 |
步骤9:设计 Prompt 模板
要做的事:
- 设计把检索结果拼入 Prompt 的模板
- 设定回答规则(引用来源、不编造、格式要求)
- 根据不同业务场景可能需要不同模板
基础模板示例:
请根据以下参考资料回答用户的问题。
要求:
1. 只基于参考资料中的内容回答,不要编造
2. 如果资料不足以回答,请说明
3. 回答时引用来源文件名
参考资料:
{检索到的切片内容}
用户问题:{用户的问题}
步骤10:多集合路由(如需要)
要做的事:
- 确定路由方式(用户手选 / 规则路由 / 大模型判断)
- 如果用大模型判断,设计路由 Prompt
- 确保所有集合使用同一个向量模型(否则相似度分数不可比较)
阶段四:产品化(待深入)
步骤11:效果评估体系
- 搜索准确率怎么衡量
- 测试集怎么建
- 持续优化闭环
步骤12:数据同步与运维
- 增量同步机制
- 监控与告警
- 备份与恢复
步骤13:性能调优
- 索引参数调优
- 分片与扩容
- 缓存策略
快速索引:遇到问题查哪里
| 问题 | 查哪里 |
|---|---|
| 搜索结果不准 | 步骤6(切片策略)→ 步骤8(检索策略)→ 步骤2(模型选择) |
| 搜索太慢 | 步骤1(向量库选型)→ 步骤13(性能调优) |
| 不同业务数据互相干扰 | 步骤7(隔离策略) |
| 数据更新后搜不到新内容 | 步骤12(数据同步) |
| 回答质量差但搜索结果对 | 步骤9(Prompt 模板)→ 步骤3(Chat 模型选择) |
| 成本太高 | 步骤2(模型维度)→ 检索策略(Top K 数量) |