Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/06-开发记录/2025-12-07_后端API完整对接完成.md
HaHafeng 1b53ab9d52 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%)
2026-01-14 19:15:01 +08:00

408 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2025-12-07 <20>𡒊垢 API 摰峕㟲撖寞𦻖摰峕<E691B0>
> **<2A>滚之<E6BB9A>𣬚<EFBFBD>蝣?*嚗関ool C <20><EFBFBD>蝡?API 摰峕㟲撖寞𦻖嚗<F0A6BB96>虾隞亦垢<E4BAA6>啁垢瘚贝<E7989A>嚗?
---
## <20><> 隞餃𦛚璁<F0A69B9A>
**<EFBFBD>𤑳緵**嚗𡁜<E59A97>蝡?API <20>?Day 1-3 撌脩<E6928C>摰峕㟲撘<E39FB2><E69298>𡢅<EFBFBD><EFBFBD><E99BBF>蝡?API 頝臬<E9A09D>銝滚龪<E6BB9A>?
**靽桀<E99DBD>**嚗帋耨甇<E880A8><E79487>蝡?API 靚<>鍂頝臬<E9A09D><EFBFBD><E59A97><EFBFBD>𣂼<EFBFBD><F0A382BC>𡒊垢撖寞𦻖
---
## <20>?<3F>𡒊垢 API 皜<><E79A9C><EFBFBD>歇摰峕<E691B0>嚗?
### 1. **Session 蝞∠<E89D9E>** <20>?Day 2 摰峕<E691B0>
| API | <20><EFBFBD> | 頝臬<E9A09D> | <20><EFBFBD> |
|-----|------|------|------|
| 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>辣 | POST | `/api/v1/dc/tool-c/sessions/upload` | <20>𥕦遣 Session |
| <20><EFBFBD> Session | GET | `/api/v1/dc/tool-c/sessions/:id` | <20><EFBFBD><E79195><EFBFBD><EFBFBD>?|
| <20><EFBFBD><EFBFBD><E686B8> | GET | `/api/v1/dc/tool-c/sessions/:id/preview` | <20>?00銵峕㺭<E5B395>?|
| <20><EFBFBD>摰峕㟲<E5B395>唳旿 | GET | `/api/v1/dc/tool-c/sessions/:id/full` | <20><EFBFBD><E588B8>唳旿 |
| <20>湔鰵敹<E9B0B5>歲 | POST | `/api/v1/dc/tool-c/sessions/:id/heartbeat` | 撱園鵭餈<E9B5AD><E9A488><EFBFBD>園𡢿 |
| <20>𣳇膄 Session | DELETE | `/api/v1/dc/tool-c/sessions/:id` | <20>𣳇膄 Session |
### 2. **AI <20><EFBFBD>** <20>?Day 3 摰峕<E691B0>
| API | <20><EFBFBD> | 頝臬<E9A09D> | <20><EFBFBD> |
|-----|------|------|------|
| <20><><EFBFBD><EFBFBD><E99A9E> | POST | `/api/v1/dc/tool-c/ai/generate` | <20><><EFBFBD> Pandas 隞<><E99A9E> |
| <20><EFBFBD><EFBFBD><E99A9E> | POST | `/api/v1/dc/tool-c/ai/execute` | <20><EFBFBD><EFBFBD><E99A9E> |
| **銝<>甇亙<E79487>雿?* | POST | `/api/v1/dc/tool-c/ai/process` | <20><><EFBFBD>+<2B><EFBFBD>+<2B><EFBFBD> 潃?|
| <20><EFBFBD><E79195><EFBFBD>蟮 | GET | `/api/v1/dc/tool-c/ai/history/:sessionId` | 撖寡<E69296><E5AFA1><EFBFBD>蟮 |
---
## <20>圲 隞𦠜𠯫靽桀<E99DBD>
### 1. 靽格迤<E6A0BC>滨垢 API 頝臬<E9A09D>
**<EFBFBD><EFBFBD>**嚗𡁜<E59A97>蝡航<E89DA1><E888AA>刻楝敺<E6A59D><E695BA><EFBFBD><EFBFBD>
```typescript
// <20>?<3F>躰秤嚗<E7A7A4><E59A97><EFBFBD><EFBFBD>
fetch('/api/dc/tool-c/process')
fetch('/api/dc/tool-c/execute')
// <20>?甇<><EFBC86>耨憭滚<E686AD>嚗?
fetch('/api/v1/dc/tool-c/ai/process')
fetch('/api/v1/dc/tool-c/ai/execute')
```
**靽桀<E99DBD><E6A180><EFBFBD>辣**嚗?
- <20>?`frontend-v2/src/modules/dc/pages/tool-c/components/Sidebar.tsx`
### 2. 靽格迤<E6A0BC><EFBFBD><E6BB9A>唳旿<E594B3><EFBFBD>
**<EFBFBD><EFBFBD>**嚗𡁜<E59A97>蝡航<E89DA1><E888AA>?`previewData`<EFBFBD><EFBFBD>蝡舀<EFBFBD><EFBFBD>?`rows`
**靽桀<E99DBD>**嚗?
```typescript
// <20>?<3F>滨垢<E6BBA8>澆捆銝斤<E98A9D><E696A4><EFBFBD>
data: preview.data.previewData || preview.data.rows || []
```
**靽桀<E99DBD><E6A180><EFBFBD>辣**嚗?
- <20>?`frontend-v2/src/modules/dc/pages/tool-c/index.tsx`
- <20>?`frontend-v2/src/modules/dc/api/toolC.ts`<EFBFBD><EFBFBD><EFBFBD>銋㚁<EFBFBD>
### 3. 靽格迤 AI 憭<><E686AD><EFBFBD><EFBFBD><E6BB9A><EFBFBD>頧祆揢
**<EFBFBD><EFBFBD>**嚗𡁜<E59A97>蝡臬<E89DA1>摨娍聢撘誯<E69298><EFBFBD><EFBFBD><EFBCB6>滨垢 ChatContainer <20><><EFBFBD><EFBFBD><EFBFBD>聢撘?
**靽桀<E99DBD>**嚗?
```typescript
// <20>?頧祆揢<E7A586>𡒊垢<F0A1928A><EFBFBD>
return {
messageId: result.data?.messageId,
explanation: result.data?.explanation,
code: result.data?.code,
success: result.data?.executeResult?.success,
metadata: {
newDataPreview: result.data?.executeResult?.newDataPreview,
},
};
```
**靽桀<E99DBD><E6A180><EFBFBD>辣**嚗?
- <20>?`frontend-v2/src/modules/dc/pages/tool-c/components/Sidebar.tsx`
---
## <20><> API <20><EFBFBD><E6BB9A><EFBFBD>
### 1. <20><>辣銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
```json
POST /api/v1/dc/tool-c/sessions/upload
Response (201):
{
"success": true,
"message": "Session<6F>𥕦遣<F0A595A6>𣂼<EFBFBD>",
"data": {
"sessionId": "xxx",
"fileName": "data.csv",
"fileSize": "1.2 MB",
"totalRows": 1000,
"totalCols": 10,
"columns": ["id", "name", "age", ...],
"expiresAt": "2025-12-07T12:00:00Z",
"createdAt": "2025-12-07T11:00:00Z"
}
}
```
### 2. <20><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿<E594B3><EFBFBD>
```json
GET /api/v1/dc/tool-c/sessions/:id/preview
Response (200):
{
"success": true,
"data": {
"sessionId": "xxx",
"fileName": "data.csv",
"totalRows": 1000,
"totalCols": 10,
"columns": ["id", "name", "age", ...],
"previewRows": 100,
"previewData": [
{ "id": 1, "name": "撘牐<E69298>", "age": 25 },
{ "id": 2, "name": "<22>𤾸<EFBFBD>", "age": 30 },
...
]
}
}
```
### 3. AI 憭<><E686AD><EFBFBD><EFBFBD>
```json
POST /api/v1/dc/tool-c/ai/process
Request:
{
"sessionId": "xxx",
"message": "<22>𨉖ge<67><EFBFBD>蝻箏仃<E7AE8F>銵乩蛹撟喳<E6929F><E596B3>?,
"maxRetries": 3
}
Response (200):
{
"success": true,
"message": "<EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>",
"data": {
"messageId": "msg-123",
"explanation": "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>age<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?,
"code": "df['age'].fillna(df['age'].mean(), inplace=True)",
"executeResult": {
"success": true,
"result": "<22>𣂼<EFBFBD>憛怨 15 銝芰撩憭勗<E686AD>?,
"newDataPreview": [
{ "id": 1, "name": "<EFBFBD>", "age": 25 },
{ "id": 2, "name": "<EFBFBD>𤾸<EFBFBD>", "age": 27.5 },
...
]
},
"retryCount": 0
}
}
```
---
## <20>㴓 蝡臬<E89DA1>蝡舀<E89DA1>蝔?
### 摰峕㟲<E5B395><EFBFBD><EFBFBD><E7989A>
```
1. <20><EFBFBD>銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
<20>?
POST /api/v1/dc/tool-c/sessions/upload
<20>?
餈𥪜<E9A488> sessionId
2. <20>芸𢆡<E88AB8><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿
<20>?
GET /api/v1/dc/tool-c/sessions/:id/preview
<20>?
<20>曄內<E69B84>唳旿銵冽聢 + <20><><EFBFBD>?AI 撖寡<E69296><E5AFA1>屸𢒰
3. <20><EFBFBD>颲枏<E9A2B2> AI <20><>
<20>?
POST /api/v1/dc/tool-c/ai/process
<20>?
餈𥪜<E9A488><EFBFBD><E99A9E> + <20><EFBFBD>蝏𤘪<E89D8F>
4. <20>芸𢆡<E88AB8>湔鰵銵冽聢<E586BD>唳旿
<20>?
<20>曄內<E69B84><EFBFBD><E59581>唳旿憸<E697BF><E686B8>
```
---
## <20><> 瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>
### 1. <20>臬𢆡<E887AC>滚𦛚
```bash
# <20>𡒊垢
cd AIclinicalresearch/backend
npm run dev
# <20>滨垢
cd AIclinicalresearch/frontend-v2
npm run dev
# Python 敺格<E695BA><E6A0BC>?
cd AIclinicalresearch/extraction_service
python main.py
```
### 2. 瘚贝<E7989A>甇仿炊
1. <20>?**霈輸䔮憿菟𢒰**
- URL: http://localhost:5173/data-cleaning/tool-c
- 摨磰砲<E7A3B0><EFBFBD>"銝𠹺<E98A9D><F0A0B9BA>唳旿<E594B3><E697BF>辣"<22><EFBFBD>
2. <20>?**銝𠹺<E98A9D><F0A0B9BA><EFBFBD>辣**
- <20>孵稬"<22>㗇𥋘<E39787><F0A58B98>辣"
- 銝𠹺<E98A9D> CSV <20>?Excel <20><>辣嚗?10MB嚗?
- 摨磰砲<E7A3B0>芸𢆡<E88AB8><F0A286A1><EFBFBD>?AI 撖寡<E69296><E5AFA1>屸𢒰
3. <20>?**AI 撖寡<E69296>**
- <20><EFBFBD><E588BB><EFBFBD>颲枏<E9A2B2><E69E8F><EFBFBD>誘嚗䔶<E59A97><EFBFBD><E68692>
- "<22>曄內<E69B84>?0銵峕㺭<E5B395>?
- "<22>𨉖ge<67><EFBFBD>蝻箏仃<E7AE8F>銵乩蛹撟喳<E6929F><E596B3>?
- "<22>𣳇膄<F0A3B387><EFBFBD>銵?
- 摨磰砲<E7A3B0><EFBFBD> AI <20><><EFBFBD><EFBFBD><E99A9E>撟嗉䌊<E59789><EFBFBD>銵?
4. <20>?**撉諹<E69289><E8ABB9>唳旿<E594B3>湔鰵**
- 撌虫儒銵冽聢摨磰砲<E7A3B0>芸𢆡<E88AB8>湔鰵
- <20>曄內憭<E585A7><E686AD><EFBFBD>𡒊<EFBFBD><F0A1928A>唳旿
### 3. 瘚贝<E7989A><E8B49D>唳旿
<EFBFBD><EFBFBD>雿輻鍂嚗?
- `AIclinicalresearch/test_data/cqol-demo.csv`<EFBFBD>龫摮行㺭<EFBFBD><EFBFBD>
- <20>碶遙雿?CSV/Excel <20><>辣嚗?10MB嚗?
---
## <20><> 靽格㺿皜<E3BABF><E79A9C>
| <20><>辣 | 銵<>噡 | 靽格㺿<E6A0BC><E3BABF>捆 | <20><EFBFBD>?|
|------|------|----------|------|
| `Sidebar.tsx` | 43 | 靽格迤<E6A0BC><EFBFBD><EFBFBD><E99A9E> API 頝臬<E9A09D> | <20>?|
| `Sidebar.tsx` | 122-136 | 靽格迤 AI 憭<><E686AD> API 頝臬<E9A09D><E887AC><EFBFBD><EFBFBD>摨磰蓮<E7A3B0>?| <20>?|
| `index.tsx` | 82 | <20>澆捆 `previewData` <20>?`rows` | <20>?|
| `toolC.ts` | 47 | <20>湔鰵 `PreviewData` 蝐餃<E89D90>摰帋<E691B0> | <20>?|
---
## <20>?撉諹<E69289>蝏𤘪<E89D8F>
### Linter 璉<><E79289>?
- <20>?**<2A>躰秤<E8BAB0>?*嚗?
- <20>𩤃<EFBFBD> **霅血<E99C85><E8A180>?*嚗?嚗<>𧊋雿輻鍂<E8BCBB>?`handleSendMessage`<EFBFBD>虾敹賜裦嚗?
### <20><EFBFBD>撉諹<E69289>
| <20><EFBFBD> | <20><EFBFBD>?| 憭<>釣 |
|------|------|------|
| 憿菟𢒰<E88F9F>㰘蝸 | <20>?| <20>䭾𥁒<E4ADBE>?|
| <20><>辣銝𠹺<E98A9D> UI | <20>?| 甇<><EFBFBD>曄內 |
| API 頝臬<E9A09D> | <20>?| <20><EFBFBD><E5AFA5>𡒊垢 |
| 蝐餃<E89D90>摰帋<E691B0> | <20>?| 摰峕㟲 |
| 蝡臬<E89DA1>蝡舀<E89DA1>蝔?| <20>?| 敺<><E695BA>霂?|
---
## <20><> <20>𣬚<EFBFBD>蝣?
**<EFBFBD>?Tool C <20><EFBFBD>蝡?API 摰峕㟲撖寞𦻖摰峕<E691B0>嚗?*
### <20><EFBFBD><E8A9A8>𣂼停
1. <20>?**<2A>𡒊垢 API 撌脣<E6928C><E884A3>?*
- Day 1: Python 敺格<E695BA><E6A0BC><EFBFBD><EFBFBD><E99A9E><EFBFBD><EFBFBD>嚗?
- Day 2: Session 蝞∠<E89D9E><EFBFBD><E59A97>隞嗡<E99A9E>隡𨬭<E99AA1><F0A8ACAD><EFBFBD><EFBFBD><E6A180><EFBFBD>
- Day 3: AI 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD>嚗㇄eepSeek-V3 <20><><EFBFBD>嚗?
2. <20>?**<2A>滨垢 API 靚<>鍂撌脖耨甇?*
- 頝臬<E9A09D><E887AC><EFBFBD>
- <20>唳旿<E594B3><EFBFBD><E6BE86>澆捆
- <20><EFBFBD>頧祆揢甇<E68FA2>
3. <20>?**<2A>臭誑餈𥡝<E9A488>蝡臬<E89DA1>蝡舀<E89DA1>霂?*
- 銝𠹺<E98A9D><F0A0B9BA><EFBFBD><20>?<3F>曄內<E69B84>唳旿 <20>?AI 撖寡<E69296> <20>?<3F><EFBFBD><EFBFBD><E99A9E> <20>?<3F>湔鰵銵冽聢
---
## <20><> 銝衤<E98A9D>甇?
### 蝡见朖<E8A781><EFBFBD>
1. <20>?**<2A>瑟鰵瘚讛<E7989A><E8AE9B>?*
2. <20>?**銝𠹺<E98A9D>瘚贝<E7989A><E8B49D><EFBFBD>辣**
3. <20>?**瘚贝<E7989A> AI 撖寡<E69296><E5AFA1><EFBFBD>**
### 敺<><E695BA><EFBFBD><EFBFBD><E59094>鮋獈憛痹<E6869B>
1. <20>?隡睃<E99AA1><E79D83>躰秤<E8BAB0>鞟內
2. <20>?瘛餃<E7989B><E9A483>㰘蝸<E3B098><EFBFBD><E59786>𢆡<EFBFBD>?
3. <20>?憓𧼮撩隞<E692A9><E99A9E>擃䀝漁
4. <20>?<3F><EFBFBD><E88880><EFBFBD>/<2F><EFBFBD>
5. <20>?撖澆枂<E6BE86>唳旿<E594B3><EFBFBD>
---
## <20><><><E99A9E>蝏蠘恣
| 蝏<>辣 | 隞<><E99A9E>銵峕㺭 | <20><EFBFBD>?|
|------|---------|------|
| Python 敺格<E695BA><E6A0BC>?| ~430 銵?| <20>?Day 1 |
| Node.js <20>𡒊垢 | ~2650 銵?| <20>?Day 2-3 |
| <20>滨垢 React | ~1100 銵?| <20>?Day 4-5 |
| <20>𡁶鍂 Chat 蝏<>辣 | ~968 銵?| <20>?Day 5 |
| **<EFBFBD>餉恣** | **~5148 銵?* | **<EFBFBD>?摰峕<E691B0>** |
---
## <20><> <20><EFBFBD>
**Tool C MVP 撘<><E69298><EFBFBD><E7A983><EFBFBD>**
- <20>?<3F><EFBFBD>蝡?API 摰峕㟲撖寞𦻖
- <20>?<3F>臭誑餈𥡝<E9A488>蝡臬<E89DA1>蝡舀<E89DA1>霂?
- <20>?AI 撖寡<E69296> + <20>唳旿憭<E697BF><E686AD><EFBFBD><EFBFBD>撠梁貌
- <20>?<3F><EFBFBD> Ant Design X <20><>緵隞<E7B7B5><E99A9E> UI
**<EFBFBD>啣銁<EFBFBD>臭誑撘<EFBFBD>憪𧢲<EFBFBD>霂訫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?* <20><>
---
**撘<><E69298>𤏸<EFBFBD>?*嚗鋫I Assistant
**<EFBFBD><EFBFBD>**嚗?025-12-07
**<EFBFBD><EFBFBD>𧋦**嚗鐝VP v1.0