Files

4.9 KiB
Raw Permalink Blame History

知识库模块实施计划

技术选型

项目 选择
文档解析 Apache Tika(一个依赖支持 PDF/Word/TXT/MD
向量化引擎 Ollama(默认 nomic-embed-text)或 DeepSeektext-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 向量化