# 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
- 发送邮件至技术支持
- 参与社区讨论
