|
@@ -502,3 +502,69 @@ else:
|
|
|
▼
|
|
▼
|
|
|
⑤ 拼 Prompt → Qwen 生成 → 返回
|
|
⑤ 拼 Prompt → Qwen 生成 → 返回
|
|
|
```
|
|
```
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+## 九、第三轮变更:2020 药典补充 + 前端接真实 API + 线上部署(2026-07-20)
|
|
|
|
|
+
|
|
|
|
|
+### 9.1 变更明细
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 4: `docx_ingest.py` — 2025/2020 版本共存
|
|
|
|
|
+
|
|
|
|
|
+**问题**: 原 `dedup_old_versions()` 逻辑将非 2025 版药品标记为 `is_active=FALSE`,导致 2020 数据被隐藏。
|
|
|
|
|
+
|
|
|
|
|
+**修改**: 去重函数改为空操作,2025 和 2020 版数据均保持 `active`。检索层通过 `RerankerService` 的版本优先级(2025 +0.05)自然将 2025 排在前面。
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 5: `RetrieverService.java` — 2025 优先 / 2020 降级检索
|
|
|
|
|
+
|
|
|
|
|
+**修改**: `search()` 方法改为两轮策略:
|
|
|
|
|
+1. 第一轮:限定 `d.source_version = '2025年版'`
|
|
|
|
|
+2. 若结果 < 3 条或最高相似度 < 0.4,降级到全部版本(含 2020)
|
|
|
|
|
+3. 合并结果:2025 在前,2020 在后,去重
|
|
|
|
|
+
|
|
|
|
|
+新增 `embedWithCache()`:Embedding 向量缓存到 Redis(7 天 TTL),大幅降低 DashScope API 调用量。
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 6: `pdf2020_ingest.py` — 新建 2020 药典 PDF 导入脚本
|
|
|
|
|
+
|
|
|
|
|
+**功能**: 解析 `pharmacopoeia_2020_volume1_toc.pdf`(463 页,一部 2711 种中药),提取药品条目并向量化入库。
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 7: `static/index.html` — 前端从 Mock 切换为真实 API
|
|
|
|
|
+
|
|
|
|
|
+**问题**: 前端使用 `mockResponse()` 硬编码假数据,从未调用后端 API。
|
|
|
|
|
+
|
|
|
|
|
+**修改**: 完全重写 JavaScript:
|
|
|
|
|
+- 通过 `/api/v1/auth/guest` 获取 Token
|
|
|
|
|
+- 调用 `/api/v1/chat/stream`(SSE 流式)实时显示 AI 回答
|
|
|
|
|
+- 支持图片/视频上传(`/api/v1/chat/stream-image` 和 `stream-multimodal`)
|
|
|
|
|
+- 药品库调用 `/api/v1/drug/search` + `/api/v1/drug/{id}` 加载真实数据
|
|
|
|
|
+- 自动检测同主机 9000 端口
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 8: `verify_import.py` — 新建导入完整性验证脚本
|
|
|
|
|
+
|
|
|
|
|
+逐项检查:DOCX 文件数 vs DB 药品数、漏读药品、孤儿 chunks、无 chunk 药品、向量维度、抽查特定药品 sections。
|
|
|
|
|
+
|
|
|
|
|
+#### 变更 9: `database/reset_schema.sql` — 新建数据库重置脚本
|
|
|
|
|
+
|
|
|
|
|
+一键清空所有表和数据,重建最新 schema。配合 `schema.sql` 使用。
|
|
|
|
|
+
|
|
|
|
|
+### 9.2 最终文件清单(本次提交)
|
|
|
|
|
+
|
|
|
|
|
+| 文件 | 操作 | 说明 |
|
|
|
|
|
+|------|------|------|
|
|
|
|
|
+| `RerankerService.java` | **新建** | 重排序服务(阈值+n-gram+去重+版本优先级) |
|
|
|
|
|
+| `ChatController.java` | 修改 | +上传端点 +conversation_id +注入RerankerService |
|
|
|
|
|
+| `ChatPersistenceService.java` | 修改 | title回退 + 分页优化 |
|
|
|
|
|
+| `PromptService.java` | 修改 | 禁止编造 + 剂型不混用 + 建议换关键词 |
|
|
|
|
|
+| `RetrieverService.java` | 修改 | 剂型后缀 + ILIKE + 2025优先降级 + Embedding缓存 |
|
|
|
|
|
+| `DrugService.java` | 修改 | 分类树层次化 |
|
|
|
|
|
+| `DrugRepository.java` | 修改 | 新增子分类查询 |
|
|
|
|
|
+| `DrugController.java` | 修改 | 响应键名 tree |
|
|
|
|
|
+| `AdminController.java` | 修改 | +top_drugs +daily_queries |
|
|
|
|
|
+| `application.yml` | 修改 | multipart 50MB |
|
|
|
|
|
+| `docx_ingest.py` | 修改 | DrugChunker切片 + 2025/2020共存 |
|
|
|
|
|
+| `pdf2020_ingest.py` | **新建** | 2020药典PDF导入 |
|
|
|
|
|
+| `verify_import.py` | **新建** | 导入完整性验证 |
|
|
|
|
|
+| `reset_schema.sql` | **新建** | 数据库重置脚本 |
|
|
|
|
|
+| `static/index.html` | **重写** | Mock→真实API |
|
|
|
|
|
+| `OPERATIONS_GUIDE.md` | **新建** | 线上部署完整方案 |
|
|
|
|
|
+| `CHANGELOG_JAVA_PYTHON_PARITY.md` | **新建** | 本变更文档 |
|