1554 lines
55 KiB
Markdown
1554 lines
55 KiB
Markdown
# RuoYi Knowledge 模块
|
||
|
||
## 概述
|
||
|
||
RuoYi Knowledge 模块是一个智能知识库管理系统,提供知识库的创建、管理、向量化处理和智能检索功能。该模块支持多种文档格式,具备强大的向量搜索能力,为AI问答系统提供知识基础。
|
||
|
||
## 目录结构
|
||
|
||
```
|
||
ruoyi-knowledge/
|
||
├─ src/main/java/org/dromara/knowledge/
|
||
│ ├─ data/ # 文档解析与数据清洗(PDF/Word/Excel等)
|
||
│ ├─ embedding/ # 文本向量化引擎接口(多模型可插拔)
|
||
│ ├─ retrieval/ # 检索器与索引更新(支持多后端)
|
||
│ ├─ generation/ # 响应生成(LLM集成与后处理)
|
||
│ ├─ version/ # 版本管理与回滚接口
|
||
│ └─ config/ # RAG 配置属性(rag.*)
|
||
├─ docs/ # API/设计/配置文档
|
||
└─ src/test/java/org/dromara/knowledge/
|
||
├─ unit/ # 单元测试
|
||
├─ integration/ # 集成测试
|
||
└─ mock/ # 测试用 Mock 数据
|
||
```
|
||
|
||
## 核心特性
|
||
|
||
### 📚 知识库管理
|
||
|
||
- ✅ 知识库创建和配置(名称、描述、向量模型、分片参数等)
|
||
- ✅ 知识库列表查询(分页、筛选)
|
||
- ✅ 知识库信息更新和删除
|
||
- ✅ 知识库状态查询
|
||
- ✅ 用户知识库列表查询
|
||
- ✅ 知识库公开/私有设置
|
||
|
||
### 📄 文档处理
|
||
|
||
- ✅ 文档上传(单文件、批量上传)
|
||
- ✅ 多格式文档支持(PDF、Word、TXT、Markdown、Excel、CSV、HTML等)
|
||
- ✅ 自动文档解析(通过DocumentParser接口,支持多种格式)
|
||
- ✅ 智能分片处理(可配置分片大小、重叠字符数)
|
||
- ✅ 文档解析状态跟踪(拆解图片状态、分析图片状态、向量化状态)
|
||
- ✅ 文档列表查询和管理
|
||
|
||
### 📑 知识片段管理
|
||
|
||
- ✅ 片段列表查询(分页、筛选)
|
||
- ✅ 片段信息查询和管理
|
||
- ✅ 片段创建、更新、删除
|
||
- ✅ 根据知识库/文档ID查询片段列表
|
||
|
||
### ⚡ 向量化处理
|
||
|
||
- ✅ 向量生成(单片段、批量生成)
|
||
- ✅ 多种嵌入模型支持(通过EmbeddingEngine接口,支持模型扩展)
|
||
- ✅ 文档批量向量化
|
||
- ✅ 向量列表查询和管理
|
||
- ✅ 向量索引重建
|
||
- ✅ 向量统计信息查询
|
||
|
||
### 🔍 智能检索
|
||
|
||
- ✅ 基于向量的语义搜索(向量相似度搜索)
|
||
- ✅ 相似度排序
|
||
- ✅ 检索结果过滤(按文档去重)
|
||
- ✅ 检索器接口可插拔(`Retriever`),默认实现调用向量服务
|
||
- ✅ 检索命中日志记录和分析
|
||
|
||
### 📊 任务管理
|
||
|
||
- ✅ 任务创建和查询(支持多种任务类型:upload、process、delete、export、embedding、sync)
|
||
- ✅ 任务状态跟踪(等待、进行中、成功、失败、暂停)
|
||
- ✅ 任务进度管理(进度百分比、总项目数、已处理项目数等)
|
||
- ✅ 任务重试机制(重试次数、最大重试次数)
|
||
- ✅ 任务错误信息记录
|
||
- ✅ 任务通知机制(通知URL、通知状态)
|
||
|
||
### 💡 提示词模板管理
|
||
|
||
- ✅ 模板创建和配置
|
||
- ✅ 模板列表查询(分页、筛选)
|
||
- ✅ 模板更新和删除
|
||
- ✅ 按分类查询模板(knowledge、chat、draw)
|
||
- ✅ 按模板名称查询
|
||
|
||
### 🎯 数据模型管理
|
||
|
||
- ✅ 模型分组管理(分组创建、查询、更新、删除)
|
||
- ✅ 数据模型管理(模型创建、查询、更新、删除)
|
||
- ✅ 模型字段管理(字段创建、查询、更新、删除)
|
||
- ✅ 灵活的Schema定义(字段类型、属性配置)
|
||
- ✅ 字段类型支持(文本、数字、日期等)
|
||
- ✅ 字段属性配置(是否主键、是否必填、是否唯一、默认值、长度等)
|
||
- ✅ 字段显示配置(是否列表显示、是否查询字段、是否插入字段、是否编辑字段)
|
||
- ✅ 查询方式配置(EQ、NE、GT、LT、LIKE、BETWEEN)
|
||
- ✅ 显示类型配置(input、textarea、select、checkbox、radio、datetime、image、upload、editor)
|
||
- ✅ 字典类型支持
|
||
|
||
### 👥 角色与权限管理
|
||
|
||
- ✅ 角色组管理(Service层已实现)
|
||
- ✅ 角色管理(Service层已实现)
|
||
- ✅ 角色与知识库关联管理(Service层已实现)
|
||
- ⚠️ 角色管理Controller(待实现,目前只有Service层)
|
||
|
||
### 📈 检索日志与分析
|
||
|
||
- ✅ 命中日志记录(记录每次检索的详细信息)
|
||
- ✅ 命中日志查询(按知识库、会话、片段、查询文本筛选)
|
||
- ✅ 热门查询统计
|
||
- ✅ 平均响应时间分析
|
||
- ✅ 日志导出功能
|
||
|
||
### 🔧 RAG架构组件
|
||
|
||
- ✅ 文档解析器接口(`DocumentParser`)及多种实现(PDF、Word、Excel、Text、Markdown、CSV、HTML)
|
||
- ✅ 向量化引擎接口(`EmbeddingEngine`)及HTTP实现(`HttpEmbeddingService`)
|
||
- ✅ 检索器接口(`Retriever`)及默认实现(`DefaultRetriever`)
|
||
- ✅ 索引更新器接口(`IndexUpdater`)及默认实现(`DefaultIndexUpdater`)
|
||
- ✅ 响应生成器接口(`Generator`)及默认实现(`DefaultGenerator`)
|
||
- ✅ 版本管理器接口(`VersionManager`)及默认实现(`DefaultVersionManager`)
|
||
- ✅ 向量存储服务接口(`VectorStoreService`)及多种实现(`DbVectorStoreService`、`QdrantVectorStoreService`、`WeaviateVectorStoreService`)
|
||
|
||
## 架构设计
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────┐
|
||
│ Knowledge Controller Layer │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ KnowledgeInfoController │ KnowledgeAttachController │
|
||
│ KnowledgeFragmentController │ KnowledgeSchemaController │
|
||
│ KnowledgeRoleController │ KnowledgeVectorController │
|
||
└─────────────────────┬───────────────────────────────────────┘
|
||
│
|
||
┌─────────────────────▼───────────────────────────────────────┐
|
||
│ Service Layer │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ KnowledgeInfoService │ KnowledgeAttachService │
|
||
│ KnowledgeFragmentService │ KnowledgeSchemaService │
|
||
│ KnowledgeVectorService │ KnowledgeRoleService │
|
||
└─────────────────────┬───────────────────────────────────────┘
|
||
│
|
||
┌─────────────────────▼───────────────────────────────────────┐
|
||
│ Processing Layer │
|
||
├─────────────────────────────────────────────────────────────┤
|
||
│ Document Parser │ Vector Processor │ Search Engine │
|
||
│ Embedding Models │ Index Manager │ Cache Manager │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## 主要组件
|
||
|
||
### 控制器 (Controllers)
|
||
|
||
#### KnowledgeInfoController
|
||
|
||
知识库信息管理控制器,路径:`/knowledge/info`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/info/list` - 查询知识库信息列表(分页,支持筛选)
|
||
- `POST /knowledge/info/export` - 导出知识库信息列表(需要权限 `knowledge:info:export`)
|
||
- `GET /knowledge/info/{knowledgeId}` - 获取知识库信息详细信息(需要权限 `knowledge:info:query`)
|
||
- `POST /knowledge/info` - 新增知识库信息(需要权限 `knowledge:info:add`)
|
||
- `PUT /knowledge/info` - 修改知识库信息(需要权限 `knowledge:info:edit`)
|
||
- `DELETE /knowledge/info/{knowledgeIds}` - 删除知识库信息(需要权限 `knowledge:info:remove`)
|
||
- `GET /knowledge/info/user/{userId}` - 根据用户ID查询知识库信息列表(需要权限 `knowledge:info:query`)
|
||
- `GET /knowledge/info/knowledge/{knowledgeId}` - 根据知识库ID查询知识库信息(需要权限 `knowledge:info:query`)
|
||
- `POST /knowledge/info/{knowledgeId}/upload` - 上传文档到知识库(需要权限 `knowledge:info:upload`)
|
||
- `POST /knowledge/info/{knowledgeId}/batch-upload` - 批量上传文档到知识库(需要权限 `knowledge:info:upload`)
|
||
- `POST /knowledge/info/{knowledgeId}/search` - 检索知识库(需要权限 `knowledge:info:search`)
|
||
- `GET /knowledge/info/{knowledgeId}/status` - 获取知识库处理状态(需要权限 `knowledge:info:query`)
|
||
|
||
#### KnowledgeAttachController
|
||
|
||
知识库附件管理控制器,路径:`/knowledge/attach`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/attach/list` - 查询知识库附件列表(分页,需要权限 `knowledge:attach:list`)
|
||
- `POST /knowledge/attach/export` - 导出知识库附件列表(需要权限 `knowledge:attach:export`)
|
||
- `GET /knowledge/attach/{attachId}` - 获取知识库附件详细信息(需要权限 `knowledge:attach:query`)
|
||
- `POST /knowledge/attach` - 新增知识库附件(需要权限 `knowledge:attach:add`)
|
||
- `PUT /knowledge/attach` - 修改知识库附件(需要权限 `knowledge:attach:edit`)
|
||
- `DELETE /knowledge/attach/{attachIds}` - 删除知识库附件(需要权限 `knowledge:attach:remove`)
|
||
- `GET /knowledge/attach/knowledge/{knowledgeId}` - 根据知识库ID查询附件列表(需要权限 `knowledge:attach:query`)
|
||
- `GET /knowledge/attach/document/{documentId}` - 根据文档ID查询附件信息(需要权限 `knowledge:attach:query`)
|
||
|
||
#### KnowledgeFragmentController
|
||
|
||
知识库片段管理控制器,路径:`/knowledge/fragment`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/fragment/list` - 查询知识库片段列表(分页,需要权限 `knowledge:fragment:list`)
|
||
- `POST /knowledge/fragment/export` - 导出知识库片段列表(需要权限 `knowledge:fragment:export`)
|
||
- `GET /knowledge/fragment/{fragmentId}` - 获取知识库片段详细信息(需要权限 `knowledge:fragment:query`)
|
||
- `POST /knowledge/fragment` - 新增知识库片段(需要权限 `knowledge:fragment:add`)
|
||
- `PUT /knowledge/fragment` - 修改知识库片段(需要权限 `knowledge:fragment:edit`)
|
||
- `DELETE /knowledge/fragment/{fragmentIds}` - 删除知识库片段(需要权限 `knowledge:fragment:remove`)
|
||
- `GET /knowledge/fragment/knowledge/{knowledgeId}` - 根据知识库ID查询片段列表(需要权限 `knowledge:fragment:query`)
|
||
- `GET /knowledge/fragment/document/{documentId}` - 根据文档ID查询片段列表(需要权限 `knowledge:fragment:query`)
|
||
- `GET /knowledge/fragment/fragment/{fragmentId}` - 根据片段ID查询片段信息(需要权限 `knowledge:fragment:query`)
|
||
|
||
#### KnowledgeVectorController
|
||
|
||
向量管理控制器,路径:`/knowledge/vector`
|
||
|
||
**主要接口:**
|
||
|
||
- `POST /knowledge/vector/generate` - 生成向量(批量生成片段向量)
|
||
- `POST /knowledge/vector/search` - 向量搜索(向量相似度搜索,支持按文档去重)
|
||
- `GET /knowledge/vector/stats/{knowledgeId}` - 向量统计(获取向量统计信息)
|
||
- `POST /knowledge/vector/rebuild/{knowledgeId}` - 重建索引(重建向量索引)
|
||
- `POST /knowledge/vector/vectorize-doc` - 文档批量向量化(对文档的所有片段进行向量化)
|
||
- `GET /knowledge/vector/list` - 查询知识库向量列表(分页,需要权限 `knowledge:vector:list`)
|
||
- `POST /knowledge/vector/export` - 导出知识库向量列表(需要权限 `knowledge:vector:export`)
|
||
- `GET /knowledge/vector/{vectorId}` - 获取知识库向量详细信息(需要权限 `knowledge:vector:query`)
|
||
- `POST /knowledge/vector` - 新增知识库向量(需要权限 `knowledge:vector:add`)
|
||
- `PUT /knowledge/vector` - 修改知识库向量(需要权限 `knowledge:vector:edit`)
|
||
- `DELETE /knowledge/vector/{vectorIds}` - 删除知识库向量(需要权限 `knowledge:vector:remove`)
|
||
- `GET /knowledge/vector/fragment/{fragmentId}` - 根据片段ID查询向量列表(需要权限 `knowledge:vector:query`)
|
||
- `GET /knowledge/vector/knowledge/{knowledgeId}` - 根据知识库ID查询向量列表(需要权限 `knowledge:vector:query`)
|
||
|
||
#### KnowledgeHitLogController
|
||
|
||
知识库命中日志控制器,路径:`/knowledge/hitlog`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/hitlog/list` - 查询命中日志列表(分页,需要权限 `knowledge:hitlog:list`)
|
||
- `POST /knowledge/hitlog/export` - 导出命中日志列表(需要权限 `knowledge:hitlog:export`)
|
||
- `GET /knowledge/hitlog/{logId}` - 获取命中日志详细信息(需要权限 `knowledge:hitlog:query`)
|
||
- `POST /knowledge/hitlog` - 新增命中日志(需要权限 `knowledge:hitlog:add`)
|
||
- `PUT /knowledge/hitlog` - 修改命中日志(需要权限 `knowledge:hitlog:edit`)
|
||
- `DELETE /knowledge/hitlog/{logIds}` - 删除命中日志(需要权限 `knowledge:hitlog:remove`)
|
||
- `GET /knowledge/hitlog/knowledge/{knowledgeId}` - 根据知识库ID查询命中日志列表(需要权限 `knowledge:hitlog:query`)
|
||
- `GET /knowledge/hitlog/session/{sessionId}` - 根据会话ID查询命中日志列表(需要权限 `knowledge:hitlog:query`)
|
||
- `GET /knowledge/hitlog/fragment/{fragmentId}` - 根据片段ID查询命中日志列表(需要权限 `knowledge:hitlog:query`)
|
||
- `GET /knowledge/hitlog/query/{queryText}` - 根据查询文本查询命中日志列表(需要权限 `knowledge:hitlog:query`)
|
||
- `GET /knowledge/hitlog/popular` - 获取热门查询列表(需要权限 `knowledge:hitlog:query`,参数:`knowledgeId`(可选)、`limit`(默认10))
|
||
- `GET /knowledge/hitlog/avg-response-time` - 获取平均响应时间(需要权限 `knowledge:hitlog:query`,参数:`knowledgeId`(可选))
|
||
|
||
#### KnowledgeJobController
|
||
|
||
知识库任务管理控制器,路径:`/knowledge/job`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/job/list` - 查询知识库任务列表(分页,需要权限 `knowledge:job:list`)
|
||
- `POST /knowledge/job/export` - 导出知识库任务列表(需要权限 `knowledge:job:export`)
|
||
- `GET /knowledge/job/{jobId}` - 获取知识库任务详细信息(需要权限 `knowledge:job:query`)
|
||
- `POST /knowledge/job` - 新增知识库任务(需要权限 `knowledge:job:add`)
|
||
- `PUT /knowledge/job` - 修改知识库任务(需要权限 `knowledge:job:edit`)
|
||
- `DELETE /knowledge/job/{jobIds}` - 删除知识库任务(需要权限 `knowledge:job:remove`)
|
||
- `GET /knowledge/job/knowledge/{knowledgeId}` - 根据知识库ID查询任务列表(需要权限 `knowledge:job:query`)
|
||
- `GET /knowledge/job/status/{status}` - 根据任务状态查询任务列表(需要权限 `knowledge:job:query`)
|
||
- `GET /knowledge/job/type/{jobType}` - 根据任务类型查询任务列表(需要权限 `knowledge:job:query`)
|
||
|
||
#### KnowledgePromptTemplateController
|
||
|
||
知识库提示词模板管理控制器,路径:`/knowledge/prompt`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/prompt/list` - 查询知识库提示模板列表(分页,需要权限 `knowledge:prompt:list`)
|
||
- `POST /knowledge/prompt/export` - 导出知识库提示模板列表(需要权限 `knowledge:prompt:export`)
|
||
- `GET /knowledge/prompt/{templateId}` - 获取知识库提示模板详细信息(需要权限 `knowledge:prompt:query`)
|
||
- `POST /knowledge/prompt` - 新增知识库提示模板(需要权限 `knowledge:prompt:add`)
|
||
- `PUT /knowledge/prompt` - 修改知识库提示模板(需要权限 `knowledge:prompt:edit`)
|
||
- `DELETE /knowledge/prompt/{templateIds}` - 删除知识库提示模板(需要权限 `knowledge:prompt:remove`)
|
||
- `GET /knowledge/prompt/category/{category}` - 根据分类查询提示模板列表(需要权限 `knowledge:prompt:query`)
|
||
- `GET /knowledge/prompt/name/{templateName}` - 根据模板名称查询提示模板(需要权限 `knowledge:prompt:query`)
|
||
|
||
#### KnowledgeSchemaController
|
||
|
||
知识库数据模型管理控制器,路径:`/knowledge/schema`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/schema/list` - 查询知识库模式列表(分页,需要权限 `knowledge:schema:list`)
|
||
- `POST /knowledge/schema/export` - 导出知识库模式列表(需要权限 `knowledge:schema:export`)
|
||
- `GET /knowledge/schema/{schemaId}` - 获取知识库模式详细信息(需要权限 `knowledge:schema:query`)
|
||
- `POST /knowledge/schema` - 新增知识库模式(需要权限 `knowledge:schema:add`)
|
||
- `PUT /knowledge/schema` - 修改知识库模式(需要权限 `knowledge:schema:edit`)
|
||
- `DELETE /knowledge/schema/{schemaIds}` - 删除知识库模式(需要权限 `knowledge:schema:remove`)
|
||
- `GET /knowledge/schema/id/{id}` - 根据ID查询模式信息(需要权限 `knowledge:schema:query`)
|
||
- `GET /knowledge/schema/group/{schemaGroupId}` - 根据模式组ID查询模式列表(需要权限 `knowledge:schema:query`)
|
||
- `GET /knowledge/schema/code/{code}` - 根据编码查询模式信息(需要权限 `knowledge:schema:query`)
|
||
- `GET /knowledge/schema/table/{tableName}` - 根据表名查询模式信息(需要权限 `knowledge:schema:query`)
|
||
|
||
#### KnowledgeSchemaGroupController
|
||
|
||
知识库数据模型分组管理控制器,路径:`/knowledge/schema/group`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/schema/group/list` - 查询知识库模式组列表(分页,需要权限 `knowledge:schema:group:list`)
|
||
- `POST /knowledge/schema/group/export` - 导出知识库模式组列表(需要权限 `knowledge:schema:group:export`)
|
||
- `GET /knowledge/schema/group/{groupId}` - 获取知识库模式组详细信息(需要权限 `knowledge:schema:group:query`)
|
||
- `POST /knowledge/schema/group` - 新增知识库模式组(需要权限 `knowledge:schema:group:add`)
|
||
- `PUT /knowledge/schema/group` - 修改知识库模式组(需要权限 `knowledge:schema:group:edit`)
|
||
- `DELETE /knowledge/schema/group/{groupIds}` - 删除知识库模式组(需要权限 `knowledge:schema:group:remove`)
|
||
- `GET /knowledge/schema/group/id/{id}` - 根据ID查询模式组信息(需要权限 `knowledge:schema:group:query`)
|
||
- `GET /knowledge/schema/group/code/{code}` - 根据编码查询模式组信息(需要权限 `knowledge:schema:group:query`)
|
||
- `GET /knowledge/schema/group/name/{name}` - 根据名称查询模式组信息(需要权限 `knowledge:schema:group:query`)
|
||
|
||
#### KnowledgeSchemaFieldController
|
||
|
||
知识库数据模型字段管理控制器,路径:`/knowledge/schema/field`
|
||
|
||
**主要接口:**
|
||
|
||
- `GET /knowledge/schema/field/list` - 查询知识库模式字段列表(分页,需要权限 `knowledge:schema:field:list`)
|
||
- `POST /knowledge/schema/field/export` - 导出知识库模式字段列表(需要权限 `knowledge:schema:field:export`)
|
||
- `GET /knowledge/schema/field/{fieldId}` - 获取知识库模式字段详细信息(需要权限 `knowledge:schema:field:query`)
|
||
- `POST /knowledge/schema/field` - 新增知识库模式字段(需要权限 `knowledge:schema:field:add`)
|
||
- `PUT /knowledge/schema/field` - 修改知识库模式字段(需要权限 `knowledge:schema:field:edit`)
|
||
- `DELETE /knowledge/schema/field/{fieldIds}` - 删除知识库模式字段(需要权限 `knowledge:schema:field:remove`)
|
||
- `GET /knowledge/schema/field/id/{id}` - 根据ID查询字段信息(需要权限 `knowledge:schema:field:query`)
|
||
- `GET /knowledge/schema/field/schema/{schemaId}` - 根据模式ID查询字段列表(需要权限 `knowledge:schema:field:query`)
|
||
- `GET /knowledge/schema/field/code/{code}` - 根据编码查询字段信息(需要权限 `knowledge:schema:field:query`)
|
||
- `GET /knowledge/schema/field/schema/{schemaId}/code/{code}` - 根据模式ID和编码查询字段信息(需要权限 `knowledge:schema:field:query`)
|
||
|
||
### 服务层 (Services)
|
||
|
||
#### KnowledgeInfoService
|
||
|
||
知识库信息服务,核心业务逻辑实现。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询知识库列表
|
||
TableDataInfo<KnowledgeInfoVo> queryPageList(KnowledgeInfoBo bo, PageQuery pageQuery);
|
||
List<KnowledgeInfoVo> queryList(KnowledgeInfoBo bo);
|
||
|
||
// 查询知识库
|
||
KnowledgeInfoVo queryById(Long id);
|
||
KnowledgeInfoVo queryByKnowledgeId(Long knowledgeId);
|
||
|
||
// 创建/更新/删除知识库
|
||
Boolean insertByBo(KnowledgeInfoBo bo);
|
||
Boolean updateByBo(KnowledgeInfoBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据用户ID查询知识库列表
|
||
List<KnowledgeInfoVo> queryListByUserId(Long userId);
|
||
|
||
// 上传文档
|
||
String uploadDocument(String knowledgeId, MultipartFile file);
|
||
|
||
// 批量上传文档
|
||
List<String> batchUploadDocuments(String knowledgeId, MultipartFile[] files);
|
||
|
||
// 搜索知识库
|
||
List<KnowledgeSearchResultVo> searchKnowledge(String knowledgeId, String query, Integer limit);
|
||
|
||
// 获取知识库处理状态
|
||
KnowledgeStatusVo getKnowledgeStatus(String knowledgeId);
|
||
|
||
// 处理文档并生成知识片段
|
||
String processDocument(String knowledgeId, String docId, String content);
|
||
|
||
// 对知识片段进行向量化
|
||
String vectorizeFragment(String knowledgeId, String fragmentId);
|
||
```
|
||
|
||
#### KnowledgeVectorService
|
||
|
||
向量化服务,处理文档向量化和搜索。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询向量列表
|
||
TableDataInfo<KnowledgeVectorVo> queryPageList(KnowledgeVectorBo bo, PageQuery pageQuery);
|
||
List<KnowledgeVectorVo> queryList(KnowledgeVectorBo bo);
|
||
|
||
// 查询向量
|
||
KnowledgeVectorVo queryById(Long vectorId);
|
||
|
||
// 创建/更新/删除向量
|
||
Boolean insertByBo(KnowledgeVectorBo bo);
|
||
Boolean updateByBo(KnowledgeVectorBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 向量相似度搜索
|
||
List<KnowledgeSearchResultVo> vectorSimilaritySearch(String knowledgeId, String queryText,
|
||
String modelName, Integer topK, Double threshold);
|
||
|
||
// 单片段向量生成
|
||
String generateVector(String knowledgeId, String docId, String fragmentId, String content, String modelName);
|
||
|
||
// 批量向量生成
|
||
List<String> batchGenerateVectors(String knowledgeId, String docId,
|
||
Map<String, String> fragmentContents, String modelName);
|
||
|
||
// 统计与可用性
|
||
Map<String, Object> getVectorStatistics(String knowledgeId);
|
||
boolean isModelAvailable(String modelName);
|
||
List<String> getAvailableModels();
|
||
|
||
// 根据片段ID/知识库ID/文档ID/模型名称/状态查询向量列表
|
||
List<KnowledgeVectorVo> queryByFragmentId(String fragmentId);
|
||
List<KnowledgeVectorVo> queryByKnowledgeId(String knowledgeId);
|
||
List<KnowledgeVectorVo> queryByDocId(String docId);
|
||
List<KnowledgeVectorVo> queryByModelName(String modelName);
|
||
List<KnowledgeVectorVo> queryByStatus(Integer status);
|
||
List<KnowledgeVectorVo> queryByKnowledgeIdAndStatus(String knowledgeId, Integer status);
|
||
|
||
// 根据向量ID查询向量
|
||
KnowledgeVectorVo queryByVectorId(String vectorId);
|
||
|
||
// 批量更新向量状态
|
||
Boolean updateStatusByIds(Collection<Long> ids, Integer status);
|
||
|
||
// 文本转向量和相似度计算
|
||
double[] textToVector(String text, String modelName);
|
||
double calculateSimilarity(double[] vector1, double[] vector2);
|
||
|
||
// 批量删除向量
|
||
int deleteVectorsByKnowledgeId(String knowledgeId);
|
||
int deleteVectorsByDocId(String docId);
|
||
```
|
||
|
||
#### KnowledgeFragmentService
|
||
|
||
知识片段管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询知识片段列表
|
||
TableDataInfo<KnowledgeFragmentVo> queryPageList(KnowledgeFragmentBo bo, PageQuery pageQuery);
|
||
List<KnowledgeFragmentVo> queryList(KnowledgeFragmentBo bo);
|
||
|
||
// 查询知识片段
|
||
KnowledgeFragmentVo queryById(Long fragmentId);
|
||
KnowledgeFragmentVo queryByFid(String fid);
|
||
|
||
// 创建/更新/删除知识片段
|
||
Boolean insertByBo(KnowledgeFragmentBo bo);
|
||
Boolean updateByBo(KnowledgeFragmentBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据知识库ID/文档ID查询片段列表
|
||
List<KnowledgeFragmentVo> queryListByKnowledgeId(Long knowledgeId);
|
||
List<KnowledgeFragmentVo> queryListByDocId(String docId);
|
||
```
|
||
|
||
#### KnowledgeAttachService
|
||
|
||
知识库附件管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询附件列表
|
||
TableDataInfo<KnowledgeAttachVo> queryPageList(KnowledgeAttachBo bo, PageQuery pageQuery);
|
||
List<KnowledgeAttachVo> queryList(KnowledgeAttachBo bo);
|
||
|
||
// 查询附件
|
||
KnowledgeAttachVo queryById(Long attachId);
|
||
KnowledgeAttachVo queryByDocId(String docId);
|
||
|
||
// 创建/更新/删除附件
|
||
Boolean insertByBo(KnowledgeAttachBo bo);
|
||
Boolean updateByBo(KnowledgeAttachBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据知识库ID查询附件列表
|
||
List<KnowledgeAttachVo> queryListByKnowledgeId(String knowledgeId);
|
||
```
|
||
|
||
#### KnowledgeDocumentService
|
||
|
||
文档处理服务,处理文档上传、解析和分片。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 上传文档并处理
|
||
String uploadDocument(String knowledgeId, MultipartFile file);
|
||
|
||
// 批量上传文档
|
||
List<String> batchUploadDocuments(String knowledgeId, MultipartFile[] files);
|
||
|
||
// 分割文档为片段
|
||
List<String> splitDocumentIntoFragments(String knowledgeId, String docId,
|
||
String content, Integer chunkSize, Integer overlapSize);
|
||
```
|
||
|
||
#### KnowledgeJobService
|
||
|
||
任务管理服务,处理知识库处理任务的创建、查询和状态管理。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询任务列表
|
||
TableDataInfo<KnowledgeJobVo> queryPageList(KnowledgeJobBo bo, PageQuery pageQuery);
|
||
List<KnowledgeJobVo> queryList(KnowledgeJobBo bo);
|
||
|
||
// 查询任务
|
||
KnowledgeJobVo queryById(Long jobId);
|
||
|
||
// 创建/更新/删除任务
|
||
Boolean insertByBo(KnowledgeJobBo bo);
|
||
Boolean updateByBo(KnowledgeJobBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据知识库ID/状态/类型查询任务
|
||
List<KnowledgeJobVo> queryByKnowledgeId(String knowledgeId);
|
||
List<KnowledgeJobVo> queryByStatus(Integer status);
|
||
List<KnowledgeJobVo> queryByJobType(String jobType);
|
||
```
|
||
|
||
#### KnowledgePromptTemplateService
|
||
|
||
提示词模板管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询模板列表
|
||
TableDataInfo<KnowledgePromptTemplateVo> queryPageList(KnowledgePromptTemplateBo bo, PageQuery pageQuery);
|
||
List<KnowledgePromptTemplateVo> queryList(KnowledgePromptTemplateBo bo);
|
||
|
||
// 查询模板
|
||
KnowledgePromptTemplateVo queryById(Long templateId);
|
||
KnowledgePromptTemplateVo queryByTemplateName(String templateName);
|
||
|
||
// 创建/更新/删除模板
|
||
Boolean insertByBo(KnowledgePromptTemplateBo bo);
|
||
Boolean updateByBo(KnowledgePromptTemplateBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据分类查询模板列表
|
||
List<KnowledgePromptTemplateVo> queryListByCategory(String category);
|
||
```
|
||
|
||
#### KnowledgeSchemaService
|
||
|
||
数据模型管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询模型列表
|
||
TableDataInfo<KnowledgeSchemaVo> queryPageList(KnowledgeSchemaBo bo, PageQuery pageQuery);
|
||
List<KnowledgeSchemaVo> queryList(KnowledgeSchemaBo bo);
|
||
|
||
// 查询模型
|
||
KnowledgeSchemaVo queryById(Long schemaId);
|
||
KnowledgeSchemaVo queryByCode(String code);
|
||
KnowledgeSchemaVo queryByTableName(String tableName);
|
||
|
||
// 创建/更新/删除模型
|
||
Boolean insertByBo(KnowledgeSchemaBo bo);
|
||
Boolean updateByBo(KnowledgeSchemaBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据分组ID查询模型列表
|
||
List<KnowledgeSchemaVo> queryListBySchemaGroupId(Long schemaGroupId);
|
||
```
|
||
|
||
#### KnowledgeSchemaGroupService
|
||
|
||
数据模型分组管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询分组列表
|
||
TableDataInfo<KnowledgeSchemaGroupVo> queryPageList(KnowledgeSchemaGroupBo bo, PageQuery pageQuery);
|
||
List<KnowledgeSchemaGroupVo> queryList(KnowledgeSchemaGroupBo bo);
|
||
|
||
// 查询分组
|
||
KnowledgeSchemaGroupVo queryById(Long groupId);
|
||
KnowledgeSchemaGroupVo queryByCode(String code);
|
||
KnowledgeSchemaGroupVo queryByName(String name);
|
||
|
||
// 创建/更新/删除分组
|
||
Boolean insertByBo(KnowledgeSchemaGroupBo bo);
|
||
Boolean updateByBo(KnowledgeSchemaGroupBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
```
|
||
|
||
#### KnowledgeSchemaFieldService
|
||
|
||
数据模型字段管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询字段列表
|
||
TableDataInfo<KnowledgeSchemaFieldVo> queryPageList(KnowledgeSchemaFieldBo bo, PageQuery pageQuery);
|
||
List<KnowledgeSchemaFieldVo> queryList(KnowledgeSchemaFieldBo bo);
|
||
|
||
// 查询字段
|
||
KnowledgeSchemaFieldVo queryById(Long fieldId);
|
||
KnowledgeSchemaFieldVo queryByCode(String code);
|
||
KnowledgeSchemaFieldVo queryBySchemaIdAndCode(Long schemaId, String code);
|
||
|
||
// 创建/更新/删除字段
|
||
Boolean insertByBo(KnowledgeSchemaFieldBo bo);
|
||
Boolean updateByBo(KnowledgeSchemaFieldBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据模式ID查询字段列表
|
||
List<KnowledgeSchemaFieldVo> queryListBySchemaId(Long schemaId);
|
||
```
|
||
|
||
#### KnowledgeHitLogService
|
||
|
||
命中日志管理服务。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询日志列表
|
||
TableDataInfo<KnowledgeHitLogVo> queryPageList(KnowledgeHitLogBo bo, PageQuery pageQuery);
|
||
List<KnowledgeHitLogVo> queryList(KnowledgeHitLogBo bo);
|
||
|
||
// 查询日志
|
||
KnowledgeHitLogVo queryById(Long logId);
|
||
|
||
// 创建/更新/删除日志
|
||
Boolean insertByBo(KnowledgeHitLogBo bo);
|
||
Boolean updateByBo(KnowledgeHitLogBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据知识库ID/会话ID/片段ID/查询文本查询日志
|
||
List<KnowledgeHitLogVo> queryByKnowledgeId(String knowledgeId);
|
||
List<KnowledgeHitLogVo> queryBySessionId(String sessionId);
|
||
List<KnowledgeHitLogVo> queryByFragmentId(String fragmentId);
|
||
List<KnowledgeHitLogVo> queryByQueryText(String queryText);
|
||
|
||
// 统计分析
|
||
List<Map<String, Object>> getPopularQueries(String knowledgeId, Integer limit);
|
||
Double getAverageResponseTime(String knowledgeId);
|
||
```
|
||
|
||
#### KnowledgeRoleService
|
||
|
||
角色管理服务(Service层已实现,Controller层待实现)。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询角色列表
|
||
TableDataInfo<KnowledgeRoleVo> queryPageList(KnowledgeRoleBo bo, PageQuery pageQuery);
|
||
List<KnowledgeRoleVo> queryList(KnowledgeRoleBo bo);
|
||
List<KnowledgeRoleVo> queryEnabledList(); // 查询启用状态的角色列表
|
||
|
||
// 查询角色
|
||
KnowledgeRoleVo queryById(Long id);
|
||
KnowledgeRoleVo queryByRoleCode(String roleCode);
|
||
|
||
// 创建/更新/删除角色
|
||
Boolean insertByBo(KnowledgeRoleBo bo);
|
||
Boolean updateByBo(KnowledgeRoleBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
```
|
||
|
||
#### KnowledgeRoleGroupService
|
||
|
||
角色组管理服务(Service层已实现,Controller层待实现)。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询角色组列表
|
||
TableDataInfo<KnowledgeRoleGroupVo> queryPageList(KnowledgeRoleGroupBo bo, PageQuery pageQuery);
|
||
List<KnowledgeRoleGroupVo> queryList(KnowledgeRoleGroupBo bo);
|
||
|
||
// 查询角色组
|
||
KnowledgeRoleGroupVo queryById(Long groupId);
|
||
|
||
// 创建/更新/删除角色组
|
||
Boolean insertByBo(KnowledgeRoleGroupBo bo);
|
||
Boolean updateByBo(KnowledgeRoleGroupBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
```
|
||
|
||
#### KnowledgeRoleRelationService
|
||
|
||
角色关联管理服务(Service层已实现,Controller层待实现)。
|
||
|
||
**主要方法:**
|
||
|
||
```java
|
||
// 查询关联列表
|
||
TableDataInfo<KnowledgeRoleRelationVo> queryPageList(KnowledgeRoleRelationBo bo, PageQuery pageQuery);
|
||
List<KnowledgeRoleRelationVo> queryList(KnowledgeRoleRelationBo bo);
|
||
|
||
// 查询关联
|
||
KnowledgeRoleRelationVo queryById(Long id);
|
||
KnowledgeRoleRelationVo queryByRoleIdAndGroupId(Long roleId, Long groupId);
|
||
|
||
// 创建/更新/删除关联
|
||
Boolean insertByBo(KnowledgeRoleRelationBo bo);
|
||
Boolean updateByBo(KnowledgeRoleRelationBo bo);
|
||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||
|
||
// 根据角色ID/分组ID查询关联列表
|
||
List<KnowledgeRoleRelationVo> queryByRoleId(Long roleId);
|
||
List<KnowledgeRoleRelationVo> queryByGroupId(Long groupId);
|
||
```
|
||
|
||
## 数据库表结构
|
||
|
||
知识库模块包含以下数据表(详细SQL请参考 `script/sql/ry_knowledge.sql`):
|
||
|
||
### 数据库表清单
|
||
|
||
1. `knowledge_info` - 知识库信息表
|
||
2. `knowledge_attach` - 知识库附件表
|
||
3. `knowledge_fragment` - 知识库片段表
|
||
4. `knowledge_vector` - 知识片段向量表
|
||
5. `knowledge_prompt_template` - 知识库提示词模板表
|
||
6. `knowledge_schema_group` - 知识库数据模型分组表
|
||
7. `knowledge_schema` - 知识库数据模型表
|
||
8. `knowledge_schema_field` - 知识库数据模型字段表
|
||
9. `knowledge_role` - 知识库角色表
|
||
10. `knowledge_role_group` - 知识库角色组表
|
||
11. `knowledge_role_relation` - 知识库角色与知识库关联表
|
||
12. `knowledge_job` - 知识库任务进度表
|
||
13. `knowledge_hit_log` - 知识检索命中日志表
|
||
|
||
### 主要数据表说明
|
||
|
||
#### 1. knowledge_info (知识库信息表)
|
||
|
||
存储知识库的基本信息和配置。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `user_id` - 用户ID
|
||
- `knowledge_id` - 知识库ID(唯一标识)
|
||
- `knowledge_name` - 知识库名称
|
||
- `share` - 是否公开知识库(0否,1是)
|
||
- `description` - 描述
|
||
- `knowledge_separator` - 知识分隔符
|
||
- `question_separator` - 提问分隔符
|
||
- `overlap_char` - 重叠字符数
|
||
- `retrieve_limit` - 知识库中检索的条数
|
||
- `text_block_size` - 文本块大小
|
||
- `vector_model_name` - 向量库
|
||
- `embedding_model_name` - 向量模型
|
||
- `system_prompt` - 系统提示词
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
|
||
#### 2. knowledge_attach (知识库附件表)
|
||
|
||
存储上传到知识库的文档文件信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `knowledge_id` - 知识库ID
|
||
- `doc_id` - 文档ID(唯一标识)
|
||
- `doc_name` - 文档名称
|
||
- `doc_type` - 文档类型(pdf/docx/txt/md等)
|
||
- `oss_id` - 对象存储ID
|
||
- `pic_status` - 拆解图片状态(10未开始,20进行中,30已完成)
|
||
- `pic_anys_status` - 分析图片状态(10未开始,20进行中,30已完成)
|
||
- `vector_status` - 写入向量数据库状态(10未开始,20进行中,30已完成)
|
||
- `content` - 文档内容(长文本)
|
||
|
||
#### 3. knowledge_fragment (知识库片段表)
|
||
|
||
存储文档分割后的知识片段。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `knowledge_id` - 知识库ID
|
||
- `doc_id` - 文档ID
|
||
- `fid` - 知识片段ID(唯一标识)
|
||
- `idx` - 片段索引下标
|
||
- `content` - 文档内容(文本)
|
||
|
||
#### 4. knowledge_vector (知识片段向量表)
|
||
|
||
存储知识片段的向量化数据。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `knowledge_id` - 知识库ID
|
||
- `doc_id` - 文档ID
|
||
- `fragment_id` - 知识片段ID
|
||
- `vector_id` - 向量唯一标识
|
||
- `vector_data` - 向量数据(BLOB)
|
||
- `dimension` - 向量维度
|
||
- `model_name` - 向量模型名称
|
||
- `status` - 状态(0启用,1禁用)
|
||
|
||
#### 5. knowledge_prompt_template (知识库提示词模板表)
|
||
|
||
存储提示词模板信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `template_name` - 提示词模板名称
|
||
- `template_content` - 提示词模板内容
|
||
- `category` - 提示词分类(knowledge知识库类型,chat对话类型,draw绘画类型)
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
|
||
#### 6. knowledge_schema_group (知识库数据模型分组表)
|
||
|
||
存储数据模型分组信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `name` - 分组名称
|
||
- `code` - 分组编码(唯一)
|
||
- `icon` - 图标
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
|
||
#### 7. knowledge_schema (知识库数据模型表)
|
||
|
||
存储数据模型定义信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `schema_group_id` - 分组ID
|
||
- `name` - 模型名称
|
||
- `code` - 模型编码(唯一)
|
||
- `table_name` - 表名(唯一)
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
|
||
#### 8. knowledge_schema_field (知识库数据模型字段表)
|
||
|
||
存储数据模型的字段定义信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `schema_id` - 模型ID
|
||
- `schema_name` - 模型名称
|
||
- `name` - 字段名称
|
||
- `code` - 字段编码
|
||
- `type` - 字段类型
|
||
- `comment` - 字段注释
|
||
- `is_pk` - 是否主键(0否,1是)
|
||
- `is_required` - 是否必填(0否,1是)
|
||
- `is_unique` - 是否唯一(0否,1是)
|
||
- `default_value` - 默认值
|
||
- `length` - 字段长度
|
||
- `scale` - 小数位数
|
||
- `is_list` - 是否列表显示(0否,1是)
|
||
- `is_query` - 是否查询字段(0否,1是)
|
||
- `is_insert` - 是否插入字段(0否,1是)
|
||
- `is_edit` - 是否编辑字段(0否,1是)
|
||
- `query_type` - 查询方式(EQ,NE,GT,LT,LIKE,BETWEEN)
|
||
- `html_type` - 显示类型(input,textarea,select,checkbox,radio,datetime,image,upload,editor)
|
||
- `dict_type` - 字典类型
|
||
- `sort` - 排序
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
|
||
#### 9. knowledge_role (知识库角色表)
|
||
|
||
存储知识库角色信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 知识库角色id(主键)
|
||
- `name` - 知识库角色名称(注意:SQL建表语句中字段名为`name`,但Java实体类中通过MyBatis-Plus字段映射使用`roleName`、`roleCode`、`roleDesc`等字段,实际运行时通过字段映射或XML映射处理)
|
||
- `group_id` - 知识库角色组id
|
||
- `remark` - 备注
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
- `create_by` - 创建者
|
||
- `create_time` - 创建时间
|
||
- `update_by` - 更新者
|
||
- `update_time` - 更新时间
|
||
|
||
**注意**:
|
||
1. SQL建表语句与Java实体类字段可能存在不一致(SQL中仅定义了`name`字段,但Java实体类中有`roleName`、`roleCode`、`roleDesc`、`status`、`sort`等字段),实际使用时会通过MyBatis-Plus的字段映射或XML映射处理。
|
||
2. 角色管理功能的Service层已实现(`KnowledgeRoleService`、`KnowledgeRoleGroupService`、`KnowledgeRoleRelationService`),但Controller层尚未实现,可通过Service层调用或后续补充Controller。
|
||
|
||
#### 10. knowledge_role_group (知识库角色组表)
|
||
|
||
存储知识库角色组信息。
|
||
|
||
**主要字段(基于SQL建表语句):**
|
||
- `id` - 知识库角色组id(主键)
|
||
- `name` - 知识库角色组名称(在Java实体类中映射为`groupName`)
|
||
- `remark` - 备注
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
- `create_by` - 创建者
|
||
- `create_time` - 创建时间
|
||
- `update_by` - 更新者
|
||
- `update_time` - 更新时间
|
||
|
||
**注意**:SQL建表语句仅定义了基本字段,但Java实体类(`KnowledgeRoleGroup`)中还包含`groupCode`、`groupDesc`、`status`、`sort`等字段。这些字段可能在SQL中未定义或通过后续ALTER TABLE添加,实际使用时会通过MyBatis-Plus的字段映射或XML映射处理。
|
||
|
||
#### 11. knowledge_role_relation (知识库角色与知识库关联表)
|
||
|
||
存储角色与知识库的关联关系。
|
||
|
||
**主要字段(基于SQL建表语句和XML映射):**
|
||
- `id` - 主键ID
|
||
- `knowledge_role_id` - 知识库角色id(在Java实体类中映射为`knowledgeRoleId`,通过XML映射)
|
||
- `knowledge_id` - 知识库id(在Java实体类中映射为`knowledgeId`,通过XML映射)
|
||
- `remark` - 备注
|
||
- `del_flag` - 删除标志(0存在,1删除)
|
||
- `create_by` - 创建者
|
||
- `create_time` - 创建时间
|
||
- `update_by` - 更新者
|
||
- `update_time` - 更新时间
|
||
- 唯一索引:`uk_role_knowledge` (`knowledge_role_id`, `knowledge_id`)
|
||
|
||
**注意**:SQL建表语句仅定义了基本字段(`knowledge_role_id`和`knowledge_id`),但Java实体类(`KnowledgeRoleRelation`)中还包含`roleId`、`groupId`、`relationType`、`status`、`sort`等字段。XML映射文件(`KnowledgeRoleRelationMapper.xml`)中只映射了`knowledgeRoleId`和`knowledgeId`字段,其他字段(`roleId`、`groupId`、`relationType`、`status`、`sort`)可能在SQL中未定义或通过后续ALTER TABLE添加,实际使用时会通过MyBatis-Plus的字段映射处理。
|
||
|
||
#### 12. knowledge_job (知识库任务进度表)
|
||
|
||
存储知识库处理任务的进度和状态信息。
|
||
|
||
**主要字段:**
|
||
- `id` - 任务ID
|
||
- `job_id` - 任务唯一标识
|
||
- `job_type` - 任务类型(upload,process,delete,export,embedding,sync)
|
||
- `job_sub_type` - 任务子类型
|
||
- `knowledge_id` - 知识库ID
|
||
- `doc_id` - 文档ID
|
||
- `user_id` - 用户ID
|
||
- `status` - 任务状态(0等待,1进行中,2成功,3失败,4暂停)
|
||
- `progress` - 进度(0-100)
|
||
- `total_items` - 总项目数
|
||
- `processed_items` - 已处理项目数
|
||
- `success_items` - 成功项目数
|
||
- `failed_items` - 失败项目数
|
||
- `priority` - 优先级(1低,2中,3高)
|
||
- `retry_count` - 重试次数
|
||
- `max_retry` - 最大重试次数
|
||
- `start_time` - 开始时间
|
||
- `end_time` - 结束时间
|
||
- `timeout` - 超时时间(秒)
|
||
- `error_message` - 错误信息
|
||
- `error_stack` - 错误堆栈
|
||
- `result_data` - 结果数据(JSON格式)
|
||
- `notify_url` - 通知URL
|
||
- `notify_status` - 通知状态(0未通知,1已通知)
|
||
|
||
#### 13. knowledge_hit_log (知识检索命中日志表)
|
||
|
||
存储知识检索的命中日志,用于分析检索效果和热门查询。
|
||
|
||
**主要字段:**
|
||
- `id` - 主键ID
|
||
- `session_id` - 会话ID
|
||
- `knowledge_id` - 知识库ID
|
||
- `doc_id` - 文档ID
|
||
- `fragment_id` - 知识片段ID
|
||
- `query_text` - 查询文本
|
||
- `query_vector` - 查询向量(BLOB)
|
||
- `similarity_score` - 相似度分数
|
||
- `ranking` - 排名位置
|
||
- `model_name` - 向量模型名称
|
||
- `search_params` - 搜索参数(JSON格式)
|
||
- `response_time` - 响应时间(毫秒)
|
||
- `hit_count` - 命中次数
|
||
|
||
## 使用示例
|
||
|
||
### 1. 创建知识库
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/info" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"knowledgeName": "技术文档库",
|
||
"description": "存储技术相关文档",
|
||
"share": 0,
|
||
"textBlockSize": 1000,
|
||
"overlapChar": 200,
|
||
"retrieveLimit": 5,
|
||
"embeddingModelName": "bge-large-zh",
|
||
"vectorModelName": "db"
|
||
}'
|
||
```
|
||
|
||
### 2. 上传文档
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/info/kb123/upload" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-F "file=@document.pdf"
|
||
```
|
||
|
||
### 3. 批量上传文档
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/info/kb123/batch-upload" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-F "files=@document1.pdf" \
|
||
-F "files=@document2.docx"
|
||
```
|
||
|
||
### 4. 搜索知识库
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/info/kb123/search?query=Spring Boot&limit=5" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 5. 向量搜索
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/vector/search?knowledgeId=kb123&query=什么是微服务架构?&model=bge-large-zh&topK=5&threshold=0.7" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 6. 生成向量
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/vector/generate?knowledgeId=kb123&docId=doc456&model=bge-large-zh" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '[
|
||
{
|
||
"fid": "fragment1",
|
||
"content": "这是第一个片段的内容..."
|
||
},
|
||
{
|
||
"fid": "fragment2",
|
||
"content": "这是第二个片段的内容..."
|
||
}
|
||
]'
|
||
```
|
||
|
||
### 7. 文档批量向量化
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/vector/vectorize-doc?knowledgeId=kb123&docId=doc456&model=bge-large-zh" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 8. 获取向量统计
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/vector/stats/kb123" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 9. 重建向量索引
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/vector/rebuild/kb123" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 10. 获取知识库状态
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/info/kb123/status" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 11. 查询知识库列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/info/list?pageNum=1&pageSize=10&knowledgeName=技术" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 12. 查询附件列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/attach/list?knowledgeId=kb123&pageNum=1&pageSize=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 13. 查询片段列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/fragment/list?knowledgeId=kb123&pageNum=1&pageSize=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 14. 查询任务列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/job/list?knowledgeId=kb123&status=1&pageNum=1&pageSize=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 15. 获取热门查询列表
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/hitlog/popular?knowledgeId=kb123&limit=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 16. 获取平均响应时间
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/hitlog/avg-response-time?knowledgeId=kb123" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 17. 查询命中日志
|
||
|
||
```bash
|
||
curl -X GET "http://localhost:8080/knowledge/hitlog/list?knowledgeId=kb123&pageNum=1&pageSize=10" \
|
||
-H "Authorization: Bearer YOUR_TOKEN"
|
||
```
|
||
|
||
### 18. 创建提示词模板
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/prompt" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"templateName": "技术问答模板",
|
||
"templateContent": "你是一个专业的技术助手,请基于以下知识回答问题:\n{knowledge}\n\n问题:{question}",
|
||
"category": "knowledge"
|
||
}'
|
||
```
|
||
|
||
### 19. 创建数据模型分组
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/schema/group" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"name": "业务模型组",
|
||
"code": "business_models",
|
||
"icon": "icon-business"
|
||
}'
|
||
```
|
||
|
||
### 20. 创建数据模型
|
||
|
||
```bash
|
||
curl -X POST "http://localhost:8080/knowledge/schema" \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_TOKEN" \
|
||
-d '{
|
||
"schemaGroupId": 1,
|
||
"name": "产品模型",
|
||
"code": "product_model",
|
||
"tableName": "product_data"
|
||
}'
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### 应用配置
|
||
|
||
```yaml
|
||
# 知识库模块配置
|
||
knowledge:
|
||
# 默认嵌入模型
|
||
default-embedding-model: text-embedding-ada-002
|
||
# 默认分片大小
|
||
default-chunk-size: 1000
|
||
# 默认分片重叠
|
||
default-chunk-overlap: 200
|
||
# 支持的文件类型
|
||
supported-file-types:
|
||
- pdf
|
||
- docx
|
||
- txt
|
||
- md
|
||
# 最大文件大小(MB)
|
||
max-file-size: 50
|
||
# 向量搜索配置
|
||
vector-search:
|
||
# 默认返回数量
|
||
default-top-k: 5
|
||
# 默认相似度阈值
|
||
default-threshold: 0.7
|
||
# 缓存过期时间(秒)
|
||
cache-expire-time: 3600
|
||
|
||
# RAG 配置(统一前缀 rag.*)
|
||
rag:
|
||
enabled: true
|
||
default-embedding-model: text-embedding
|
||
default-vector-backend: db # 可扩展 qdrant/weaviate 等
|
||
```
|
||
|
||
### 文件存储配置
|
||
|
||
```yaml
|
||
# OSS配置
|
||
oss:
|
||
# 知识库文件存储桶
|
||
knowledge-bucket: knowledge-files
|
||
# 文件访问路径前缀
|
||
file-url-prefix: /knowledge/files/
|
||
```
|
||
|
||
## 支持的文档格式
|
||
|
||
### 文本格式
|
||
|
||
- **TXT**: 纯文本文件
|
||
- **MD**: Markdown文档
|
||
- **CSV**: 逗号分隔值文件
|
||
|
||
### 办公文档
|
||
|
||
- **PDF**: Adobe PDF文档
|
||
- **DOCX**: Microsoft Word文档
|
||
- **PPTX**: Microsoft PowerPoint文档
|
||
- **XLSX**: Microsoft Excel文档
|
||
|
||
### 网页格式
|
||
|
||
- **HTML**: 网页文档
|
||
- **XML**: 结构化文档
|
||
|
||
## 嵌入模型支持
|
||
|
||
### OpenAI模型
|
||
|
||
- `text-embedding-ada-002`
|
||
- `text-embedding-3-small`
|
||
- `text-embedding-3-large`
|
||
|
||
### 其他模型
|
||
|
||
- `sentence-transformers/all-MiniLM-L6-v2`
|
||
- `sentence-transformers/all-mpnet-base-v2`
|
||
- `text2vec-chinese`
|
||
|
||
## 开发指南
|
||
|
||
### 添加新的文档解析器
|
||
|
||
1. 实现 `DocumentParser` 接口(签名:`String parse(byte[] bytes, String filename)`)
|
||
2. 注册解析器到Spring容器
|
||
3. 配置文件类型映射
|
||
4. 添加单元测试
|
||
|
||
```java
|
||
@Component
|
||
public class CustomDocumentParser implements DocumentParser {
|
||
@Override
|
||
public String parse(byte[] bytes, String filename) {
|
||
// 实现解析逻辑并返回纯文本
|
||
return new String(bytes);
|
||
}
|
||
}
|
||
```
|
||
|
||
### 集成新的嵌入模型
|
||
|
||
1. 实现 `EmbeddingEngine` 接口
|
||
2. 配置模型参数
|
||
3. 添加模型验证
|
||
4. 更新配置文档
|
||
|
||
```java
|
||
@Component
|
||
public class CustomEmbeddingEngine implements EmbeddingEngine {
|
||
@Override
|
||
public double[] embed(String text, String model) {
|
||
// 实现嵌入逻辑
|
||
return new double[]{0.1, 0.2, 0.3};
|
||
}
|
||
}
|
||
```
|
||
|
||
### 自定义搜索策略
|
||
|
||
1. 实现 `Retriever` 接口
|
||
2. 配置搜索权重
|
||
3. 添加性能测试
|
||
4. 文档化搜索算法
|
||
|
||
```java
|
||
@Component
|
||
public class HybridRetriever implements Retriever {
|
||
public List<KnowledgeSearchResultVo> search(String knowledgeId, String query, String model, int topK, double threshold) {
|
||
// 实现混合搜索逻辑:关键词 + 向量
|
||
return java.util.Collections.emptyList();
|
||
}
|
||
}
|
||
```
|
||
|
||
### 增量索引与版本控制
|
||
|
||
- 索引更新:`IndexUpdater` 接口,默认实现 `DefaultIndexUpdater` 触发分片重建与任务追踪
|
||
- 版本管理:`VersionManager` 接口,默认实现 `DefaultVersionManager`(创建版本与回滚占位)
|
||
- 推荐将版本信息与片段/向量表做快照/变更日志以支持精准回滚
|
||
|
||
## 性能优化
|
||
|
||
### 向量索引优化
|
||
|
||
1. **索引策略**
|
||
- 使用适当的向量索引算法(HNSW、IVF等)
|
||
- 定期重建索引
|
||
- 增量索引更新
|
||
|
||
2. **内存管理**
|
||
- 向量数据分页加载
|
||
- LRU缓存策略
|
||
- 内存使用监控
|
||
|
||
### 搜索性能
|
||
|
||
1. **缓存策略**
|
||
- 热门查询结果缓存
|
||
- 向量计算结果缓存
|
||
- 分布式缓存支持
|
||
|
||
2. **并发处理**
|
||
- 异步向量化处理
|
||
- 并行搜索执行
|
||
- 线程池优化
|
||
|
||
### 存储优化
|
||
|
||
1. **数据压缩**
|
||
- 向量数据压缩
|
||
- 文档内容压缩
|
||
- 索引数据优化
|
||
|
||
2. **分库分表**
|
||
- 按知识库分表
|
||
- 向量数据分片
|
||
- 读写分离
|
||
|
||
## 监控和运维
|
||
|
||
### 关键指标
|
||
|
||
- 知识库数量和大小
|
||
- 文档处理成功率
|
||
- 向量化处理时间
|
||
- 搜索响应时间
|
||
- 搜索准确率
|
||
- 存储使用量
|
||
|
||
### 日志配置
|
||
|
||
```yaml
|
||
logging:
|
||
level:
|
||
org.dromara.knowledge: DEBUG
|
||
org.dromara.knowledge.service.impl.KnowledgeVectorServiceImpl: INFO
|
||
```
|
||
|
||
### 健康检查
|
||
|
||
```bash
|
||
# 检查知识库状态
|
||
curl -X GET "http://localhost:8080/knowledge/health"
|
||
|
||
# 检查向量服务状态
|
||
curl -X GET "http://localhost:8080/knowledge/vector/health"
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **文档上传失败**
|
||
- 检查文件格式支持
|
||
- 验证文件大小限制
|
||
- 查看存储空间
|
||
|
||
2. **向量化处理失败**
|
||
- 检查嵌入模型配置
|
||
- 验证API密钥
|
||
- 查看网络连接
|
||
|
||
3. **搜索结果不准确**
|
||
- 调整相似度阈值
|
||
- 优化分片策略
|
||
- 重建向量索引
|
||
|
||
4. **性能问题**
|
||
- 检查索引状态
|
||
- 优化查询条件
|
||
- 增加缓存配置
|
||
|
||
### 数据恢复
|
||
|
||
1. **备份策略**
|
||
- 定期备份知识库数据
|
||
- 向量索引备份
|
||
- 配置文件备份
|
||
|
||
2. **恢复流程**
|
||
- 恢复数据库数据
|
||
- 重建向量索引
|
||
- 验证数据完整性
|
||
|
||
## API文档
|
||
|
||
完整的API文档可通过Swagger UI访问:
|
||
`http://localhost:8080/doc.html#/knowledge`
|
||
|
||
## 功能清单
|
||
|
||
### 已实现功能 ✅
|
||
|
||
#### 知识库管理
|
||
- ✅ 知识库创建和配置
|
||
- ✅ 知识库列表查询(分页、筛选)
|
||
- ✅ 知识库信息更新和删除
|
||
- ✅ 知识库状态查询
|
||
- ✅ 用户知识库列表查询
|
||
|
||
#### 文档管理
|
||
- ✅ 文档上传(单文件)
|
||
- ✅ 文档批量上传
|
||
- ✅ 文档列表查询
|
||
- ✅ 文档信息查询
|
||
- ✅ 文档删除
|
||
- ✅ 多格式文档支持(PDF、Word、TXT、Markdown、Excel、CSV、HTML等)
|
||
- ✅ 文档解析状态跟踪(拆解图片状态、分析图片状态、向量化状态)
|
||
|
||
#### 知识片段管理
|
||
- ✅ 片段列表查询(分页、筛选)
|
||
- ✅ 片段信息查询
|
||
- ✅ 片段创建、更新、删除
|
||
- ✅ 根据知识库ID查询片段列表
|
||
- ✅ 根据文档ID查询片段列表
|
||
- ✅ 片段内容管理
|
||
|
||
#### 向量化处理
|
||
- ✅ 向量生成(单片段、批量)
|
||
- ✅ 向量搜索(相似度搜索)
|
||
- ✅ 向量列表查询
|
||
- ✅ 向量统计
|
||
- ✅ 向量索引重建
|
||
- ✅ 文档批量向量化
|
||
- ✅ 多向量模型支持
|
||
|
||
#### 智能检索
|
||
- ✅ 基于向量的语义搜索
|
||
- ✅ 相似度排序
|
||
- ✅ 检索结果过滤
|
||
- ✅ 检索命中日志记录
|
||
|
||
#### 任务管理
|
||
- ✅ 任务创建和查询
|
||
- ✅ 任务状态跟踪(等待、进行中、成功、失败、暂停)
|
||
- ✅ 任务进度管理
|
||
- ✅ 任务重试机制
|
||
- ✅ 根据知识库ID查询任务
|
||
- ✅ 根据任务状态/类型查询任务
|
||
|
||
#### 提示词模板管理
|
||
- ✅ 模板创建和配置
|
||
- ✅ 模板列表查询
|
||
- ✅ 模板更新和删除
|
||
- ✅ 按分类查询模板
|
||
- ✅ 按模板名称查询
|
||
|
||
#### 数据模型管理
|
||
- ✅ 模型分组管理(分组创建、查询、更新、删除)
|
||
- ✅ 数据模型管理(模型创建、查询、更新、删除)
|
||
- ✅ 模型字段管理(字段创建、查询、更新、删除)
|
||
- ✅ 模型与分组的关联管理
|
||
- ✅ 字段类型和属性配置
|
||
|
||
#### 角色与权限管理
|
||
- ✅ 角色组管理(Service层已实现)
|
||
- ✅ 角色管理(Service层已实现)
|
||
- ✅ 角色与知识库关联管理(Service层已实现)
|
||
|
||
#### 检索日志与分析
|
||
- ✅ 命中日志记录
|
||
- ✅ 命中日志查询(按知识库、会话、片段、查询文本)
|
||
- ✅ 热门查询统计
|
||
- ✅ 平均响应时间分析
|
||
- ✅ 日志导出
|
||
|
||
#### RAG架构组件
|
||
- ✅ 文档解析器接口(DocumentParser)及多种实现
|
||
- ✅ 向量化引擎接口(EmbeddingEngine)及HTTP实现
|
||
- ✅ 检索器接口(Retriever)及默认实现
|
||
- ✅ 索引更新器接口(IndexUpdater)及默认实现
|
||
- ✅ 响应生成器接口(Generator)及默认实现
|
||
- ✅ 版本管理器接口(VersionManager)及默认实现
|
||
- ✅ 向量存储服务接口(VectorStoreService)及多种实现(DB、Qdrant、Weaviate)
|
||
|
||
### 待实现功能
|
||
|
||
#### 文档处理增强
|
||
- [ ] 文档版本管理(版本对比、回滚)
|
||
- [ ] 文档预览功能(PDF预览、图片预览)
|
||
- [ ] 文档在线编辑
|
||
- [ ] 文档标签和分类管理
|
||
- [ ] 文档批量操作(批量删除、批量导出)
|
||
|
||
#### 检索功能增强
|
||
- [ ] 关键词搜索(全文检索)
|
||
- [ ] 混合搜索策略(关键词+向量)
|
||
- [ ] 检索结果排序优化(多种排序策略)
|
||
- [ ] 检索结果高亮显示
|
||
- [ ] 检索历史记录
|
||
|
||
#### 权限控制增强
|
||
- [ ] 角色管理Controller(目前只有Service层)
|
||
- [ ] 知识库访问权限控制(读写权限、分享权限)
|
||
- [ ] 用户权限验证和拦截
|
||
- [ ] 权限审计日志
|
||
|
||
#### 数据分析与统计
|
||
- [ ] 知识库使用统计(文档数量、检索次数、用户数等)
|
||
- [ ] 检索效果分析(准确率、召回率)
|
||
- [ ] 热门知识库统计
|
||
- [ ] 用户行为分析
|
||
|
||
#### 性能优化
|
||
- [ ] 向量索引优化(HNSW、IVF等算法)
|
||
- [ ] 检索结果缓存
|
||
- [ ] 批量处理优化
|
||
- [ ] 异步任务队列优化
|
||
|
||
#### 集成功能
|
||
- [ ] 与AI模块深度集成(RAG问答优化)
|
||
- [ ] 与聊天模块集成(知识库聊天增强)
|
||
- [ ] 知识库导入导出(批量导入、格式转换)
|
||
|
||
## 版本历史
|
||
|
||
- **v1.0.0**: 初始版本,基础知识库功能
|
||
- **v1.1.0**: 添加向量搜索支持
|
||
- **v1.2.0**: 支持多种文档格式
|
||
- **v1.3.0**: 增加批量处理功能
|
||
- **v1.4.0**: 引入 RAG 模块化目录、解析/检索接口与增量索引/版本控制
|
||
- **v1.5.0**: 完善命中日志功能,新增热门查询统计和平均响应时间分析
|
||
- **v1.6.0**: 完善文档,补充完整的API接口列表、数据库表结构说明、Service层方法说明和使用示例(2025-01-09)
|
||
|
||
## 贡献指南
|
||
|
||
1. Fork 项目
|
||
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
|
||
3. 提交代码变更 (`git commit -m 'Add some AmazingFeature'`)
|
||
4. 推送到分支 (`git push origin feature/AmazingFeature`)
|
||
5. 创建 Pull Request
|
||
|
||
## 许可证
|
||
|
||
本项目采用 MIT 许可证,详见 LICENSE 文件。
|
||
|
||
## 技术支持
|
||
|
||
如有问题或建议,请通过以下方式联系:
|
||
|
||
- 提交 Issue
|
||
- 发送邮件至技术支持
|
||
- 参与社区讨论
|