AI 知识库
这篇解决什么
知识库、文档、段落三张表怎么切、向量写到哪。读完能对上 embeddingModelId 和 vectorId,不要在对话表里找切片。
默认端口 48080。先有一条 type=5 的向量模型,见 AI 功能设计。
示意图:库级指定 embedding。段落写入向量库后回填 vectorId。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 知识库 | @RequestMapping("/ai/knowledge") | ruoyi-office/yudao-module-ai/.../controller/admin/knowledge/AiKnowledgeController.java |
| 文档 | /ai/knowledge/document | AiKnowledgeDocumentController |
| 段落 | /ai/knowledge/segment | AiKnowledgeSegmentController |
| 切分预览 | GET /segment/split | 同上 |
| 检索测试 | GET /segment/search | 同上 |
| 库表 | ai_knowledge | AiKnowledgeDO |
| 文档表 | ai_knowledge_document | AiKnowledgeDocumentDO |
| 段落表 | ai_knowledge_segment | AiKnowledgeSegmentDO |
| 管理端 | 库 / 文档 / 检索 | ruoyi-office-vben/apps/web-antd/src/views/ai/knowledge/ |
官方菜单:AI 知识库 2915。权限 ai:knowledge:query / create / update / delete。
AiDocumentSplitStrategyEnum:auto、token、paragraph、markdown_qa、semantic。向量库在 spring.ai.vectorstore 配 Redis / Qdrant / Milvus 之一。检索走 getOrCreateVectorStore(embeddingModelId)。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
embeddingModelId | 必须是向量模型 | AiKnowledgeDO |
topK / similarityThreshold | 召回条数、相似度 | 同上 |
segmentMaxTokens | 文档切片上限 | AiKnowledgeDocumentDO |
vectorId | 向量库主键 | AiKnowledgeSegmentDO |
retrievalCount | 被检索次数 | 文档、段落都有 |
聊天角色的 knowledgeIds 引用本库。命中段落 id 写到 ai_chat_message.segmentIds。
没有向量库就建不了索引
只配对话模型、不配 type=5 或 VectorStore,文档能上传,段落没有 vectorId,对话也召不回。
先检索页再绑角色
GET /ai/knowledge/segment/search 能出结果,再把库 id 填进角色。阈值太高会全空。
按本仓库 DO 生成的 ER。
配置与操作
走 AI 知识库(2915)。新建库必须填 embeddingModelId(type=5 的向量模型),以及 topK、similarityThreshold。上传文档后切分,段落写入向量库再回填 vectorId。权限 ai:knowledge:query / create / update / delete。
没有 VectorStore 或向量模型时,文档能上传,段落没有 vectorId,对话召不回。先用 GET /ai/knowledge/segment/search 能出结果,再把库 id 填进角色 knowledgeIds。文档切片上限是 segmentMaxTokens。
