feat(aia): Complete AIA V2.0 with universal streaming capabilities

Major Changes:
- Add StreamingService with OpenAI Compatible format
- Upgrade Chat component V2 with Ant Design X integration
- Implement AIA module with 12 intelligent agents
- Update API routes to unified /api/v1 prefix
- Update system documentation

Backend (~1300 lines):
- common/streaming: OpenAI Compatible adapter
- modules/aia: 12 agents, conversation service, streaming integration
- Update route versions (RVW, PKB to v1)

Frontend (~3500 lines):
- modules/aia: AgentHub + ChatWorkspace (100% prototype restoration)
- shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook
- Update API endpoints to v1

Documentation:
- AIA module status guide
- Universal capabilities catalog
- System overview updates
- All module documentation sync

Tested: Stream response verified, authentication working
Status: AIA V2.0 core completed (85%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,19 +1,18 @@
# AI<41><EFBFBD><E7AE84><EFBFBD>讃璅<E79285> - API霈曇恣閫<E681A3><E996AB>
> **文档版本:** v3.0
> **创建日期:** 2025-10-29
> **维护者:** AI智能文献开发团队
> **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗?* v3.0
> **<EFBFBD>𥕦遣<EFBFBD><EFBFBD>嚗?* 2025-10-29
> **蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** AI<41><EFBFBD><E7AE84><EFBFBD>讃撘<E8AE83><E69298>穃𣪧<E7A983>?
> **<2A><><EFBFBD>擧凒<E693A7><EFBFBD>** 2025-11-23
> **更新说明:** 新增全文复筛API5个核心接口
> **<EFBFBD>湔鰵霂湔<EFBFBD>嚗?* <20><EFBFBD><E595A3><EFBFBD>憭滨<E686AD>API嚗?銝芣瓲敹<E793B2>𦻖<EFBFBD><F0A6BB96><EFBFBD>
---
## <20><> <20><>﹝霂湔<E99C82>
本文档描述AI智能文献模块的API设计规范包括接口定义、请求响应格式、错误处理等。
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>餈蚊I<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃璅<EFBFBD><EFBFBD><EFBFBD>PI霈曇恣閫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>祆𦻖<EFBFBD><EFBFBD><EFBFBD>銋剹<EFBFBD><EFBFBD>窈瘙<EFBFBD><EFBFBD>摨娍聢撘譌<EFBFBD><EFBFBD><EFBFBD>霂臬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
**API<50><EFBFBD>靽⊥<E99DBD>**:
- **Base URL**: `http://localhost:3001` (开发环境)
- **Base URL**: `http://localhost:3001` (<EFBFBD><EFBFBD>𤑳㴓憓?
- **API<50><EFBFBD>**: `/api/v1/asl`
- **<2A>讛悅**: HTTP/HTTPS
- **<2A>唳旿<E594B3><EFBFBD>**: JSON
@@ -26,9 +25,8 @@
1. **RESTful霈曇恣**: <20>萄儐RESTful API霈曇恣閫<E681A3><E996AB>
2. **蝏煺<E89D8F><E785BA><EFBFBD><E6BB9A><EFBFBD>**: `{ success: boolean, data?: any, error?: string }`
3. **<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**: <20>𡑒”<F0A19192>亙藁<E4BA99><EFBFBD><E88880><EFBFBD><EFBFBD><E296B3>
4. **版本控制**: API版本化管理 (`/api/v1/...`)
5. **错误处理**: 统一的HTTP状态码和错误消息
6. **模块化路由**: `/api/v1/asl/...` 独立路由空间
4. **<EFBFBD><EFBFBD>𧋦<EFBFBD><EFBFBD>**: API<EFBFBD><EFBFBD>𧋦<EFBFBD>𣇉恣<EFBFBD>?(`/api/v1/...`)
5. **<EFBFBD>躰秤憭<EFBFBD><EFBFBD>**: 蝏煺<EFBFBD><EFBFBD><EFBFBD>TTP<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂舀<EFBFBD><EFBFBD>?6. **璅<E79285><E288AA>𤥁楝<F0A4A581>?*: `/api/v1/asl/...` <20><EFBFBD>頝舐眏蝛粹𡢿
---
@@ -36,24 +34,22 @@
### 1. 憿寧𤌍蝞∠<E89D9E> (Projects)
#### 1.1 创建筛选项目
#### 1.1 <EFBFBD>𥕦遣蝑偦<EFBFBD>厰★<EFBFBD>?
**<2A>亙藁**: `POST /api/v1/asl/projects`
**认证**: 需要 (测试阶段默认用户ID)
**说明**: 创建一个新的文献筛选项目
**请求体**:
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?(瘚贝<E7989A><E8B49D>嗆挾暺䁅恕<E48185><EFBFBD>ID)
**霂湔<EFBFBD>**: <EFBFBD>𥕦遣銝<EFBFBD>銝芣鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厰★<EFBFBD>?
**霂瑟<E99C82>雿?*:
```json
{
"projectName": "SGLT2抑制剂系统综述",
"projectName": "SGLT2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
"picoCriteria": {
"P": "2型糖尿病成人患者",
"P": "2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD><EFBFBD><EFBFBD>?,
"I": "SGLT2<54><EFBFBD><E7A983><EFBFBD><EFBFBD>empagliflozin<69><6E>apagliflozin蝑㚁<E89D91>",
"C": "摰㗇<E691B0><E39787><EFBFBD><EFBFBD>撣貉<E692A3><E8B289><EFBFBD><E6BBA8><EFBFBD>",
"O": "敹<><E695B9>蝞∠<E89D9E><EFBFBD>嚗㇈ACE<43><45><EFBFBD>銵唬<E98AB5><E594AC><EFBFBD><EFBCB5><EFBFBD><EFBFBD>蝞⊥香鈭∴<E988AD>",
"S": "<22>𤩺㦤撖寧<E69296>霂閖<E99C82> (RCT)"
},
"inclusionCriteria": "英文文献RCT研究2010年后发表",
"inclusionCriteria": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃嚗朙CT<EFBFBD>𠉛弦嚗?010撟游<E6929F><E6B8B8>𤏸”",
"exclusionCriteria": "<22><><EFBFBD><EFBFBD><EFBFBD>嚗𣬚遞餈堆<E9A488><E5A086><EFBFBD>摰鮋<E691B0>",
"screeningConfig": {
"models": ["deepseek-chat", "qwen-max"],
@@ -69,15 +65,15 @@
"data": {
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
"userId": "asl-test-user-001",
"projectName": "SGLT2抑制剂系统综述",
"projectName": "SGLT2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
"picoCriteria": {
"population": "2型糖尿病成人患者",
"intervention": "SGLT2抑制剂",
"population": "2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD><EFBFBD><EFBFBD>?,
"intervention": "SGLT2<EFBFBD><EFBFBD><EFBFBD>?,
"comparison": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"outcome": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"studyDesign": "<EFBFBD>𤩺<EFBFBD><EFBFBD> (RCT)"
},
"inclusionCriteria": "英文文献RCT研究2010年后发表",
"inclusionCriteria": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CT<EFBFBD>𠉛?010<EFBFBD><EFBFBD>𤏸",
"exclusionCriteria": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"status": "draft",
"screeningConfig": {
@@ -97,9 +93,9 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
-d '{
"projectName": "瘚贝<E7989A>憿寧𤌍",
"picoCriteria": {
"population": "成人患者",
"population": "<EFBFBD>𣂷犖<EFBFBD><EFBFBD><EFBFBD>?,
"intervention": "<22><EFBFBD>A",
"comparison": "安慰剂",
"comparison": "摰㗇<EFBFBD><EFBFBD>?,
"outcome": "銝餉<E98A9D>蝏枏<E89D8F>",
"studyDesign": "RCT"
},
@@ -113,11 +109,9 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
#### 1.2 <20><EFBFBD>憿寧𤌍<E5AFA7>𡑒”
**<EFBFBD>亙藁**: `GET /api/v1/asl/projects`
**认证**: 需要
**说明**: 获取当前用户的所有筛选项目
**查询参数**: 无
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>敶枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厰★<EFBFBD>?
**<EFBFBD>亥砭<EFBFBD><EFBFBD>㺭**: <20>?
**<EFBFBD><EFBFBD>蝷箔<EFBFBD>**:
```json
{
@@ -126,7 +120,7 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
{
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
"userId": "asl-test-user-001",
"projectName": "SGLT2抑制剂系统综述",
"projectName": "SGLT2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
"picoCriteria": {...},
"status": "screening",
"createdAt": "2025-11-18T07:30:00.000Z",
@@ -150,9 +144,8 @@ curl http://localhost:3001/api/v1/asl/projects
#### 1.3 <20><EFBFBD>憿寧𤌍霂行<E99C82>
**<EFBFBD>亙藁**: `GET /api/v1/asl/projects/:projectId`
**认证**: 需要
**说明**: 获取指定项目的详细信息
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿寧𤌍<EFBFBD><EFBFBD>祕蝏<EFBFBD><EFBFBD>?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `projectId`: 憿寧𤌍ID (UUID)
@@ -163,15 +156,15 @@ curl http://localhost:3001/api/v1/asl/projects
"data": {
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
"userId": "asl-test-user-001",
"projectName": "SGLT2抑制剂系统综述",
"projectName": "SGLT2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
"picoCriteria": {
"population": "2型糖尿病成人患者",
"intervention": "SGLT2抑制剂",
"population": "2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD><EFBFBD><EFBFBD>?,
"intervention": "SGLT2<EFBFBD><EFBFBD><EFBFBD>?,
"comparison": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"outcome": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"studyDesign": "<EFBFBD>𤩺<EFBFBD><EFBFBD> (RCT)"
},
"inclusionCriteria": "英文文献RCT研究2010年后发表",
"inclusionCriteria": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>CT<EFBFBD>𠉛?010<EFBFBD><EFBFBD>𤏸",
"exclusionCriteria": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>",
"status": "screening",
"screeningConfig": {
@@ -199,13 +192,13 @@ curl http://localhost:3001/api/v1/asl/projects/{projectId}
#### 1.4 <20>湔鰵憿寧𤌍
**<EFBFBD>亙藁**: `PUT /api/v1/asl/projects/:projectId`
**认证**: 需要
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<E99C82>**: <20>湔鰵憿寧𤌍靽⊥<E99DBD>
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `projectId`: 憿寧𤌍ID (UUID)
**请求体**(支持部分更新):
**霂瑟<EFBFBD>雿?*嚗<>𣈲<EFBFBD><F0A388B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
```json
{
"projectName": "<22>湔鰵<E6B994>𡒊<EFBFBD>憿寧𤌍<E5AFA7>滨妍",
@@ -239,9 +232,8 @@ curl -X PUT http://localhost:3001/api/v1/asl/projects/{projectId} \
#### 1.5 <20>𣳇膄憿寧𤌍
**<EFBFBD>亙藁**: `DELETE /api/v1/asl/projects/:projectId`
**认证**: 需要
**说明**: 删除项目及所有关联数据(级联删除)
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD>𣳇膄憿寧𤌍<EFBFBD>𦠜<EFBFBD><EFBFBD><EFBFBD><EFBFBD>娍㺭<EFBFBD><EFBFBD>蝥扯<EFBFBD><EFBFBD>𣳇膄嚗?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `projectId`: 憿寧𤌍ID (UUID)
@@ -262,13 +254,11 @@ curl -X DELETE http://localhost:3001/api/v1/asl/projects/{projectId}
### 2. <20><>讃蝞∠<E89D9E> (Literatures)
#### 2.1 导入文献JSON格式
#### 2.1 撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗㇇SON<EFBFBD><EFBFBD>嚗?
**<2A>亙藁**: `POST /api/v1/asl/literatures/import`
**认证**: 需要
**说明**: 批量导入文献JSON格式
**请求体**:
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗㇇SON<EFBFBD><EFBFBD>嚗?
**霂瑟<E99C82>雿?*:
```json
{
"projectId": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
@@ -304,13 +294,13 @@ curl -X DELETE http://localhost:3001/api/v1/asl/projects/{projectId}
```
**摮埈挾霂湔<E99C82>**:
- `pmid`: PubMed ID (可选)
- `pmid`: PubMed ID (<EFBFBD><EFBFBD>?
- `title`: <20><><EFBFBD><E8AE83><EFBFBD> (敹<>)
- `abstract`: <20><EFBFBD> (敹<>)
- `authors`: 作者 (可选)
- `journal`: 期刊 (可选)
- `publicationYear`: 发表年份 (可选)
- `doi`: DOI (可选)
- `authors`: 雿𡏭<EFBFBD>?(<28><EFBFBD>?
- `journal`: <EFBFBD><EFBFBD> (<28><EFBFBD>?
- `publicationYear`: <EFBFBD>𤏸”撟港遢 (<28><EFBFBD>?
- `doi`: DOI (<EFBFBD><EFBFBD>?
**瘚贝<E7989A><E8B49D>賭誘**:
```bash
@@ -329,10 +319,9 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import \
---
#### 2.2 导入文献Excel文件
#### 2.2 撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗𠄌xcel<EFBFBD><EFBFBD>辣嚗?
**<2A>亙藁**: `POST /api/v1/asl/literatures/import-excel`
**认证**: 需要
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<E99C82>**: 隞㙎xcel<65><6C><EFBFBD><EFBFBD>撖澆<E69296><E6BE86><EFBFBD>
**霂瑟<E99C82>蝐餃<E89D90>**: `multipart/form-data`
@@ -342,15 +331,15 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import \
- `projectId`: 憿寧𤌍ID
**Excel<65><EFBFBD><EFBFBD><E996AC>**:
| 列名(中英文均可) | 必填 | 说明 |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>虾嚗?| 敹<> | 霂湔<E99C82> |
|------------------|------|------|
| PMID / pmid / PMID编号 | | PubMed ID |
| Title / title / 标题 | 是 | 文献标题 |
| Abstract / abstract / 摘要 | 是 | 摘要 |
| Authors / authors / 作者 | 否 | 作者 |
| Journal / journal / 期刊 | 否 | 期刊名称 |
| Year / year / 年份 | 否 | 发表年份 |
| DOI / doi | | DOI |
| PMID / pmid / PMID蝻硋噡 | <EFBFBD>?| PubMed ID |
| Title / title / <EFBFBD><EFBFBD><EFBFBD> | <20>?| <20><><EFBFBD><E8AE83><EFBFBD> |
| Abstract / abstract / <EFBFBD><EFBFBD> | <20>?| <20><EFBFBD> |
| Authors / authors / 雿𡏭<EFBFBD>?| <20>?| 雿𡏭<E99BBF>?|
| Journal / journal / <EFBFBD><EFBFBD> | <20>?| <20><EFBFBD><E7AC94>滨妍 |
| Year / year / 撟港遢 | <20>?| <20>𤏸”撟港遢 |
| DOI / doi | <EFBFBD>?| DOI |
**<EFBFBD><EFBFBD>蝷箔<EFBFBD>**:
```json
@@ -375,16 +364,13 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import-excel \
#### 2.3 <20><EFBFBD><E79195><EFBFBD><EFBFBD>𡑒”
**<EFBFBD>亙藁**: `GET /api/v1/asl/projects/:projectId/literatures`
**认证**: 需要
**说明**: 获取项目的文献列表(支持分页)
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵剁<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>△嚗?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `projectId`: 憿寧𤌍ID (UUID)
**<EFBFBD>亥砭<EFBFBD><EFBFBD>㺭**:
- `page`: 页码(默认: 1
- `limit`: 每页数量(默认: 50最大: 100
- `page`: 憿萇<EFBFBD><EFBFBD><EFBFBD>霈? 1嚗?- `limit`: 瘥誯△<E8AAAF><EFBFBD><EFBFBD><E59A97>霈? 50嚗峕<E59A97>憭? 100嚗?
**<2A><EFBFBD>蝷箔<E89DB7>**:
```json
{
@@ -430,7 +416,7 @@ curl "http://localhost:3001/api/v1/asl/projects/{projectId}/literatures?page=1&l
#### 2.4 <20>𣳇膄<F0A3B387><E88684>
**<EFBFBD>亙藁**: `DELETE /api/v1/asl/literatures/:literatureId`
**认证**: 需要
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<E99C82>**: <20>𣳇膄<F0A3B387><E88684><EFBFBD><EFBFBD><EFBFBD>讃嚗<E8AE83><EFBFBD>𥪜<EFBFBD><F0A5AA9C><EFBFBD><E696A4><EFBFBD><E58EA9><EFBFBD>
**頝臬<E9A09D><E887AC><EFBFBD>**:
@@ -451,17 +437,14 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
---
### 3. 筛选任务管理 (Screening Tasks)
> **注意**: 以下接口为待实现功能Week 2计划
#### 3.1 启动筛选任务
### 3. 蝑偦<EFBFBD>劐遙<EFBFBD>∠恣<EFBFBD>?(Screening Tasks)
> **瘜冽<E7989C>**: 隞乩<E99A9E><E4B9A9>亙藁銝箏<E98A9D>摰䂿緵<E482BF><EFBFBD>嚗Áeek 2霈<E99C88>嚗?
#### 3.1 <20>臬𢆡蝑偦<E89D91>劐遙<E58A90>?
**<2A>亙藁**: `POST /api/v1/asl/projects/:projectId/screening/start`
**认证**: 需要
**说明**: 启动AI筛选任务异步执行
**请求体**:
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD>臬𢆡AI蝑偦<EFBFBD>劐遙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
**霂瑟<E99C82>雿?*:
```json
{
"taskType": "title_abstract",
@@ -485,12 +468,10 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
---
#### 3.2 获取筛选进度
#### 3.2 <EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD>摨?
**<2A>亙藁**: `GET /api/v1/asl/tasks/:taskId/progress`
**认证**: 需要
**说明**: 获取筛选任务进度
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>蝑偦<EFBFBD>劐遙<EFBFBD><EFBFBD>摨?
**<EFBFBD><EFBFBD>蝷箔<EFBFBD>**:
```json
{
@@ -511,18 +492,13 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
---
#### 3.3 获取筛选结果
#### 3.3 <EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>?
**<2A>亙藁**: `GET /api/v1/asl/projects/:projectId/results`
**认证**: 需要
**说明**: 获取筛选结果列表
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>蝑偦<EFBFBD><EFBFBD><EFBFBD>𨅯<EFBFBD>銵?
**<EFBFBD>亥砭<EFBFBD><EFBFBD>㺭**:
- `page`: 页码(默认: 1
- `limit`: 每页数量(默认: 50
- `conflictOnly`: 只显示冲突项(布尔值)
- `finalDecision`: 筛选决策include / exclude / pending
- `page`: 憿萇<EFBFBD><EFBFBD><EFBFBD>霈? 1嚗?- `limit`: 瘥誯△<E8AAAF><EFBFBD><EFBFBD><E59A97>霈? 50嚗?- `conflictOnly`: <20>芣遬蝷箏<E89DB7><EFBFBD>★嚗<E29885><E59A97>撠𥪜<E692A0><EFBFBD>
- `finalDecision`: 蝑偦<E89D91><EFBFBD>蝑吔<E89D91>include / exclude / pending嚗?
**<2A><EFBFBD>蝷箔<E89DB7>**:
```json
{
@@ -558,10 +534,10 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
#### 3.4 摰⊥瓲<E28AA5><EFBFBD><E884A9><EFBFBD>
**<EFBFBD>亙藁**: `POST /api/v1/asl/results/review`
**认证**: 需要
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<E99C82>**: <20><EFBFBD>摰⊥瓲<E28AA5><EFBFBD><E884A9><EFBFBD>
**请求体**:
**霂瑟<EFBFBD>雿?*:
```json
{
"projectId": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
@@ -593,15 +569,14 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
### 4. <20><EFBFBD>憭滨<E686AD>蝞∠<E89D9E> (Fulltext Screening)
> **状态**: Day 5实现中(2025-11-23
> **<EFBFBD><EFBFBD>?*: <EFBFBD>?Day 5摰䂿緵銝哨<EFBFBD>2025-11-23嚗?
#### 4.1 <20>𥕦遣<F0A595A6><EFBFBD>憭滨<E686AD>隞餃𦛚
**<EFBFBD>亙藁**: `POST /api/v1/asl/fulltext-screening/tasks`
**认证**: 需要
**说明**: 创建全文复筛任务对标题初筛通过的文献进行12字段评估
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD>𥕦遣<EFBFBD><EFBFBD>憭滨<EFBFBD>隞餃𦛚嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵?2摮埈挾霂<E68CBE>
**请求体**:
**霂瑟<EFBFBD>雿?*:
```json
{
"projectId": "proj-123",
@@ -615,10 +590,7 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
**摮埈挾霂湔<E99C82>**:
- `projectId`: 憿寧𤌍ID嚗<44><E59A97>憛恬<E6869B>
- `literatureIds`: 敺<><E695BA><EFBFBD><EFBFBD><E39787>埋D<E59F8B>𡑒”嚗<E2809D><E59A97>憛恬<E6869B><E681AC><EFBFBD><EFBFBD><EFBFBD><E7B393><EFBFBD><EFBFBD><EFBFBD><E89098><EFBFBD><E69C9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- `modelA`: 模型A名称可选默认: deepseek-v3
- `modelB`: 模型B名称可选默认: qwen-max
- `promptVersion`: Prompt版本可选默认: v1.0.0
- `modelA`: <EFBFBD>A<EFBFBD>滨妍嚗<EFBFBD><EFBFBD><EFBFBD>暺䁅恕: deepseek-v3嚗?- `modelB`: 璅<E79285>B<EFBFBD>滨妍嚗<E5A68D><EFBFBD><EFBFBD>暺䁅恕: qwen-max嚗?- `promptVersion`: Prompt<70><74>𧋦嚗<F0A78BA6><EFBFBD><EFBFBD>暺䁅恕: v1.0.0嚗?
**<2A><EFBFBD>蝷箔<E89DB7>**:
```json
{
@@ -631,22 +603,20 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
"modelA": "deepseek-v3",
"modelB": "qwen-max",
"createdAt": "2025-11-23T10:00:00.000Z",
"message": "任务创建成功,正在后台处理"
"message": "𦛚<EFBFBD>𥕦<EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
}
}
```
**銝𡁜𦛚閫<F0A69B9A><E996AB>**:
1. 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD><EFBFBD><E39787>格糓<E6A0BC><EFBFBD>鈭舘砲憿寧𤌍
2. 检查文献是否有可用的PDF`pdfStatus === 'ready'`
3. 任务创建后立即返回,后台异步处理
4. 如果部分文献PDF未就绪仅处理PDF就绪的文献
2. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>格糓<EFBFBD><EFBFBD><EFBFBD>舐鍂<EFBFBD><EFBFBD>DF嚗ǑpdfStatus === 'ready'`嚗?3. 隞餃𦛚<E9A483>𥕦遣<F0A595A6>𡒊<EFBFBD><F0A1928A><EFBFBD><E594BE><EFBFBD><E797B9>𤾸蝱撘<E89DB1>郊憭<E9838A><E686AD>
4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃PDF<EFBFBD>芸停蝏迎<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DF撠梁貌<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
**<2A>躰秤<E8BAB0><EFBFBD>**:
```json
{
"success": false,
"error": "部分文献PDF未就绪无法开始全文复筛"
"error": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>PDF<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
}
```
@@ -667,9 +637,8 @@ curl -X POST http://localhost:3001/api/v1/asl/fulltext-screening/tasks \
#### 4.2 <20><EFBFBD>隞餃𦛚餈𥕦漲
**<EFBFBD>亙藁**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId`
**认证**: 需要
**说明**: 获取全文复筛任务的详细进度信息
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>憭滨<EFBFBD>隞餃𦛚<EFBFBD><EFBFBD>祕蝏<EFBFBD><EFBFBD>摨虫縑<EFBFBD>?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `taskId`: 隞餃𦛚ID
@@ -715,15 +684,9 @@ curl -X POST http://localhost:3001/api/v1/asl/fulltext-screening/tasks \
```
**摮埈挾霂湔<E99C82>**:
- `status`: 任务状态
- `pending`: 待处理
- `processing`: 处理中
- `completed`: 已完成
- `failed`: 失败
- `cancelled`: 已取消
- `successCount`: 双模型都成功的文献数
- `degradedCount`: 仅一个模型成功的文献数(降级模式)
- `failedCount`: 双模型都失败的文献数
- `status`: 隞餃𦛚<EFBFBD><EFBFBD>? - `pending`: 敺<><E695BA><EFBFBD>? - `processing`: 憭<><E686AD>銝? - `completed`: 撌脣<E6928C><E884A3>? - `failed`: 憭梯揖
- `cancelled`: 撌脣<E6928C>瘨?- `successCount`: <20>峕芋<E5B395><EFBFBD><E99285>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD><EFBFBD>格㺭
- `degradedCount`: 隞<><E99A9E>銝芣芋<E88AA3>𧢲<EFBFBD><F0A7A2B2><EFBFBD><E6AFBA><EFBFBD><EFBFBD><EFBFBD><E5A086>滨漣璅<E79285>嚗?- `failedCount`: <20>峕芋<E5B395><EFBFBD>憭梯揖<E6A2AF><E68F96><EFBFBD><EFBFBD>格㺭
- `totalCost`: 蝝航恣<E888AA>鞉𧋦嚗<F0A78BA6><E59A97>雿㵪<E99BBF><E3B5AA><EFBFBD><EFBFBD>
**瘚贝<E7989A><E8B49D>賭誘**:
@@ -736,7 +699,7 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
#### 4.3 <20><EFBFBD>隞餃𦛚蝏𤘪<E89D8F>
**<EFBFBD>亙藁**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId/results`
**认证**: 需要
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<E99C82>**: <20><EFBFBD><E79195><EFBFBD>憭滨<E686AD>隞餃𦛚<E9A483><F0A69B9A>祕蝏<E7A595><E89D8F><EFBFBD><EFBFBD><E9A0A3><EFBFBD>蝑偦<E89D91><EFBFBD><E58CA7><EFBFBD>
**頝臬<E9A09D><E887AC><EFBFBD>**:
@@ -746,13 +709,7 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
- `filter`: 蝏𤘪<E89D8F>蝑偦<E89D91><EFBFBD><E39A81><EFBFBD><EFBFBD>
- `all`: <20><EFBFBD><EFBFBD><E59A97>霈歹<E99C88>
- `conflict`: 隞<><E99A9E><EFBFBD>
- `pending`: 待审核
- `reviewed`: 已审核
- `page`: 页码(默认: 1
- `pageSize`: 每页数量(默认: 20最大: 100
- `sortBy`: 排序字段(可选: `priority`, `createdAt`
- `sortOrder`: 排序方向(`asc` | `desc`,默认: `desc`
- `pending`: <EFBFBD><EFBFBD>? - `reviewed`: 撌脣恣<E884A3>?- `page`: 憿萇<E686BF><EFBFBD><E59A97>霈? 1嚗?- `pageSize`: 瘥誯△<E8AAAF><EFBFBD><EFBFBD><E59A97>霈? 20嚗峕<E59A97>憭? 100嚗?- `sortBy`: <20><EFBFBD>摮埈挾嚗<E68CBE><EFBFBD>? `priority`, `createdAt`嚗?- `sortOrder`: <20><EFBFBD><E98DA6><EFBFBD>嚗Ǒasc` | `desc`嚗屸<E59A97>霈? `desc`嚗?
**<2A><EFBFBD>蝷箔<E89DB7>**:
```json
{
@@ -782,25 +739,25 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
"field1_source": {
"assessment": "摰峕㟲",
"evidence": "蝚砌<E89D9A>雿𡏭<E99BBF><F0A18FAD>mith JA, Lancet 2023",
"location": "第1页",
"location": "蝚?憿?,
"confidence": 0.98
},
"field2_studyType": {
"assessment": "",
"evidence": "多中心随机对照试验",
"location": "Methods第2页",
"evidence": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?,
"location": "Methods蝚?憿?,
"confidence": 0.95
},
"field5_population": {
"assessment": "",
"evidence": "纳入500例2型糖尿病患者年龄58±12岁",
"location": "Methods第3页",
"evidence": "<EFBFBD>500?<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>5812?,
"location": "Methods蝚?憿?,
"confidence": 0.92
},
"field9_outcomes": {
"assessment": "",
"evidence": "主要结局eGFR变化-15.2±3.5 ml/min vs -8.1±2.9 ml/min",
"location": "Results第5页表2",
"evidence": "<EFBFBD><EFBFBD>eGFR<EFBFBD><EFBFBD>?15.23.5 ml/min vs -8.12.9 ml/min",
"location": "Results?2",
"confidence": 0.96
}
},
@@ -864,8 +821,8 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
"fields": {
"field9_outcomes": {
"assessment": "",
"evidence": "未报告具体数值仅有P值",
"location": "Results第4页",
"evidence": "<EFBFBD>𥁒<EFBFBD>𠰴<EFBFBD>𤘪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>P<EFBFBD>?,
"location": "Results蝚?憿?,
"confidence": 0.88
}
},
@@ -922,23 +879,17 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
```
**12摮埈挾霂湔<E99C82>**:
- `field1_source`: 文献来源(作者、期刊、年份等)
- `field2_studyType`: 研究类型RCT、队列研究等
- `field3_studyDesign`: 研究设计细节
- `field1_source`: <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨳍<EFBFBD><EFBFBD>僑隞賜<EFBFBD>嚗?- `field2_studyType`: <20>𠉛弦蝐餃<E89D90>嚗㇌CT<43><54><EFBFBD><EFBFBD><EFBFBD>蝛嗥<E89D9B>嚗?- `field3_studyDesign`: <20>𠉛弦霈曇恣蝏<E681A3><E89D8F>
- `field4_diagnosis`: <20><EFBFBD>霂𦠜鱏<F0A6A09C><E9B18F><EFBFBD>
- `field5_population`: 鈭箇黎<E7AE87><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A587><EFBFBD>抅蝥輻<E89DA5>嚗争<E59A97>
- `field6_baseline`: 基线数据⭐
- `field7_intervention`: 干预措施⭐
- `field8_control`: 对照措施
- `field9_outcomes`: 结局指标⭐⭐⭐ 最关键
- `field6_baseline`: <EFBFBD>箇瑪<EFBFBD>唳旿潃?- `field7_intervention`: 撟脤<E6929F><E884A4>芣鴌潃?- `field8_control`: 撖寧<E69296><E5AFA7>芣鴌
- `field9_outcomes`: 蝏枏<E89D8F><E69E8F><EFBFBD><EFBFBD>潃鐥<E6BD83>潃?<3F><><EFBFBD>喲睸
- `field10_statistics`: 蝏蠘恣<E8A098><EFBFBD>
- `field11_quality`: 质量评价(随机化、盲法等)⭐⭐
- `field12_other`: 其他信息
- `field11_quality`: 韐券<EFBFBD><EFBFBD>遠嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤩅瘜閧<EFBFBD>嚗争<EFBFBD>潃?- `field12_other`: <20><EFBFBD>靽⊥<E99DBD>
**瘚贝<E7989A><E8B49D>賭誘**:
```bash
# 获取所有结果
curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results"
# <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results"
# 隞<><EFBFBD><EFBFBD><EFBFBD>
curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results?filter=conflict"
@@ -952,13 +903,12 @@ curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
#### 4.4 鈭箏極摰⊥瓲<E28AA5><EFBFBD>
**<EFBFBD>亙藁**: `PUT /api/v1/asl/fulltext-screening/results/:resultId/decision`
**认证**: 需要
**说明**: 对单个全文复筛结果进行人工审核决策
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: 撖孵<EFBFBD>銝芸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑𤤿<EFBFBD><EFBFBD>𡏭<EFBFBD>銵䔶犖撌亙恣<EFBFBD><EFBFBD>蝑?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `resultId`: 蝏𤘪<E89D8F>ID
**请求体**:
**霂瑟<EFBFBD>雿?*:
```json
{
"finalDecision": "exclude",
@@ -968,8 +918,7 @@ curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
```
**摮埈挾霂湔<E99C82>**:
- `finalDecision`: 最终决策(必填)
- `include`: 纳入
- `finalDecision`: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑吔<EFBFBD><EFBFBD>嚗? - `include`: 蝥喳<E89DA5>
- `exclude`: <20>㘾膄
- `exclusionReason`: <20>㘾膄<E398BE><EFBFBD>嚗ǑfinalDecision === 'exclude'` <20><EFBFBD>憛恬<E6869B>
- `reviewNotes`: 摰⊥瓲憭<E793B2>釣嚗<E987A3><EFBFBD><EFBFBD>
@@ -994,8 +943,8 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
-H "Content-Type: application/json" \
-d '{
"finalDecision": "exclude",
"exclusionReason": "结局指标数据不完整",
"reviewNotes": "缺少均值和标准差"
"exclusionReason": "蝏枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿銝滚<EFBFBD><EFBFBD>?,
"reviewNotes": "蝻箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌?
}'
```
@@ -1004,9 +953,8 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
#### 4.5 撖澆枂Excel
**<EFBFBD>亙藁**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId/export`
**认证**: 需要
**说明**: 导出全文复筛结果为Excel文件3个Sheet
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: 撖澆枂<EFBFBD><EFBFBD>憭滨<EFBFBD>蝏𤘪<EFBFBD>銝慟xcel<EFBFBD><EFBFBD>辣嚗?銝杵heet嚗?
**頝臬<E9A09D><E887AC><EFBFBD>**:
- `taskId`: 隞餃𦛚ID
@@ -1021,52 +969,52 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
|------|------|
| 摨誩噡 | 1, 2, 3... |
| PMID | PubMed ID |
| 文献来源 | 第一作者+年份 |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 蝚砌<E89D9A>雿𡏭<E99BBF>?撟港遢 |
| <20><><EFBFBD> | <20><><EFBFBD><E8AE83><EFBFBD> |
| <20><EFBFBD> | <20><EFBFBD><E7AC94>滨妍 |
| 撟港遢 | <20>𤏸”撟港遢 |
| DOI | DOI蝻硋噡 |
| 最终决策 | 纳入 |
| 数据质量 | 高/中/低 |
| 可提取性 | 可提取/部分可提取/不可提取 |
| 模型一致性 | 一致/不一致 |
| 是否人工审核 | 是/否 |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑?| 蝥喳<E89DA5> |
| <EFBFBD>唳旿韐券<EFBFBD> | 擃?銝?雿?|
| <EFBFBD><EFBFBD><EFBFBD>𡝗<EFBFBD>?| <20><EFBFBD><E88880>?<3F><EFBFBD><E585B8><EFBFBD><E88880>?銝滚虾<E6BB9A>𣂼<EFBFBD> |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| 銝<><E98A9D>?銝滢<E98A9D><E6BBA2>?|
| <EFBFBD>臬炏鈭箏極摰⊥瓲 | <20>?<3F>?|
**Sheet 2: <20>㘾膄<E398BE><E88684><EFBFBD>𡑒”**
| <20><EFBFBD> | 霂湔<E99C82> |
|------|------|
| 摨誩噡 | 1, 2, 3... |
| PMID | PubMed ID |
| 文献来源 | 第一作者+年份 |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 蝚砌<E89D9A>雿𡏭<E99BBF>?撟港遢 |
| <20><><EFBFBD> | <20><><EFBFBD><E8AE83><EFBFBD> |
| <20>㘾膄<E398BE><EFBFBD> | 霂衣<E99C82><E8A1A3>㘾膄<E398BE><EFBFBD> |
| 排除字段 | field5, field9|
| 是否冲突 | 是/否 |
| 审核人 | 用户ID |
| <EFBFBD>㘾膄摮埈挾 | field5, field9蝑?|
| <EFBFBD>臬炏<EFBFBD><EFBFBD> | <20>?<3F>?|
| 摰⊥瓲鈭?| <20><EFBFBD>ID |
| 摰⊥瓲<E28AA5>園𡢿 | 2025-11-23 10:30 |
**Sheet 3: PRISMA蝏蠘恣**
| 统计项 | 数量 | 百分比 |
| 蝏蠘恣憿?| <20><EFBFBD> | <20><EFBFBD>瘥?|
|--------|------|--------|
| <20><EFBFBD>憭滨<E686AD><E6BBA8>餅㺭 | 30 | 100% |
| 最终纳入 | 18 | 60% |
| 最终排除 | 12 | 40% |
| - 结局指标缺失/不完整 | 5 | 16.7% |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| 18 | 60% |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| 12 | 40% |
| - 蝏枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝻箏仃/銝滚<E98A9D><E6BB9A>?| 5 | 16.7% |
| - 鈭箇黎<E7AE87><EFBFBD>銝滨泵 | 3 | 10% |
| - 干预措施不明确 | 2 | 6.7% |
| - 撟脤<EFBFBD><EFBFBD>芣鴌銝齿<EFBFBD>蝖?| 2 | 6.7% |
| - <20>𠉛弦韐券<E99F90><E588B8><EFBFBD> | 1 | 3.3% |
| - <20><EFBFBD><E597A1><EFBFBD> | 1 | 3.3% |
| 模型冲突数 | 3 | 10% |
| 人工审核数 | 3 | 10% |
| <EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| 3 | 10% |
| 鈭箏極摰⊥瓲<EFBFBD>?| 3 | 10% |
**成本统计额外Sheet**:
| 项目 | |
**<EFBFBD>鞉𧋦蝏蠘恣嚗<EFBFBD><EFBFBD>憭𠼦heet嚗?*:
| 憿寧𤌍 | <EFBFBD>?|
|------|-----|
| 总Token| 450,000 |
| <EFBFBD>oken<EFBFBD>?| 450,000 |
| <20><EFBFBD><E9A485>穿<EFBFBD><E7A9BF><EFBFBD><EFBFBD> | 瞼2.25 |
| 平均成本/篇 | ¥0.075 |
| 撟喳<EFBFBD><EFBFBD>鞉𧋦/蝭?| 0.075 |
| 璅<E79285><EFBFBD><E89D8F> | DeepSeek-V3 + Qwen-Max |
| 处理时间 | 8分30秒 |
| <EFBFBD><EFBFBD><EFBFBD>園𡢿 | 8<>?0蝘?|
**瘚贝<E7989A><E8B49D>賭誘**:
```bash
@@ -1090,9 +1038,7 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
```
**HTTP<54><EFBFBD><E59786><EFBFBD>**:
- `200` - 成功GET、PUT
- `201` - 创建成功POST
- `200` - <EFBFBD>𣂼<EFBFBD>嚗𠃑ET<EFBFBD><EFBFBD>UT嚗?- `201` - <20>𥕦遣<F0A595A6>𣂼<EFBFBD>嚗㇊OST嚗?
---
### 2. <20>躰秤<E8BAB0><EFBFBD>
@@ -1105,7 +1051,7 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
}
```
或(详细错误):
<EFBFBD><EFBFBD>霂衣<EFBFBD><EFBFBD>躰秤嚗?
```json
{
"error": "Missing required fields"
@@ -1114,11 +1060,7 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
**撣貉<E692A3>HTTP<54><EFBFBD><E59786><EFBFBD>**:
- `400` - 霂瑟<E99C82><E7919F><EFBFBD><EFBFBD>躰秤
- `401` - 未授权
- `403` - 无权限
- `404` - 资源不存在
- `500` - 服务器内部错误
- `401` - <EFBFBD><EFBFBD><EFBFBD>?- `403` - <20><EFBFBD><E4ADBE>?- `404` - 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?- `500` - <20>滚𦛚<E6BB9A><EFBFBD><E585B8><EFBFBD>霂?
**<2A>躰秤蝷箔<E89DB7>**:
```json
// 400 - <20><><EFBFBD>躰秤
@@ -1126,13 +1068,11 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
"error": "Missing required fields"
}
// 404 - 资源不存在
{
// 404 - <EFBFBD><EFBFBD>銝滚<EFBFBD><EFBFBD>?{
"error": "Project not found"
}
// 500 - 服务器错误
{
// 500 - <EFBFBD>滚𦛚<EFBFBD><EFBFBD>霂?{
"error": "Failed to create project"
}
```
@@ -1146,8 +1086,7 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
{
"success": true,
"data": {
"items": [...], // literatures、results
"pagination": {
"items": [...], // <EFBFBD>?literatures<EFBFBD><EFBFBD>esults 蝑? "pagination": {
"page": 1,
"limit": 50,
"total": 150,
@@ -1161,14 +1100,12 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
- `page`: 敶枏<E695B6>憿萇<E686BF><EFBFBD><E59A97>1撘<31>憪页<E686AA>
- `limit`: 瘥誯△<E8AAAF><EFBFBD>
- `total`: <20>餉扇敶閙㺭
- `totalPages`: 总页数
- `totalPages`: <EFBFBD>駁△<EFBFBD>?
---
## <20><> 霈方<E99C88><E696B9><EFBFBD><EFBFBD>
### 当前状态(测试模式)
### 敶枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD><EFBFBD>嚗?
**瘚贝<E7989A><E8B49D><EFBFBD>**:
- **<2A><EFBFBD>ID**: `asl-test-user-001`
- **<2A>桃拳**: `asl-test@example.com`
@@ -1178,18 +1115,16 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
- 隡睃<E99AA1>隞𥣡WT銝剛繮<E5899B>飜userId`
- JWT銝滚<E98A9D><E6BB9A>冽𧒄雿輻鍂暺䁅恕瘚贝<E7989A><E8B49D><EFBFBD>ID
### 生产环境(待实现)
### <EFBFBD>煺漣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰䂿緵嚗?
**霈方<E99C88><EFBFBD><E7989A>**:
1. <20><EFBFBD><E586BD><EFBFBD><E9A483><EFBFBD>JWT Token
2. 霂瑟<E99C82>憭湔𡉼撣吋oken: `Authorization: Bearer {token}`
3. 銝剝𡢿隞園<E99A9E><EFBFBD>oken撟嗆<E6929F><E59786>飜userId`
4. <20><EFBFBD><E689B9>其蝙<E585B6>灼userId`<60>亥砭<E4BAA5><EFBFBD><E586BD>唳旿
**中间件示例**:
**銝剝𡢿隞嗥內靘?*:
```typescript
// 待实现
fastify.addHook('preHandler', async (request, reply) => {
// <EFBFBD><EFBFBD><EFBFBD>?fastify.addHook('preHandler', async (request, reply) => {
const token = request.headers.authorization?.replace('Bearer ', '');
if (!token) {
return reply.status(401).send({ error: 'Unauthorized' });
@@ -1203,8 +1138,7 @@ fastify.addHook('preHandler', async (request, reply) => {
## <20>妒 API瘚贝<E7989A>
### 快速测试脚本
### 敹恍<EFBFBD><EFBFBD><EFBFBD>霂閗<EFBFBD><EFBFBD>?
**瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>𡅅PI**:
```bash
cd AIclinicalresearch/backend
@@ -1213,18 +1147,9 @@ npx tsx scripts/test-asl-api.ts
**瘚贝<E7989A>蝏𤘪<E89D8F>**:
```
🚀 开始测试 ASL 模块 API...
📍 测试 1/7: 健康检查 ✅
📍 测试 2/7: 创建筛选项目 ✅
📍 测试 3/7: 获取项目列表 ✅
📍 测试 4/7: 获取项目详情 ✅
📍 测试 5/7: 导入文献 ✅
📍 测试 6/7: 获取文献列表 ✅
📍 测试 7/7: 更新项目 ✅
═══════════════════════════════════
🎉 所有测试通过!(7/7 - 100%)
═══════════════════════════════════
```
<EFBFBD><EFBFBD><>憪𧢲<E686AA>霂?ASL <EFBFBD> API...
<EFBFBD><EFBFBD> 瘚贝<E7989A> 1/7: <20>亙熒璉<E78692><E79289>? <20>?<3F><> 瘚贝<E7989A> 2/7: <20>𥕦遣蝑偦<E89D91>厰★<E58EB0>? <20>?<3F><> 瘚贝<E7989A> 3/7: <20><EFBFBD>憿寧𤌍<E5AFA7>𡑒” <20>?<3F><> 瘚贝<E7989A> 4/7: <20><EFBFBD>憿寧𤌍霂行<E99C82> <20>?<3F><> 瘚贝<E7989A> 5/7: 撖澆<E69296><E6BE86><EFBFBD><20>?<3F><> 瘚贝<E7989A> 6/7: <20><EFBFBD><E79195><EFBFBD><EFBFBD>𡑒” <20>?<3F><> 瘚贝<E7989A> 7/7: <20>湔鰵憿寧𤌍 <20>?<3F><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5><EFBFBD><E990A5>?<3F><> <20><><EFBFBD><EFBFBD>霂閖<E99C82><EFBFBD>嚗?7/7 - 100%)
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?```
### Postman<61><6E><EFBFBD>
@@ -1257,41 +1182,35 @@ Body (raw JSON):
| <20>亙藁蝐餃<E89D90> | <20><EFBFBD><E6A0BC><EFBFBD><E6BB9A>園𡢿 | 霂湔<E99C82> |
|---------|-------------|------|
| 单个查询 | < 100ms | 项目详情、文献详情 |
| 列表查询 | < 200ms | 项目列表、文献列表 |
| 创建/更新 | < 300ms | 创建项目、更新项目 |
| 批量导入 | < 2s | 导入100篇文献 |
| LLM筛选 | 4-6s/篇 | 双模型并行筛选 |
| <EFBFBD>蓥葵<EFBFBD>亥砭 | < 100ms | 憿寧𤌍霂行<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>株祕<EFBFBD>?|
| <EFBFBD>𡑒”<EFBFBD>亥砭 | < 200ms | 憿寧𤌍<EFBFBD>𡑒”<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵?|
| <EFBFBD>𥕦遣/<2F>湔鰵 | < 300ms | <EFBFBD>𥕦遣憿寧𤌍<EFBFBD><EFBFBD><EFBFBD>圈★<EFBFBD>?|
| <EFBFBD><EFBFBD>撖澆<EFBFBD> | < 2s | 撖澆<EFBFBD>100蝭<EFBFBD><EFBFBD><EFBFBD>?|
| LLM蝑偦<EFBFBD>?| 4-6s/蝭?| <20>峕芋<E5B395>见僎銵𣬚<E98AB5><F0A3AC9A>?|
### 撟嗅<E6929F><E59785><EFBFBD>
- **API服务器**: 支持100+并发请求
- **LLM筛选**: 并发数为3可配置
- **数据库连接池**: 17个连接
- **API<EFBFBD>滚𦛚<EFBFBD>?*: <20><EFBFBD>100+撟嗅<E6929F>霂瑟<E99C82>
- **LLM蝑偦<EFBFBD>?*: 撟嗅<E6929F><E59785>唬蛹3嚗<33><EFBFBD>滨蔭嚗?- **<2A>唳旿摨栞<E691A8><E6A09E><EFBFBD>**: 17銝芾<E98A9D><E88ABE>?
---
## <20><> <20><>𧋦<EFBFBD><F0A78BA6>
### v3.0 (2025-11-23)
- ✅ 新增全文复筛管理API5个接口
- <20>?<3F><EFBFBD><E595A3><EFBFBD>憭滨<E686AD>蝞∠<E89D9E>API嚗?銝芣𦻖<E88AA3><F0A6BB96><EFBFBD>
- <20>𥕦遣隞餃𦛚<E9A483><F0A69B9A><EFBFBD>𤥁<EFBFBD>摨艾<E691A8><E889BE><EFBFBD>𣇉<EFBFBD><F0A38789><EFBFBD><E6A0B6>犖撌亙恣<E4BA99><EFBFBD><E8A9BB><EFBFBD>慟xcel
- ✅ 支持12字段详细评估
- ✅ 支持双模型对比和冲突检测
- ✅ 完整的Excel导出功能3 Sheets
- ✅ 调整文档结构5大模块
- <20>?<3F><EFBFBD>12摮埈挾霂衣<E99C82><EFBFBD>
- <20>?<3F><EFBFBD><E88880>峕芋<E5B395>见笆瘥𥪜<E798A5><F0A5AA9C><EFBFBD><EFBFBD>瘚?- <20>?摰峕㟲<E5B395><E39FB2>xcel撖澆枂<E6BE86><EFBFBD>嚗? Sheets嚗?- <20>?靚<><EFBFBD><E39FB2>﹝蝏𤘪<E89D8F>嚗?憭扳芋<E689B3><EFBFBD>
### v2.1 (2025-11-21)
- ✅ 新增统计API接口
- ✅ 更新PICOS格式说明
- ✅ 添加云原生架构标注
- <20>?<3F><EFBFBD>蝏蠘恣API<50>亙藁
- <20>?<3F>湔鰵PICOS<4F><EFBFBD>霂湔<E99C82>
- <20>?瘛餃<E7989B>鈭穃<E988AD><E7A983><EFBFBD><EFBFBD><E6B2B2><EFBFBD>瘜?
### v2.0 (2025-11-18)
- ✅ 实现10个核心API端点
- ✅ 完成项目管理功能
- ✅ 完成文献管理功能
- ✅ 添加测试脚本和文档
- ✅ 所有接口测试通过
- <20>?摰䂿緵10銝芣瓲敹<E793B2>PI蝡舐<E89DA1>
- <20>?摰峕<E691B0>憿寧𤌍蝞∠<E89D9E><E288A0><EFBFBD>
- <20>?摰峕<E691B0><E5B395><EFBFBD>讃蝞∠<E89D9E><E288A0><EFBFBD>
- <20>?瘛餃<E7989B>瘚贝<E7989A><E8B49D>𡁏𧋦<F0A1818F><EFBFBD>獢?- <20>?<3F><><EFBFBD>㗇𦻖<E39787><F0A6BB96><EFBFBD>霂閖<E99C82><EFBFBD>
### v1.0 (2025-10-29)
- <20><EFBFBD>API霈曇恣閫<E681A3><E996AB>
@@ -1299,17 +1218,15 @@ Body (raw JSON):
---
## ⏳ 后续规划
## <EFBFBD>?<3F>𡒊賒閫<E8B392><E996AB>
### Week 2
- [ ] 实现筛选任务API (3个接口)
- [ ] 实现冲突审核API (2个接口)
- [ ] 添加SSE进度推送
- [ ] 集成异步任务队列
- [ ] 摰䂿緵蝑偦<E89D91>劐遙<E58A90>PI (3銝芣𦻖<E88AA3>?
- [ ] 摰䂿緵<E482BF><EFBFBD>摰⊥瓲API (2銝芣𦻖<EFBFBD>?
- [ ] 瘛餃<E7989B>SSE餈𥕦漲<F0A595A6><EFBFBD>?- [ ] <20><><EFBFBD><EFBFBD>郊隞餃𦛚<E9A483><EFBFBD>
### Week 3-4
- [ ] 添加JWT认证中间件
- [ ] 实现权限控制
- [ ] 瘛餃<E7989B>JWT霈方<E99C88>銝剝𡢿隞?- [ ] 摰䂿緵<E482BF><E7B7B5><EFBFBD><EFBFBD><EFBFBD>
- [ ] 瘛餃<E7989B>API<50><EFBFBD>
- [ ] 摰<><E691B0><EFBFBD>躰秤憭<E7A7A4><E686AD>
@@ -1322,9 +1239,8 @@ Body (raw JSON):
#### 5.1 <20><EFBFBD>憿寧𤌍蝏蠘恣<E8A098>唳旿嚗<E697BF><E59A97><EFBFBD><EFBFBD>嚗𡁜<E59A97>蝡航<E89DA1><E888AA><EFBFBD><EFBFBD>
**<2A>亙藁**: `GET /api/v1/asl/projects/:projectId/statistics`
**认证**: 需要
**说明**: 获取项目的筛选统计数据(总数、纳入率、排除率、排除原因分析等)
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
**霂湔<EFBFBD>**: <EFBFBD><EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霈⊥㺭<EFBFBD><EFBFBD><EFBFBD>餅㺭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
**頝臬<E9A09D><E887AC><EFBFBD>㺭**:
- `projectId`: 憿寧𤌍ID
@@ -1340,9 +1256,9 @@ Body (raw JSON):
"conflict": 24,
"reviewed": 175,
"exclusionReasons": {
"P不匹配(人群)": 40,
"I不匹配(干预)": 25,
"S不匹配(研究设计)": 15,
"P銝滚龪<EFBFBD><EFBFBD>鈭箇黎嚗?: 40,
"I銝滚龪<EFBFBD><EFBFBD>撟脤<EFBFBD>嚗?: 25,
"S銝滚龪<EFBFBD><EFBFBD><EFBFBD>𠉛弦霈曇恣嚗?: 15,
"<22><EFBFBD><E597A1><EFBFBD>": 10
},
"includedRate": "42.7",
@@ -1352,11 +1268,9 @@ Body (raw JSON):
}
```
**特点**
- ✅ 云原生后端Prisma聚合查询6个并行查询
- ✅ 性能:<500ms199篇文献
- ✅ 减少网络传输从MB级降到KB级
**<EFBFBD><EFBFBD>**嚗?- <20>?鈭穃<E988AD><E7A983><EFBFBD><EFBFBD><EFBFBD>𡒊垢Prisma<6D>𡁜<EFBFBD><F0A1819C>亥砭嚗?銝芸僎銵峕䰻霂<E99C82>
- <EFBFBD>?<3F><EFBFBD>嚗?500ms嚗?99蝭<39><E89DAD><EFBFBD><EFBFBD>
- <EFBFBD>?<3F><EFBFBD>蝵𤑳<E89DB5>隡㰘<E99AA1>嚗帋<E59A97>MB蝥折<E89DA5><E68A98>袁B蝥?
**瘚贝<E7989A><E8B49D>賭誘**:
```bash
curl http://localhost:3001/api/v1/asl/projects/55941145-bba0-4b15-bda4-f0a398d78208/statistics
@@ -1364,21 +1278,18 @@ curl http://localhost:3001/api/v1/asl/projects/55941145-bba0-4b15-bda4-f0a398d78
---
**文档版本:** v3.0
**最后更新:** 2025-11-23Day 5: 全文复筛API
**维护者:** AI智能文献开发团队
**本次更新**
- ✅ 新增全文复筛管理API5个核心接口
- ✅ 详细的12字段评估文档
- ✅ 双模型对比和冲突检测说明
- ✅ Excel导出格式规范
- ✅ 完整的请求/响应示例
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦嚗?* v3.0
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD><EFBFBD>** 2025-11-23嚗㇄ay 5: <EFBFBD><EFBFBD>憭滨<EFBFBD>API嚗?
**蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** AI<EFBFBD><EFBFBD><EFBFBD><EFBFBD>讃撘<EFBFBD><EFBFBD>穃𣪧<EFBFBD>?
**<EFBFBD>祆活<EFBFBD>湔鰵**嚗?- <20>?<3F><EFBFBD><E595A3><EFBFBD>憭滨<E686AD>蝞∠<E89D9E>API嚗?銝芣瓲敹<E793B2>𦻖<EFBFBD><F0A6BB96><EFBFBD>
- <20>?霂衣<E99C82><E8A1A3>?2摮埈挾霂<E68CBE><EFBFBD><E691AF>
- <EFBFBD>?<3F>峕芋<E5B395>见笆瘥𥪜<E798A5><F0A5AA9C><EFBFBD><EFBFBD>瘚贝秩<E8B49D>?- <20>?Excel撖澆枂<E6BE86><EFBFBD><EFBFBD><E996AB>
- <EFBFBD>?摰峕㟲<E5B395><E39FB2>窈瘙?<3F><EFBFBD>蝷箔<E89DB7>
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
- [数据库设计文档](./01-数据库设计.md)
- [<EFBFBD>唳旿摨栞挽霈⊥<EFBFBD>獢β(./01-<2D>唳旿摨栞挽霈?md)
- [API瘚贝<EFBFBD><EFBFBD><EFBFBD>](../../../backend/ASL-API-瘚贝<E7989A><E8B49D><EFBFBD>.md)
- [Week 1完成报告](../05-开发记录/2025-11-18-Week1完成报告.md)
- [Week 1摰峕<EFBFBD><EFBFBD><EFBFBD>](../05-<EFBFBD><EFBFBD>𤏸扇敶?2025-11-18-Week1摰峕<EFBFBD><EFBFBD><EFBFBD>.md)