知识库与文档
知识库是文档的容器。一个知识库对应一组文档和分块,检索时不会跨库。
新建知识库后进详情页上传文档。上传是 multipart 请求:服务端先把文件落盘,再入队,请求立刻返回。
之后由 worker 做四件事:解析、切分、向量化、写索引。页面上的文档状态会跟着变:
queued:已入队,等 workerprocessing:worker 正在处理ready:可以检索failed:处理失败,详情里有错误
单份文档的处理上限是 30 分钟,worker 同时处理 10 个任务。超过上限或 worker 没起,文档会停在队列里。
v5.0.2 只接受 .md、.markdown、.txt,大小写不敏感。服务端也按扩展名白名单拒绝其他类型。
PDF、Word、HTML 需要你先转成 Markdown 或纯文本。仓库里没有内置这些格式的解析器。
两种入口:
- 单份文档:文档详情里的重新索引。
- 整个知识库:知识库详情里的重新索引。
换过 embedding 模型、或者某份文档处理失败时用。重新索引会重新切分、重新向量化;旧分块会被替换。
整个知识库重跑可能很久,注意 worker 的并发和模型服务的限流。
POST /api/v1/knowledge-bases/{id}/search 直接返回命中的分块、相似度和文件名。它不经过对话,也不调用 chat 模型。
回答不对时先看这里:
- 没有命中:文档没进库、切分不合适、或者 embedding 模型不对。
- 命中了但排序不对:问题表述和文档用词差太远,或者 topK 太小。
- 命中是对的,但回答没用上:问题在上下文组装或模型,不在检索。
这个接口是只读的,不会改数据。
删文档会删掉数据库记录和磁盘上的原始文件;删知识库会级联删掉它下面的文档和分块。操作不可撤销,删之前先确认备份。