feat(asl): Add DeepSearch smart literature retrieval MVP
Features: - Integrate unifuncs DeepSearch API (OpenAI compatible protocol) - SSE real-time streaming for AI thinking process display - Natural language input, auto-generate PubMed search strategy - Extract and display PubMed literature links - Database storage for task records (asl_research_tasks) Backend: - researchService.ts - Core business logic with SSE streaming - researchController.ts - SSE stream endpoint - researchWorker.ts - Async task worker (backup mode) - schema.prisma - AslResearchTask model Frontend: - ResearchSearch.tsx - Search page with unified content stream - ResearchSearch.css - Styling (unifuncs-inspired simple design) - ASLLayout.tsx - Enable menu item - api/index.ts - Add research API functions API Endpoints: - POST /api/v1/asl/research/stream - SSE streaming search - POST /api/v1/asl/research/tasks - Async task creation - GET /api/v1/asl/research/tasks/:taskId/status - Task status Documentation: - Development record for DeepSearch integration - Update ASL module status (v1.5) - Update system status (v3.7) Known limitations: - SSE mode, task interrupts when leaving page - Cost ~0.3 RMB per search (unifuncs API)
This commit is contained in:
242
docs/03-业务模块/ASL-AI智能文献/04-开发计划/06-智能文献检索DeepSearch集成方案.md
Normal file
242
docs/03-业务模块/ASL-AI智能文献/04-开发计划/06-智能文献检索DeepSearch集成方案.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 智能文献检索 DeepSearch 集成方案(MVP)
|
||||
|
||||
> **文档版本:** v1.2 MVP
|
||||
> **创建日期:** 2026-01-18
|
||||
> **维护者:** 开发团队
|
||||
> **模块位置:** ASL 模块 → 智能文献检索
|
||||
> **技术验证:** ✅ unifuncs DeepSearch API 已验证通过
|
||||
> **预计工期:** 3天
|
||||
|
||||
---
|
||||
|
||||
## 📋 MVP 范围
|
||||
|
||||
### 策略
|
||||
|
||||
| 层面 | 策略 | 理由 |
|
||||
|------|------|------|
|
||||
| **数据库** | 完整设计,所有字段都留 | 一次性到位,避免后续迁移 |
|
||||
| **功能开发** | 只做核心,其他先不做 | 快速验证,减少工作量 |
|
||||
|
||||
### ✅ 本次开发
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| 搜索输入框 | 自然语言输入 |
|
||||
| 开始检索按钮 | 触发 unifuncs API |
|
||||
| **思考过程展示** | **重点功能** - 实时展示 AI 检索思路 |
|
||||
| 检索进度条 | 状态反馈 |
|
||||
| 结果列表 | PMID、标题、作者、期刊、年份 |
|
||||
| PubMed 链接 | 跳转原文 |
|
||||
|
||||
### 🔜 后续迭代
|
||||
|
||||
| 功能 | 说明 |
|
||||
|------|------|
|
||||
| 左侧检索历史 | 数据库已存,UI后做 |
|
||||
| 导入到初筛 | 后续开发 |
|
||||
| 高级筛选 | 年份、研究类型等 |
|
||||
| 导出功能 | Excel、BibTeX |
|
||||
| Token 统计展示 | 使用量统计 |
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 技术架构
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 前端:React + Ant Design + React Query │
|
||||
│ - ResearchSearch.tsx(主页面) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓ HTTP
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 后端:Fastify + Prisma │
|
||||
│ - researchService.ts │
|
||||
│ - researchWorker.ts │
|
||||
│ - researchController.ts │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
↓ pg-boss
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ unifuncs DeepSearch API(异步模式) │
|
||||
│ - POST /v1/create_task │
|
||||
│ - GET /v1/query_task │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 💾 数据库设计(完整保留)
|
||||
|
||||
```prisma
|
||||
// prisma/schema.prisma
|
||||
|
||||
/// 智能文献检索任务
|
||||
model AslResearchTask {
|
||||
id String @id @default(cuid())
|
||||
|
||||
// 关联
|
||||
projectId String @map("project_id")
|
||||
userId String @map("user_id")
|
||||
|
||||
// 检索输入
|
||||
query String // 用户的自然语言查询
|
||||
filters Json? // 🔜 后续:高级筛选
|
||||
|
||||
// unifuncs 任务
|
||||
externalTaskId String? @map("external_task_id")
|
||||
|
||||
// 状态
|
||||
status String @default("pending") // pending/processing/completed/failed
|
||||
errorMessage String? @map("error_message")
|
||||
|
||||
// 结果
|
||||
resultCount Int? @map("result_count")
|
||||
rawResult String? @map("raw_result") @db.Text
|
||||
reasoningContent String? @map("reasoning_content") @db.Text // 思考过程
|
||||
literatures Json? // 解析后的文献列表
|
||||
|
||||
// 统计(🔜 后续展示)
|
||||
tokenUsage Json? @map("token_usage")
|
||||
searchCount Int? @map("search_count")
|
||||
readCount Int? @map("read_count")
|
||||
iterations Int?
|
||||
|
||||
// 时间
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
completedAt DateTime? @map("completed_at")
|
||||
|
||||
@@map("asl_research_tasks")
|
||||
@@schema("asl_schema")
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔌 API 设计
|
||||
|
||||
### 本次开发(2个)
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `POST` | `/api/v1/asl/research/tasks` | 创建检索任务 |
|
||||
| `GET` | `/api/v1/asl/research/tasks/:taskId/status` | 获取状态+思考过程+结果 |
|
||||
|
||||
### 后续开发
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| `GET` | `/api/v1/asl/research/history` | 🔜 检索历史 |
|
||||
| `POST` | `/api/v1/asl/research/tasks/:taskId/import` | 🔜 导入到初筛 |
|
||||
|
||||
---
|
||||
|
||||
## 🎨 前端设计
|
||||
|
||||
### 页面布局
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ 智能文献检索 │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐│
|
||||
│ │ 🔍 输入您的研究问题,AI将自动在PubMed中检索... ││
|
||||
│ │ ││
|
||||
│ │ [ ] ││
|
||||
│ │ ││
|
||||
│ │ [🚀 开始检索] ││
|
||||
│ └─────────────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐│
|
||||
│ │ 💭 AI 思考过程 [展开 ▼] ││
|
||||
│ ├─────────────────────────────────────────────────────────┤│
|
||||
│ │ 用户查询:"糖尿病 SGLT2抑制剂 心血管 RCT" ││
|
||||
│ │ 这是一个关于糖尿病药物的学术文献查询... ││
|
||||
│ │ ││
|
||||
│ │ 📊 检索策略: ││
|
||||
│ │ 1. 核心关键词:SGLT2 inhibitors, cardiovascular ││
|
||||
│ │ 2. MeSH术语:Sodium-Glucose Transporter 2 Inhibitors ││
|
||||
│ │ ││
|
||||
│ │ 🔍 正在执行第 5/15 轮检索... ││
|
||||
│ └─────────────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ ⏳ 检索进度 │
|
||||
│ ████████████████████░░░░░░░░░░ 65% │
|
||||
│ │
|
||||
│ ┌─────────────────────────────────────────────────────────┐│
|
||||
│ │ 📚 检索结果 (15篇) ││
|
||||
│ ├─────────────────────────────────────────────────────────┤│
|
||||
│ │ 1. PMID: 26378978 [PubMed ↗] ││
|
||||
│ │ Empagliflozin, Cardiovascular Outcomes... ││
|
||||
│ │ Zinman B, et al. | NEJM | 2015 ││
|
||||
│ ├─────────────────────────────────────────────────────────┤│
|
||||
│ │ 2. PMID: 28605608 [PubMed ↗] ││
|
||||
│ │ Canagliflozin and Cardiovascular... ││
|
||||
│ │ Neal B, et al. | NEJM | 2017 ││
|
||||
│ └─────────────────────────────────────────────────────────┘│
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 文件结构
|
||||
|
||||
### 后端
|
||||
|
||||
```
|
||||
backend/src/modules/asl/
|
||||
├── controllers/
|
||||
│ └── researchController.ts # 2个API
|
||||
├── services/
|
||||
│ └── researchService.ts # 核心逻辑
|
||||
├── workers/
|
||||
│ └── researchWorker.ts # unifuncs轮询
|
||||
└── routes/
|
||||
└── research.ts # 路由配置
|
||||
```
|
||||
|
||||
### 前端
|
||||
|
||||
```
|
||||
frontend-v2/src/modules/asl/
|
||||
├── pages/
|
||||
│ └── ResearchSearch.tsx # 主页面
|
||||
└── api/
|
||||
└── research.ts # API函数
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📅 开发计划(3天)
|
||||
|
||||
| 天数 | 任务 | 产出 |
|
||||
|------|------|------|
|
||||
| **Day 1** | 数据库 + 后端 Service + Worker | Schema迁移 + 核心逻辑 |
|
||||
| **Day 2** | 后端 Controller + 前端页面 | API + 页面框架 |
|
||||
| **Day 3** | 思考过程展示 + 联调测试 | **重点:思考过程UI** |
|
||||
|
||||
---
|
||||
|
||||
## ✅ MVP 验收标准
|
||||
|
||||
- [ ] 用户可输入研究问题
|
||||
- [ ] 点击"开始检索"后显示进度
|
||||
- [ ] **思考过程实时展示**
|
||||
- [ ] 检索完成后显示文献列表
|
||||
- [ ] 文献可跳转到 PubMed
|
||||
|
||||
---
|
||||
|
||||
## 🔧 环境变量
|
||||
|
||||
```bash
|
||||
# .env
|
||||
UNIFUNCS_API_KEY=sk-xxx
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档维护者**: 开发团队
|
||||
**最后更新**: 2026-01-18
|
||||
**文档状态**: ✅ MVP方案确认,开始开发
|
||||
Reference in New Issue
Block a user