docs: 中期成果物整理 - 新增DESIGN.md/AGENTS.md、更新README、规范化文件命名与路径

This commit is contained in:
xunhe
2026-08-31 15:07:30 +08:00
parent e2a4d40c9e
commit 813cddb589
16 changed files with 2536 additions and 18 deletions
+127
View File
@@ -0,0 +1,127 @@
# 知识库模块实施计划
## 技术选型
| 项目 | 选择 |
|------|------|
| 文档解析 | Apache Tika(一个依赖支持 PDF/Word/TXT/MD |
| 向量化引擎 | Ollama(默认 `nomic-embed-text`)或 DeepSeek`text-embedding-3-small`),**前端可切换** |
| 向量存储 | PostgreSQL + pgvector(已有) |
| 文件存储 | MinIO(已有) |
| 切片策略 | 500 Token10% 重叠 |
## 实施步骤
### Step 0AI 配置管理(前置)
| 端 | 内容 |
|----|------|
| 后端新增 | `AiConfigService` — 读取/写入 AI 配置(provider、模型名、API Key),存入 Redis |
| 后端实现 | `AiConfigController` 的 get/put/test 三个方法 |
| 后端改动 | `EmbeddingService` 每次调用前查配置,根据 provider 路由到 Ollama 或 DeepSeek |
| 前端新增 | 知识库页内加"Embedding 配置"区域:Provider 下拉框(Ollama / DeepSeek+ 模型名输入框 |
### Step 1:添加依赖
修改 `ims-service/pom.xml`,新增依赖:
| 依赖 | 用途 |
|------|------|
| `org.apache.tika:tika-core` | 文档解析 |
| `org.springframework.ai:spring-ai-ollama-spring-boot-starter` | Ollama Embedding 调用 |
### Step 2:创建 Service 接口 + 实现(8 个新文件)
| 文件 | 包路径 | 说明 |
|------|--------|------|
| `EmbeddingService.java` | `com.ims.service.knowledge` | 接口:`embed(text)` + `search(query, topK)` |
| `AiConfigService.java` | `com.ims.service.knowledge` | AI 配置读写,存入 Redis |
| `OllamaEmbeddingService.java` | `com.ims.service.knowledge` | 调用 Ollama 实现 Embedding |
| `DeepSeekEmbeddingService.java` | `com.ims.service.knowledge` | 调用 DeepSeek API 实现 Embedding |
| `DocumentParserService.java` | `com.ims.service.knowledge` | Tika 解析 + 500 Token 切片 |
| `KnowledgeService.java` | `com.ims.service.knowledge` | 上传→MinIO→DB、列表、删除、重新索引 |
| `SearchService.java` | `com.ims.service.knowledge` | pgvector 余弦相似度检索 |
| `SearchLogService.java` | `com.ims.service.knowledge` | 检索审计日志记录 |
### Step 3:实现 Controller
| Controller | 方法 | 功能 |
|-----------|------|------|
| `AiConfigController` | `GET /api/v1/ai/config` | 读取 AI 配置 |
| | `PUT /api/v1/ai/config` | 更新 AI 配置 |
| | `POST /api/v1/ai/config/test` | 测试连接 |
| `KnowledgeController` | `GET /documents` | 文档列表(分页) |
| | `POST /documents` | 上传文档 → 解析 → 切片 → 向量化 → 入库 |
| | `DELETE /documents/{id}` | 删除文档 + MinIO 文件 + 向量 |
| | `POST /documents/{id}/reindex` | 重新向量化 |
| | `GET /search` | 检索接口 |
| | `GET /logs` | 检索日志列表 |
### Step 4:前端知识库页面
修改 `frontend/src/pages/knowledge-base/index.tsx`
| 组件 | 参考设计 |
|------|---------|
| Tab 切换 | 文档管理 / 检索审计 |
| Embedding 配置区 | Provider 下拉框(Ollama / DeepSeek+ 模型名输入框 |
| 上传拖拽区 | Ant Design `Upload.Dragger` |
| 文档表格 | Ant Design `Table`(文件名/上传人/时间/状态/分块数/操作) |
| 搜索框 | Ant Design `Input.Search` |
| 检索日志表格 | Ant Design `Table` |
| 统计卡片 | Ant Design `Card` + `Statistic` |
### Step 5:配置
| 项目 | 操作 |
|------|------|
| Ollama 模型 | `ollama pull nomic-embed-text` |
| MinIO bucket | 管理后台创建 `ims-attachments` |
## 文件清单
```
修改:
backend/ims-service/pom.xml +2 依赖
backend/ims-api/src/main/java/.../AiConfigController.java 填充 3 个方法
backend/ims-api/src/main/java/.../KnowledgeController.java 填充 6 个方法
frontend/src/pages/knowledge-base/index.tsx 重写
新增(后端):
backend/ims-service/src/main/java/com/ims/service/knowledge/
├── EmbeddingService.java
├── AiConfigService.java
├── OllamaEmbeddingService.java
├── DeepSeekEmbeddingService.java
├── DocumentParserService.java
├── KnowledgeService.java
├── SearchService.java
└── SearchLogService.java
新增(前端):
frontend/src/pages/knowledge-base/services.ts API 封装
```
## 实施顺序
```
前置条件(你手动执行)
① ollama pull nomic-embed-text(如果用 DeepSeek 则跳过)
② MinIO 创建 ims-attachments bucket
③ 如需 DeepSeek 则准备 API Key
代码实施(我写)
Step 0: AiConfigService + AiConfigController + 前端配置区
Step 1: pom.xml 加依赖 → mvn install 验证
Step 2: 8 个 Service 文件
Step 3: 填充 Controller
Step 4: 前端页面 + services.ts
验证
① 启动后端 + 前端
② 配置页选择 Ollama + nomic-embed-text → 保存
③ 上传一个 PDF → 检查是否解析/切片/向量化成功
④ 检索 → 检查返回结果
⑤ 查看审计日志
⑥ 切到 DeepSeek 重新索引 → 验证 DeepSeek 向量化
```