知识库设计、文档管理和检索调优的实践建议,以及常见错误速查和不可逆操作清单。
知识库设计
Embedding 模型选型
Embedding 模型决定了向量检索的语义理解能力,创建后不可修改,是创建知识库前最重要的决策。
场景 | 建议 |
通用中英文场景 |
|
已有自研模型 | 使用 |
维度选择 | 维度越高语义表达越丰富,但存储和计算成本也越高。1024 维是大多数场景的推荐选择 |
Metadata Schema 设计
metadata 字段在创建知识库时定义,创建后不可增删。设计时遵循以下原则:
提前规划:梳理所有可能用于过滤检索结果的维度(分类、时间、作者、版本、部门等),创建时一次性定义。
选择正确的类型:日期用
date类型(而非string),数值用long或double,以支持范围过滤(greaterThanOrEquals等)。说明date支持的格式:yyyy-MM-dd、yyyy-MM-dd HH:mm:ss、yyyy-MM-dd HH:mm:ss.SSS、yyyyMMdd HHmmss、yyyy-MM-dd'T'HH:mm:ss控制字段数量:最多支持 200 个字段,但建议只定义实际需要的字段。
注意总大小限制:所有 metadata 的 key + value 合计不超过 4KB。避免在 metadata 中存储大段文本。
Subspace 规划
场景 | 推荐方案 | 原因 |
多租户 SaaS,租户数据同质 | Subspace | 共享 Embedding 配置,管理成本低,支持跨租户联合检索 |
不同业务线,数据异构 | 多知识库 | 不同业务可能需要不同的 Embedding 模型和 metadata schema |
租户数量极大(万级以上) | Subspace | 避免创建过多知识库,Subspace 无数量上限 |
文档管理
大批量文档导入
单次 AddDocuments 最多 10 个文档。大批量导入时建议:
分批上传:每批 10 个文档,按批次串行调用 AddDocuments。
控制并发:注意 QPS 限制,避免触发限流。
异步等待:所有批次上传完成后,统一轮询文档状态,而非每上传一批就等待完成。
错误处理:逐个检查每个文档的
status,对failed的文档记录失败原因,修正后重试。
OSS 文件准备
确保 OSS Bucket 已授权给知识库服务读写权限。授权方式参见快速开始中的前置准备。
单文件不超过 50MB。
使用
inclusionFilters和exclusionFilters在 OSS 目录级别批量导入,支持首尾*通配符(如*.pdf、*report*)。
文档状态轮询
正常情况下文档上传后无需主动轮询,系统会自动完成索引。如需严格确认文档是否已索引完成,建议采用指数退避策略。
配置项 | 建议值 |
初始间隔 | 3 秒 |
退避倍数 | 2(每次翻倍:3s → 6s → 12s → ...) |
最大间隔 | 30 秒 |
终止条件 |
|
文档处理时间受文件大小、类型和数量影响,小文件通常几秒完成,大文件或批量导入可能需要数分钟。退避策略在等待时间不确定时比固定间隔更合理:短文件快速返回,长文件不会频繁轮询浪费资源。
检索调优
检索类型选择
场景 | 推荐检索类型 | 说明 |
用自然语言提问 |
| 向量捕捉语义,全文保障关键词命中 |
输入精确关键词或编号 | 优先 | 向量检索对精确匹配不敏感 |
纯语义理解场景 | 优先 | 如“怎么安装”匹配到“部署步骤” |
Rerank 策略选择
策略 | 优点 | 缺点 | 适用场景 |
WEIGHT | 精细控制两路检索贡献比例 | 需要手动调参 | 对某一路检索有明确偏好,推荐作为默认选择 |
RRF | 无需额外模型调用,延迟低,效果稳定 | 无法利用查询-文档交互信息 | 通用场景 |
MODEL | 排序质量最高 | 额外延迟和计算成本 | 对排序质量要求极高的场景 |
numberOfResults 调优
检索流程中有三层 numberOfResults:
N1(
denseVectorSearchConfiguration.numberOfResults):向量检索召回数N2(
fullTextSearchConfiguration.numberOfResults):全文检索召回数N3(
rerankingConfiguration.numberOfResults):Rerank 后最终返回数
N1 和 N2 决定候选池大小,N3 决定最终返回的结果数。推荐起始配置:N1 = N2 = 20,N3 = 5–10。
Metadata Filter 使用建议
Filter 在检索前缩小候选范围,同时提升精度和性能。
过滤字段必须在创建知识库时定义为 metadata。
对日期范围过滤,使用
date类型以支持范围比较。
常见错误速查
错误码 | 含义 | 常见原因 | 解决方案 |
| 参数校验失败 | 字段类型不匹配、超出长度限制、缺少必填字段 | 检查请求参数是否符合规范 |
| 资源不存在 | 知识库名称拼写错误或已被删除 | 确认资源名称和id是否存在 |
| 请求格式错误 | JSON 格式不合法 | 检查请求体 JSON 格式 |
| 业务校验失败 | RRF 的 k 值为 0、检索参数不合法 | 检查参数取值范围 |
HTTP 200 + | 请求成功但文档处理失败 | metadata 格式不匹配(如日期格式错误) | 逐个检查 |
AddDocuments、DeleteDocuments 和 UpdateChunks 的响应中,HTTP 200 + code: SUCCESS 不代表所有条目都处理成功。每个条目有独立的 status 字段,必须逐个检查。
日期格式
metadata 中 date 类型支持以下格式:
格式 | 示例 |
|
|
|
|
|
|
|
|
|
|
使用不支持的日期格式会导致 AddDocuments 时文档状态为 failed。
不可逆操作清单
以下操作一旦执行无法撤销:
操作 | 影响范围 | 可否恢复 |
DeleteKnowledgeBase | 删除知识库及其下所有 Document 和 Chunk 数据 | 不可恢复 |
DeleteDocuments | 删除指定文档及其所有切片 | 不可恢复 |
embeddingConfiguration | 创建后不可修改 | 需删除重建知识库 |
metadata schema | 创建后不可增删字段定义 | 需删除重建知识库 |
subspace 开关 | 创建后不可修改 | 需删除重建知识库 |
UpdateDocument metadata | 覆盖式更新,原有值被全量替换 | 需重新传入完整 metadata |