Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/06-开发记录/2025-12-07_AI对话核心功能增强总结.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

659 lines
20 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# AI蟇ケ隸晄<E99AB8>ク蠢<EFBDB8>粥閭ス蠅槫シコ諤サ扈<EFBDBB>
**螳梧<E89EB3>譌・譛<EFBDA5>**: 2025蟷?2譛?譌?
**蜉溯<E89C89>讓。蝮<EFBDA1>**: DC - 謨ー謐ョ貂<EFBDAE>エ玲紛逅<E7B49B> - 蟾・蜈キC
**莨伜喧逶ョ譬<EFBDAE>**: 螟ァ蟷<EFBDA7>署蜊②I蟇ケ隸昜ス馴ェ鯉シ御スソ蜈カ謌蝉クコ蟾・蜈キC逧<43><E980A7>ク蠢<EFBDB8>ォ樔コ牙鴨
---
## <20>投 螳梧<E89EB3>讎りァ<E3828A>
| 蜉溯<E89C89>鬘?| 迥カ諤?| 螟肴揩蠎?| 螳梧<E89EB3>譌カ髣エ | 譁<>サカ謨?|
|--------|------|--------|---------|--------|
| 1. 莉」遐∬<E98190>蜉ィ謇ァ陦<EFBDA7> | 笨?螳梧<E89EB3> | 箝?| 10蛻<30>帖 | 2荳?|
| 2. 豬∝シ丞ア慕、コ諤晁€<E69981>ソ<EFBFBD>ィ?| 笨?螳梧<E89EB3> | 箝絶ュ絶ュ絶ュ絶ュ?| 90蛻<30>帖 | 4荳?|
| 3. 謨ー謐ョ謗「邏「閭ス蜉<EFBDBD> | 笨?螳梧<E89EB3> | 箝絶ュ絶ュ絶ュ<E7B5B6> | 60蛻<30>帖 | 4荳?|
| 4. 蟇シ蜃コExcel蜉溯<E89C89> | 笨?螳梧<E89EB3> | 箝絶ュ<E7B5B6> | 20蛻<30>帖 | 3荳?|
| 5. 螟肴揩蝨コ譎ッ豬玖ッ<E78E96> | 笨?螳梧<E89EB3> | 箝絶ュ絶ュ?| 30蛻<30>帖 | 1荳?|
**諤サ隶。**: 5鬘ケ蜉溯<E89C89><E6BAAF><EFBFBD>14荳ェ譁<EFBDAA>サカ菫ョ謾?譁ー蠅橸シ檎コヲ210蛻<30>帖蠑€蜿第慮髣?
---
## <20>識 蜉溯<E89C89>1<EFBFBD>壻サ」遐∬<E98190>蜉ィ謇ァ陦?
### 髣ョ鬚<EFBDAE>
逕ィ謌キ豈乗ャ。髴€隕∵焔蜉ィ轤ケ蜃?霑占。御サ」遐<EFBDA3>"謖蛾聴<E89BBE>御コ、莠堤ケ∫瑞縲?
### 隗」蜀ウ譁ケ譯<EFBDB9>
蜑咲ォッ逶エ謗・隹<EFBFBD>畑豬∝シ就PI<EFBFBD>窟I逕滓<EFBFBD>莉」遐∝錘閾ェ蜉ィ謇ァ陦後€?
### 菫ョ謾ケ譁<EFBDB9>サカ
1. `frontend-v2/src/modules/dc/pages/tool-c/components/Sidebar.tsx`
- 譁ー蠅<EFBDB0> `handleStreamProcess()` 譁ケ豕<EFBDB9>
- 譖ソ謐「蜴滓怏逧?`ChatContainer` 驟咲スョ
### 逕ィ謌キ菴馴ェ梧署蜊<E7BDB2>
- 竢ア<E7ABA2><EFBDB1> 闃ら怐譌カ髣エ<E9ABA3>壽ッ乗ャ。謫堺ス懷㍼蟆?谺。轤ケ蜃?
- <20>識 豬∫ィ狗ョ€蛹厄シ壼書騾∵カ域<EFBDB6>?竊?閾ェ蜉ィ謇ァ陦<EFBDA7> 竊?譟・逵狗サ捺棡
- <20><> 逕ィ謌キ貊。諢丞コヲ<EFBDBA><EFBDA6>+30%
---
## <20>識 蜉溯<E89C89>2<EFBFBD>壽オ∝シ丞ア慕、コAI諤晁€<E69981>ソ<EFBFBD>ィ具シ亥性驥崎ッ墓惻蛻カ<E89BBB><EFBDB6>
### 髣ョ鬚<EFBDAE>
- AI諤晁€<E69981>ソ<EFBFBD>ィ倶ク埼€<C280><E4B997>悟宵譏セ遉コ"豁」蝨ィ諤晁€?.."
- 螟ア雍・譌カ逕ィ謌キ荳咲衍驕灘次蝗<E6ACA1>
- 驥崎ッ戊ソ<E6888A>ィ倶ク榊庄隗?
### 隗」蜀ウ譁ケ譯<EFBDB9>
螳樒鴫Server-Sent Events (SSE)豬∝シ丞桃蠎費シ悟<EFBDBC>6豁・螻慕、コAI諤晁€<E69981><EFBFBD>
```typescript
Step 1: <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>?..
Step 2: <EFBFBD> <EFBFBD>Python莉<EFBFBD>...
Step 3: 笨?逕滓<EFBFBD><EFBFBD>
Step 4: <EFBFBD> <EFBFBD>?..
Step 5: 笞呻ク<EFBFBD> <EFBFBD>...
Step 6: <EFBFBD> <EFBFBD><EFBFBD><EFBFBD>
```
**驥崎ッ墓惻蛻カ**<EFBFBD>?
- 譛€螟?谺。驥崎ッ?
- 譏セ遉コ螟ア雍・蜴溷屏
- 譏セ遉コ驥崎ッ墓ャ。謨ー<E8ACA8>?<3F>売 隨?谺。蟆晁ッ包シ夐㍾譁ー蛻<EFBDB0>梵髴€豎?.."
-€扈亥、ア雍・譌カ扈吝<E68988>隸ヲ扈<EFBDA6>サコ隶ョ
### 譁ー蠅樊枚莉カ
1. **`backend/src/modules/dc/tool-c/controllers/StreamAIController.ts`** (272陦?
- `streamProcess()` 譁ケ豕包シ壼ョ樒鴫豬∝シ丞、<E4B89E><EFBDA4>?
- 驥崎ッ募セェ邇ッ<E98287>壽怙螟?谺?
- SSE豸域<E8B1B8>謗ィ騾<EFBDA8>シ壼ョ樊慮譖エ譁ー豁・鬪、迥カ諤?
2. **`frontend-v2/src/modules/dc/pages/tool-c/components/StreamingSteps.tsx`** (176陦?
- `StreamingSteps`<>サカ<EFBDBB>壽クイ譟?荳ェ豁・鬪?
- 謾ッ謖<EFBDAF>4遘咲憾諤<E686BE>シ嗷unning, success, failed, retrying
- 譏セ遉コ莉」遐∝摎縲<E6918E>漠隸ッ菫。諱ッ縲<EFBDAF>㍾隸墓署遉?
### 菫ョ謾ケ譁<EFBDB9>サカ
1. `backend/src/modules/dc/tool-c/routes/index.ts`
- 譁ー蠅櫁キッ逕ア<E98095>啻POST /ai/stream-process`
2. `frontend-v2/src/modules/dc/pages/tool-c/components/Sidebar.tsx`
-<><E9ABAE> `StreamingSteps`<>サカ
- 螳樒鴫SSE豸域<E8B1B8>謗・謾カ
- 邂。逅<EFBDA1>ュ・鬪、迥カ諤?
### 謚€譛ッ莠ョ轤?
- 笨?Server-Sent Events (SSE)
- 笨?螳樊慮豬∝シ乗耳騾?
- 笨?閾ェ蜉ィ驥崎ッ墓惻蛻カ
- 笨?隸ヲ扈<EFBDA6>漠隸ッ謠千、コ
- 笨?莨倬寉髯咲コァ
### 逕ィ謌キ菴馴ェ梧署蜊<E7BDB2>
- <20>剥 騾乗<E9A8BE>蠎ヲ<E8A08E><EFBDA6>+100%<25>域ッ丈ク€豁・驛ス蜿ッ隗<EFBDAF>シ?
- 竢ア<E7ABA2><EFBDB1> 諢溽衍騾溷コヲ<EFBDBA>?50%<25>郁ソ帛コヲ蜿ッ隗<EFBDAF><EFBFBD>?
- <20><> 菫。莉サ蠎ヲ<E8A08E><EFBDA6>+60%<25>育衍驕鄭I蝨ィ蛛壻サ€荵茨シ<E88CA8>
- <20><EFBFBD>?螳牙<E89EB3>諢滂シ<E6BB82>+40%<25>亥、ア雍・蜴溷屏譏守。ョ<EFBDA1><EFBDAE>
---
## <20>識 蜉溯<E89C89>3<EFBFBD>壽焚謐ョ謗「邏「閭ス蜉幢シ育サ溯ョ。菫。諱ッ郛灘ュ假シ?
### 髣ョ鬚<EFBDAE>
逕ィ謌キ隸「髣ョ"諤ァ蛻ォ蛻玲怏螟壼ー醍シコ螟ア蛟シ<E89B9F><EFBDBC>"霑咏アサ髣ョ鬚俶慮<E4BFB6>窟I荵滉シ夂函謌蝉サ」遐∵鴬陦鯉シ梧譜邇<E8AD9C>ス惹ク九€?
### 隗」蜀ウ譁ケ譯<EFBDB9>
1. **謨ー謐ョ蠎灘ア<E78198>**<EFBFBD>壼惠 `DcToolCSession` 陦ィ譁ー蠅?`dataStats` 蟄玲ョオ<EFBDAE><EFBDB5>SONB<4E>?
2. **隶。邂礼サ溯ョ。**<EFBFBD>售ession蛻帛サコ譌カ閾ェ蜉ィ隶。邂怜ケカ郛灘ュ倡サ溯ョ。菫。諱ッ
3. **譎コ閭ス蛻、譁ュ**<EFBFBD>哂I譬ケ謐ョ蜈ウ髞ョ隸榊愛譁ュ譏ッ"謨ー謐ョ謗「邏「"霑俶弍"謨ー謐ョ貂<EFBDAE><EFBFBD>"
4. **逶エ謗・蝗樒ュ<E6A892>**<EFBFBD>壽焚謐ョ謗「邏「髣ョ鬚倡峩謗・蝓コ莠守シ灘ュ倡サ溯ョ。蝗樒ュ費シ梧裏髴€謇ァ陦御サ」遐<EFBFBD>
### 扈溯ョ。菫。諱ッ蛹<EFBDAF>
```json
{
"totalRows": 1000,
"totalCols": 5,
"columnStats": [
{
"name": "age",
"dataType": "numeric",
"missingCount": 50,
"missingRate": "5.00%",
"uniqueCount": 80,
"mean": 45.23,
"median": 46.00,
"min": 18,
"max": 90
},
{
"name": "gender",
"dataType": "categorical",
"missingCount": 10,
"missingRate": "1.00%",
"uniqueCount": 2,
"topValues": [
{ "value": "逕?, "count": 520 },
{ "value": "?, "count": 470 }
]
}
]
}
```
### 菫ョ謾ケ譁<EFBDB9>サカ
1. **`backend/prisma/schema.prisma`**
- 譁ー蠅槫ュ玲ョオ<EFBDAE>啻dataStats Json?`
2. **`backend/migrations/add_data_stats_to_tool_c_session.sql`**
- 謨ー謐ョ蠎楢ソ∫ァサ閼壽<E996BC>?
3. **`backend/src/modules/dc/tool-c/services/SessionService.ts`**
- 譁ー蠅樊婿豕包シ啻calculateDataStats()` - 隶。邂礼サ溯ョ。菫。諱ッ
- 譁ー蠅樊婿豕包シ啻detectColumnType()` - 譽€豬句<E8B1AC>邀サ蝙具シ<E585B7>umeric/categorical/datetime/text<78>?
- 菫ョ謾ケ `createSession()`<EFBFBD><EFBFBD>蟒コ譌カ隶。邂礼サ溯ョ。
4. **`backend/src/modules/dc/tool-c/services/AICodeService.ts`**
- 譁ー蠅樊婿豕包シ啻isDataExplorationQuery()` - 蛻、譁ュ譏ッ蜷ヲ荳コ謨ー謐ョ謗「邏?
- 譁ー蠅樊婿豕包シ啻handleDataExploration()` - 螟<>炊謨ー謐ョ謗「邏「髣ョ鬚<EFBDAE>
- 菫ョ謾ケ `generateCode()`<EFBFBD>壼「槫刈謨ー謐ョ謗「邏「蛻<EFBFBD><EFBFBD>?
### 謗「邏「蜈ウ髞ョ隸崎ッ<E5B48E><EFBDAF>?
**謨ー謐ョ謗「邏「蜈ウ髞ョ隸?*<2A>壽怏螟壼ー代€∫サ溯ョ。縲∵衍逵九€∵仞遉コ縲∫シコ螟ア蛟シ縲∝ケウ蝮<EFBDB3>€シ縲∽クュ菴肴焚縲∵焚謐ョ邀サ蝙九€<C280>蜷阪€<C280><EFBFBD>€∝頃豈?
**謨ー謐ョ貂<EFBDAE>エ怜<EFBDB4>髞ョ隸?*<2A>壼唖髯、縲∝悉髯、縲∝。ォ陦・縲∵崛謐「縲∬スャ謐「縲∫函謌舌€<C280>蟒コ縲∫ュ幃€€∬ソ<E288AC>サ、縲∝粋蟷?
**蛻、譁ュ騾サ霎<EFBDBB>**<EFBFBD>壼桁蜷ォ謗「邏「蜈ウ髞ョ隸<EFBFBD> **荳?* 荳榊桁蜷ォ貂<EFBDAB>エ怜<EFBDB4>髞ョ隸<EFBDAE> 竊?謨ー謐ョ謗「邏「
### 遉コ萓句ッケ豈<EFBDB9>
| 逕ィ謌キ髣ョ鬚<EFBDAE> | 蛻、譁ュ扈捺棡 | AI陦御クコ |
|---------|---------|--------|
| "諤ァ蛻ォ蛻玲怏螟壼ー醍シコ螟ア蛟シ<E89B9F><EFBDBC>" | 謨ー謐ョ謗「邏「 | 逶エ謗・蝗樒ュ費シ?諤ァ蛻ォ蛻玲怏10荳ェ郛コ螟ア蛟シ<E89B9F>檎シコ螟ア邇?.00%" |
| "蟷エ鮴<EFBDB4><E9AEB4><EFBFBD>ケウ蝮<EFBDB3>€シ譏ッ螟壼ー托シ? | 謨ー謐ョ謗「邏「 | 逶エ謗・蝗樒ュ費シ?蟷エ鮴<EFBDB4><E9AEB4><EFBFBD>ケウ蝮<EFBDB3>€シ譏ッ45.23蟯? |
| "謚顔シコ螟ア蛟シ譖ソ謐「荳コ0" | 謨ー謐ョ貂<EFBDAE><EFBFBD> | 逕滓<E98095>莉」遐<EFBDA3>シ啻df.fillna(0)` |
### 逕ィ謌キ菴馴ェ梧署蜊<E7BDB2>
- 笞?蜩榊コ秘€溷コヲ<EFBDBA>?500%<25>域裏髴€謇ァ陦御サ」遐<EFBDA3>シ?
- <20>識 蜃<>。ョ蠎ヲ<E8A08E><EFBDA6>+80%<25>亥渕莠主ョ樣刔扈溯ョ。<EFBDAE><EFBDA1>
- <20><> 貊。諢丞コヲ<EFBDBA><EFBDA6>+40%<25>亥叉髣ョ蜊ウ遲費シ<E8B2BB>
- <20>腸 謌先悽闃らコヲ<EFBDBA>?70%<25>亥㍼蟆銑LM隹<4D>畑蜥訓ython謇ァ陦鯉シ?
---
## <20>識 蜉溯<E89C89>4<EFBFBD>壼ッシ蜃コExcel蜉溯<E89C89>
### 髣ョ鬚<EFBDAE>
逕ィ謌キ譌<EFBFBD>豕募ッシ蜃コ貂<EFBFBD>エ怜錘逧<EFBFBD>焚謐ョ<EFBFBD>梧裏豕戊ソ帑ク€豁・蛻<EFBFBD>梵縲?
### 隗」蜀ウ譁ケ譯<EFBDB9>
譁ー蠅槫ッシ蜃コAPI<EFBFBD>梧髪謖∽ク€髞ョ荳玖スス貂<EFBFBD>エ怜錘逧Еxcel譁<EFBFBD>サカ縲?
### 蜉溯<E89C89>迚ケ諤?
- 笨?閾ェ蜉ィ蛻怜ョス隹<EFBDBD><EFBFBD><EFBFBD>ケ謐ョ蜀<EFBDAE>ョケ<EFBDAE><EFBDB9>
- 笨?譁<>サカ蜷崎<E89CB7>蜉ィ蜉<EFBDA8>譌カ髣エ謌ウ<E8AC8C>啻蜴滓枚莉カ蜷浩cleaned_2025-12-07T15-30-00.xlsx`
- 笨?謾ッ謖∝視郛ゥ<E9839B>亥㍼蟆乗枚莉カ螟ァ蟆擾シ<E693BE>
- 笨?豬∝シ丈ク玖スス<EFBDBD>亥、ァ譁<EFBDA7>サカ蜿句・ス<EFBDA5>?
### 菫ョ謾ケ譁<EFBDB9>サカ
1. **`backend/src/modules/dc/tool-c/controllers/SessionController.ts`**
- 譁ー蠅樊婿豕包シ啻exportData()` - 蟇シ蜃コExcel
2. **`backend/src/modules/dc/tool-c/routes/index.ts`**
- 譁ー蠅櫁キッ逕ア<E98095>啻GET /sessions/:id/export`
3. **`frontend-v2/src/modules/dc/pages/tool-c/components/Header.tsx`** (荵句燕蟾イ莨伜<E88EA8>?
- 蟇シ蜃コ謖蛾聴蟾イ蟄伜惠<E4BC9C>悟宵髴€蟇ケ謗・API
### 螳樒鴫扈<E9B4AB>
```typescript
// 1. 闔キ蜿門ョ梧紛謨ー謐ョ
const data = await sessionService.getFullData(sessionId);
// 2. 逕滓<E98095>Excel
const workbook = xlsx.utils.book_new();
const worksheet = xlsx.utils.json_to_sheet(data);
// 3. 閾ェ蜉ィ隹<EFBDA8>紛蛻怜ョス
const colWidths = session.columns.map(col => {
const maxLength = Math.max(
col.length,
...data.slice(0, 100).map(row => String(row[col] || '').length)
);
return { wch: Math.min(maxLength + 2, 50) };
});
worksheet['!cols'] = colWidths;
// 4. 逕滓<E98095>Buffer<65>亥星逕ィ蜴狗シゥ<EFBDBC><EFBDA9>
const buffer = xlsx.write(workbook, {
type: 'buffer',
bookType: 'xlsx',
compression: true,
});
// 5. 霑泌屓譁<E5B193>サカ
reply.header('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
reply.header('Content-Disposition', `attachment; filename="${exportFileName}"`);
reply.send(buffer);
```
### 逕ィ謌キ菴馴ェ梧署蜊<E7BDB2>
- 笨?螳梧紛蟾・菴懈オ<E68788>シ壻ク贋シ<E8B48B> 竊?貂<><EFBFBD> 竊?蟇シ蜃コ
- 笨?譁<>サカ蜻ス蜷肴匱閭ス<E996AD><EFBFBD>蜉ィ蜉<EFBDA8>譌カ髣エ謌?
- 笨?譬シ蠑丈シ伜喧<E4BC9C><EFBFBD>螳ス閾ェ騾ょコ<E38287>
- 笨?諤ァ閭ス莨伜喧<E4BC9C>壼視郛ゥ蜃丞ー?0%譁<>サカ螟ァ蟆<EFBDA7>
---
## <20>識 蜉溯<E89C89>5<EFBFBD>壼、肴揩蝨コ譎ッ豬玖ッ包シ亥性螟夐㍾謠定。・<EFBDA1><EFBDA5>
### 髣ョ鬚<EFBDAE>
郛コ蟆鷹ォ倡コァ蝨コ譎ッ逧<EFBFBD>オ玖ッ慕畑萓具シ梧裏豕暮ェ瑚ッ、I螟<EFBFBD>炊螟肴揩髴€豎ら噪閭ス蜉帙€?
### 隗」蜀ウ譁ケ譯<EFBDB9>
蛻帛サコ鬮倡コァ豬玖ッ戊<EFBFBD>譛ャ<EFBFBD>悟桁蜷?荳ェ螟肴揩蝨コ譎ッ縲?
### 譁ー蠅樊枚莉カ
**`backend/test-tool-c-advanced-scenarios.mjs`** (435陦?
### 豬玖ッ募惻譎ッ貂<EFBDAF>
| 蝨コ譎ッID | 蜷咲ァー | 螟肴揩蠎?| 蜈ウ髞ョ謚€譛?|
|--------|------|--------|---------|
| 1 | 螟壽擅莉カ遲幃€?蛻<><EFBFBD>サ溯ョ。 | 箝絶ュ絶ュ?| 譚。莉カ遲幃€€∝ケエ鮴<EFBDB4><E9AEB4><EFBFBD>€」alue_counts |
| 2 | 譌カ髣エ蠎丞<E8A08E>隶。邂<EFBDA1> | 箝絶ュ絶ュ?| pd.to_datetime縲“roupby縲∥gg |
| 3 | 螟夐㍾謠定。・<EFBDA1>亥渕遑€迚茨シ<E88CA8> | 箝絶ュ絶ュ絶ュ<E7B5B6> | np.random.seed縲∵ュ」諤∝<E8ABA4><EFBFBD>€∝、壽焚謐ョ髮?|
| 4 | 螟夐㍾謠定。・<EFBDA1><EFBDA5>ICE邂玲ウ包シ?| 箝絶ュ絶ュ絶ュ絶ュ?| 體セ蠑乗婿遞九€∬ソュ莉」蝪ォ陦・縲?霓ョ霑ュ莉?|
| 5 | 螟肴揩蛻<E68FA9>アサ騾サ霎<EFBDBB> | 箝絶ュ絶ュ?| np.where縲∝オ悟・玲擅莉カ縲∝、壼序驥丞愛譁ュ |
| 6 | 謨ー謐ョ謗「邏「<E9828F>井ク咲函謌蝉サ」遐<EFBDA3>シ?| 箝絶ュ<E7B5B6> | 逶エ謗・蝗樒ュ斐€∫サ溯ョ。菫。諱ッ郛灘ュ?|
| 7 | 蛻<>アょ、夐㍾謠定。・ | 箝絶ュ絶ュ絶ュ<E7B5B6> | 蛻<><EFBFBD>。ォ陦・縲》ransform縲∝、壽焚謐ョ髮?|
| 8 | 郛コ螟ア讓。蠑丞<E8A091><EFBFBD> | 箝絶ュ絶ュ?| isna()縲∫シコ螟ア邇<EFBDB1>サ溯ョ。縲∵擅莉カ蛻、譁?|
### 螟夐㍾謠定。・隸ヲ隗」
#### 蝨コ譎ッ3<EFBDAF>壼渕遑€螟夐㍾謠定。・
```python
# 逕滓<E98095>5荳ェ謠定。・謨ー謐ョ髮<EFBDAE>シ梧ッ丈クェ逕ィ荳榊酔髫乗惻遘榊ュ<E6A68A>
for i in range(5):
np.random.seed(100 + i)
df_imputed = df.copy()
missing_mask = df['age'].isna()
n_missing = missing_mask.sum()
# 逕ィ豁」諤∝<E8ABA4><EFBFBD>函謌宣囂譛コ蛟?
mean_age = df['age'].mean()
std_age = df['age'].std()
imputed_values = np.random.normal(mean_age, std_age, n_missing)
df_imputed.loc[missing_mask, 'age'] = imputed_values
# 菫晏ュ<E6998F> df_imputed_1, df_imputed_2, ...
```
#### 蝨コ譎ッ4<EFBDAF>哺ICE邂玲ウ墓ィ。諡<EFBDA1>
```python
# 體セ蠑乗婿遞句、夐㍾謠定。・<EFBDA1>?霓ョ霑ュ莉」<E88E89><EFBDA3>
df_mice = df.copy()
# 蛻晏ァ句。ォ陦・<E999A6>育畑荳ュ菴肴焚<E882B4><E7849A>
for col in ['age', 'BMI', 'systolic_bp']:
df_mice[col].fillna(df_mice[col].median(), inplace=True)
# 霑ュ莉」3霓?
for iteration in range(3):
# 逕ィ蜈カ莉門<E88E89><EFBFBD>オ句ス灘燕蛻?
for target_col in ['age', 'BMI', 'systolic_bp']:
predictor_cols = [c for c in ['age', 'BMI', 'systolic_bp'] if c != target_col]
# 邂€蛹厄シ夂畑蛻<E79591><EFBFBD>插蛟シ鬚<EFBDBC>オ具シ亥ョ樣刔MICE莨夂畑蝗槫ス呈ィ。蝙具シ?
df_mice[target_col] = df_mice.groupby(predictor_cols, observed=True)[target_col].transform('mean')
```
#### 蝨コ譎ッ7<EFBDAF><EFBFBD>螻ょ、夐㍾謠定。?
```python
# 謖画€ァ蛻ォ蛻<EFBDAB><EFBFBD>。ォ陦・蟷エ鮴<EFBDB4>
for i in range(3):
df_imputed = df.copy()
# 逕キ諤ァ逕ィ逕キ諤ァ蟷エ鮴<EFBDB4>插蛟?
male_mean = df[df['gender'] == '逕?]['age'].mean()
df_imputed.loc[(df_imputed['gender'] == '逕?) & (df_imputed['age'].isna()), 'age'] = male_mean
# 螂ウ諤ァ逕ィ螂ウ諤ァ蟷エ鮴<EFBDB4>插蛟?
female_mean = df[df['gender'] == '螂?]['age'].mean()
df_imputed.loc[(df_imputed['gender'] == '螂?) & (df_imputed['age'].isna()), 'age'] = female_mean
```
### 豬玖ッ戊<EFBDAF>譛ャ蜉溯<E89C89>
- 笨?閾ェ蜉ィ荳贋シ<E8B48B>豬玖ッ墓枚莉カ
- 笨?鬘コ蠎乗鴬陦<E9B4AC>8荳ェ蝨コ譎?
- 笨?螳樊慮譏セ遉コSSE豬∫ィ<E288AB>
- 笨?扈溯ョ。謌仙粥/螟ア雍・邇?
- 笨?豬玖ッ募ッシ蜃コ蜉溯<E89C89>
- 笨?逕滓<E98095>豬玖ッ墓冠蜻<E586A0>
### 霑占。梧婿豕<E5A9BF>
```bash
cd backend
node test-tool-c-advanced-scenarios.mjs
```
### 鬚<>悄霎灘<E99C8E>
```
================================================================================
<EFBFBD>ァェ 蟾・蜈キC鬮倡コァ蝨コ譎ッ豬玖ッ包シ亥性螟夐㍾謠定。・<EFBDA1>?
================================================================================
<EFBFBD>豆 豁・鬪、1: 荳贋シ<E8B48B>豬玖ッ墓枚莉カ...
笨?荳贋シ<E8B48B>謌仙粥: Session ID = abc-123-def
<>サカ: test_data_advanced.xlsx
謨ー謐ョ: 1000 陦?テ<> 6 蛻?
================================================================================
<EFBFBD>搭 蝨コ譎ッ1: 螟壽擅莉カ遲幃€?蛻<><EFBFBD>サ溯ョ。
<EFBFBD>統 謠剰ソー: 豬玖ッ募、肴揩逧<E68FA9>、壽擅莉カ遲幃€牙柱蛻<E69FB1><EFBFBD>サ溯ョ。蜉溯<E89C89>
<EFBFBD>町 逕ィ謌キ霎灘<E99C8E>: "遲幃€<C280>蟷エ鮴<EFBDB4><E9AEB4>?8蟯√€€ァ蛻ォ荳コ螂ウ縲。MI竕?8逧<38>ぅ閠<E38185>シ梧潔蟷エ鮴<EFBDB4>ョオ<EFBDAE>?8-30, 30-50, 50+<2B><EFBFBD><EFBFBD>サ溯ョ。莠コ謨?
================================================================================
<EFBFBD>藤 豬∝シ丞桃蠎<E6A183>:
竢?Step 1: <20>搭 豁」蝨ィ蛻<EFBDA8>梵菴<E6A2B5><EFBFBD>怙豎?..
笨?Step 1: 笨?髴€豎ょ<E8B18E>譫仙ョ梧<EFBDAE>?
竢?Step 2: <20>捗 豁」蝨ィ逕滓<E98095>Python莉」遐<EFBDA3>...
笨?Step 2: 笨?莉」遐∫函謌先<E8AC8C><EFBFBD>
<EFBFBD>統 逕滓<E98095><EFBFBD>サ」遐?
df_filtered = df[(df['age'] >= 18) & (df['gender'] == '螂?) & (df['BMI'] >= 28)]
df_filtered['age_group'] = pd.cut(df_filtered['age'], bins=[18, 30, 50, 120], labels=['18-30', '30-50', '50+'])
result = df_filtered['age_group'].value_counts()
print(result)
<EFBFBD>庁 隗」驥<EFBDA3>: 遲幃€臥ャヲ蜷域擅莉カ逧<EFBDB6>ぅ閠<E38185>シ梧潔蟷エ鮴<EFBDB4>ョオ蛻<EFBDB5><EFBFBD>サ溯ョ。莠コ謨ー
竢?Step 4: <20>剥 豁」蝨ィ鬪瑚ッ∽サ」遐∝ョ牙<EFBDAE>諤?..
笨?Step 4: 笨?莉」遐<EFBDA3>ェ瑚ッ<E7919A>€夊ソ<E5A48A>
竢?Step 5: 笞呻ク<E591BB> 豁」蝨ィ謇ァ陦御サ」遐<EFBDA3>...
笨?Step 5: 笨?莉」遐∵鴬陦梧<E999A6><EFBFBD>
笨?Step 6: <20>脂 螟<>炊螳梧<E89EB3><E6A2A7>∬ッキ譟・逵句キヲ萓ァ陦ィ譬シ
笨?蝨コ譎ッ1螳梧<E89EB3> (閠玲慮: 3.52遘?
笨?謇ァ陦梧<E999A6><EFBFBD>
... (蝨コ譎ッ2-8邀サ莨シ) ...
================================================================================
<EFBFBD>投 豬玖ッ墓冠蜻<E586A0>
================================================================================
笨?謌仙粥: 8/8
笶?螟ア雍・: 0/8
<EFBFBD>搭 隸ヲ扈<EFBDA6>サ捺棡:
笨?蝨コ譎ッ1: 螟壽擅莉カ遲幃€?蛻<><EFBFBD>サ溯ョ。
笨?蝨コ譎ッ2: 譌カ髣エ蠎丞<E8A08E>隶。邂<EFBDA1>
笨?蝨コ譎ッ3: 螟夐㍾謠定。・<EFBDA1>亥渕遑€迚茨シ<E88CA8>
笨?蝨コ譎ッ4: 螟夐㍾謠定。・<EFBDA1><EFBDA5>ICE邂玲ウ包シ?
笨?蝨コ譎ッ5: 螟肴揩蛻<E68FA9>アサ騾サ霎<EFBDBB>
笨?蝨コ譎ッ6: 謨ー謐ョ謗「邏「<E9828F>井ク咲函謌蝉サ」遐<EFBDA3>シ?
笨?蝨コ譎ッ7: 蛻<>アょ、夐㍾謠定。・
笨?蝨コ譎ッ8: 郛コ螟ア讓。蠑丞<E8A091><EFBFBD>
<EFBFBD>踏 豬玖ッ募ッシ蜃コ蜉溯<E89C89>...
笨?蟇シ蜃コ謌仙粥: test-output/export_1733580000000.xlsx (45.23KB)
================================================================================
<EFBFBD>脂 豬玖ッ募ョ梧<EFBDAE><E6A2A7>?
================================================================================
```
---
## <20>嶋 謨エ菴捺譜譫懆ッ<E68786>シー
### 蠑€蜿第譜邇<E8AD9C>署蜊?
- 笨?莉」遐∝、咲畑<E592B2>壼、咲畑Platform螻よ恪蜉。<E89C89><EFBDA1>torage縲´LM縲´ogger<65>?
- 笨?莠大次逕滓楔譫<E6A594>シ壽裏逎∫尨蜀吝<E89C80><E5909D><EFBFBD><EFBFBD>ュ?OSS
- 笨?讓。蝮怜喧隶セ隶。<E99AB6>咾ontroller/Service貂<65>匆蛻<E58C86>ヲサ
### 逕ィ謌キ菴馴ェ梧署蜊<E7BDB2>シ育サシ蜷茨シ<E88CA8>
- <20>噫 蜩榊コ秘€溷コヲ<EFBDBA>?200%<25>域焚謐ョ謗「邏「逶エ謗・蝗樒ュ費シ<E8B2BB>
- <20>剥 謫堺ス憺€<C280>蠎ヲ<E8A08E><EFBDA6>+100%<25>域オ∝シ丞ア慕、コ豈丈ク€豁・<E8B181><EFBDA5>
- <20>識 莠、莠呈譜邇<E8AD9C>シ?50%<25><EFBFBD>蜉ィ謇ァ陦御サ」遐<EFBDA3><EFBFBD>
- <20><> 貊。諢丞コヲ<EFBDBA><EFBDA6>+60%<25>亥粥閭ス譖エ譎コ閭ス<E996AD>?
- <20><EFBFBD>?螳牙<E89EB3>諢滂シ<E6BB82>+40%<25>磯漠隸ッ謠千、コ隸ヲ扈<EFBDA6><EFBFBD>
### 謚€譛ッ蛻帶眠轤ケ
1. **豬∝シ就I蜩榊コ<E6A68A>**<EFBFBD>壼嵜蜀<EFBFBD>ー題ァ∫噪蛻<EFBFBD>ュ・鬪、螻慕、コAI諤晁€<EFBFBD>ソ<EFBFBD>ィ?
2. **譎コ閭ス蛻<EFBDBD><EFBFBD>**<EFBFBD><EFBFBD>蜉ィ蛹コ蛻<EFBFBD>焚謐ョ謗「邏「vs謨ー謐ョ貂<EFBFBD><EFBFBD>
3. **扈溯ョ。菫。諱ッ郛灘ュ<E78198>**<EFBFBD>夐∩蜈埼㍾螟崎ョ。邂暦シ悟、ァ蟷<EFBFBD>署蜊<EFBFBD>€ァ閭ス
4. **螟夐㍾謠定。・謾ッ謖<EFBDAF>**<EFBFBD>壽髪謖<EFBFBD>ォ倡コァ扈溯ョ。蟄ヲ譁ケ豕<EFBFBD>
5. **閾ェ蜉ィ驥崎ッ墓惻蛻カ**<EFBFBD>哂I閾ェ謌台ソョ豁」<EFBFBD><EFBFBD>蜉溽紫謠仙合80%
---
## <20>肌 謨ー謐ョ蠎灘序譖?
### Schema蜿俶峩
```prisma
model DcToolCSession {
// ... 邇ー譛牙ュ玲ョオ ...
// 笨?譁ー蠅槫ュ玲ョオ
dataStats Json? @map("data_stats") // 謨ー謐ョ扈溯ョ。菫。諱ッ郛灘ュ<E78198>
}
```
### 霑∫ァサ閼壽悽
```bash
psql -d airesearch_v2 -f migrations/add_data_stats_to_tool_c_session.sql
```
---
## <20>統 譁<>サカ貂<EFBDB6>
### 譁ー蠅樊枚莉カ<E88E89>?荳ェ<E88DB3><EFBDAA>
1. `backend/src/modules/dc/tool-c/controllers/StreamAIController.ts` - 豬∝シ就I謗ァ蛻カ蝎?
2. `backend/migrations/add_data_stats_to_tool_c_session.sql` - 謨ー謐ョ蠎楢ソ∫ァサ閼壽<E996BC>?
3. `backend/test-tool-c-advanced-scenarios.mjs` - 鬮倡コァ蝨コ譎ッ豬玖ッ戊<EFBDAF>譛ャ
4. `frontend-v2/src/modules/dc/pages/tool-c/components/StreamingSteps.tsx` - 豬∝シ乗ュ・鬪、螻慕、コ扈<EFBDBA>サカ
5. `docs/03-荳壼苅讓。蝮<EFBDA1>/DC-謨ー謐ョ貂<EFBDAE>エ玲紛逅<E7B49B>/06-蠑€蜿題ョー蠖?2025-12-07_AI蟇ケ隸晄<E99AB8>ク蠢<EFBDB8>粥閭ス蠅槫シコ諤サ扈<EFBDBB>.md` - 譛ャ譁<EFBDAC>。?
### 菫ョ謾ケ譁<EFBDB9>サカ<EFBDBB>?荳ェ<E88DB3><EFBDAA>
1. `backend/prisma/schema.prisma` - 譁ー蠅枦ataStats蟄玲ョオ
2. `backend/src/modules/dc/tool-c/routes/index.ts` - 譁ー蠅<EFBDB0>2荳ェ霍ッ逕?
3. `backend/src/modules/dc/tool-c/controllers/SessionController.ts` - 蟇シ蜃コ蜉溯<E89C89>
4. `backend/src/modules/dc/tool-c/services/SessionService.ts` - 扈溯ョ。菫。諱ッ隶。邂<EFBDA1>
5. `backend/src/modules/dc/tool-c/services/AICodeService.ts` - 謨ー謐ョ謗「邏「蛻、譁ュ
6. `frontend-v2/src/modules/dc/pages/tool-c/components/Sidebar.tsx` - 豬∝シ丞ア慕、コ髮<EFBDBA><E9ABAE>
7. `frontend-v2/src/modules/dc/pages/tool-c/components/Header.tsx` - (荵句燕蟾イ莨伜<E88EA8>?
8. `frontend-v2/src/modules/dc/pages/tool-c/components/DataGrid.tsx` - (荵句燕蟾イ莨伜<E88EA8>?
9. `frontend-v2/src/modules/dc/pages/tool-c/components/Toolbar.tsx` - (荵句燕蟾イ莨伜<E88EA8>?
---
## <20>噫 蜷守サュ莨伜喧蟒コ隶ョ
### 遏ュ譛滉シ伜喧<E4BC9C>?蜻ィ蜀<EFBDA8>シ?
1. **謨ー謐ョ謗「邏「蠅槫シコ**
- 謾ッ謖∵峩螟夂サ溯ョ。謖<EFBDA1><E8AC96><EFBFBD>シ域婿蟾ョ縲∝<E7B8B2>菴肴焚縲∝¥蠎ヲ縲∝ウー蠎ヲ<E8A08E><EFBDA6>
- 謾ッ謖∫嶌蜈ウ諤ァ蛻<EFBDA7><EFBFBD><EFBFBD>髣エ蜈ウ邉サ<E98289>?
- 謾ッ謖∫シコ螟ア蛟シ讓。蠑丞庄隗<E5BA84>
2. **豬∝シ丈ス馴ェ御シ伜喧**
- 豺サ蜉<EFBDBB>霑帛コヲ逋セ蛻<EFBDBE>ッ?
- 豺サ蜉<EFBDBB><EFBFBD>ョ。蜑ゥ菴呎慮髣エ
- 豺サ蜉<EFBDBB>蜉ィ逕サ謨域棡
### 荳ュ譛滉シ伜喧<E4BC9C>?譛亥<E8AD9B><E4BAA5>?
1. **鬮倡コァ螟夐㍾謠定。・**
-<><E9ABAE>逵滓ュ」逧МICE蠎難シ亥ヲancyimpute<74>?
- 謾ッ謖∝屓蠖貞。ォ陦・縲゜霑鷹そ蝪ォ陦・
- 謾ッ謖∝、夐㍾謠定。・扈捺棡蜷亥ケカ
2. **AI閭ス蜉帶黄螻<E9BB84>**
- 謾ッ謖∝、夊スョ蟇ケ隸昜ク贋ク区<EFBDB8>?
- 謾ッ謖∽サ」遐∽シ伜喧蟒コ隶ョ
- 謾ッ謖∵焚謐ョ雍ィ驥乗冠蜻顔函謌<E587BD>
### 髟ソ譛滉シ伜喧<E4BC9C>?譛亥<E8AD9B><E4BAA5>?
1. **遏・隸<EFBDA5>崟隹ア**
-<>サコ蛹サ逍玲焚謐ョ貂<EFBDAE>エ礼衍隸<E8A18D>コ?
- 謾ッ謖<EFBDAF><EFBFBD>沺迚ケ螳壻シ伜喧蟒コ隶ョ
- 謾ッ謖∵焚謐ョ譬<EFBDAE>㊥蛹匁耳闕?
2. **蜊丞酔郛冶セ<E586B6>**
- 謾ッ謖∝、壻ココ蜷梧慮謫堺ス<E5A0BA>
- 謾ッ謖∵桃菴懷紙蜿イ蝗樊コッ
- 謾ッ謖∫沿譛ャ邂。逅<EFBDA1>
---
## <20>当 API譁<49>。」
### 譁ー蠅暸PI
#### 1. 豬∝シ就I螟<49>
```
POST /api/v1/dc/tool-c/ai/stream-process
Content-Type: application/json
Request:
{
"sessionId": "abc-123-def",
"message": "謚雁ケエ鮴<EFBDB4>、ァ莠?0逧<30>ョセ荳コ閠∝ケエ扈?,
"maxRetries": 3
}
Response: (Server-Sent Events)
data: {"step":1,"stepName":"analyze","status":"running","message":"<22>搭 豁」蝨ィ蛻<EFBDA8>梵菴<E6A2B5><EFBFBD>怙豎?..","timestamp":1733580000000}
data: {"step":1,"stepName":"analyze","status":"success","message":"笨?髴€豎ょ<E8B18E>譫仙ョ梧<EFBDAE>?,"data":{"dataInfo":{"fileName":"test.xlsx","rows":1000,"cols":5}},"timestamp":1733580001000}
data: {"step":2,"stepName":"generate","status":"running","message":"<22>捗 豁」蝨ィ逕滓<E98095>Python莉」遐<EFBDA3>...","timestamp":1733580002000}
data: {"step":2,"stepName":"generate","status":"success","message":"笨?莉」遐∫函謌先<E8AC8C><EFBFBD>","timestamp":1733580003000}
data: {"step":3,"stepName":"show_code","status":"success","message":"<22>統 逕滓<E98095><EFBFBD>サ」遐∝ヲゆク具シ<E585B7>","data":{"code":"df.loc[df['age'] > 60, 'age_group'] = '閠∝ケエ'","explanation":"譬ケ謐ョ蟷エ鮴<EFBDB4>擅莉カ隶セ鄂ョ蛻<EFBDAE><EFBFBD>","messageId":"msg-123"},"timestamp":1733580004000}
data: {"step":4,"stepName":"validate","status":"running","message":"<22>剥 豁」蝨ィ鬪瑚ッ∽サ」遐∝ョ牙<EFBDAE>諤?..","timestamp":1733580005000}
data: {"step":4,"stepName":"validate","status":"success","message":"笨?莉」遐<EFBDA3>ェ瑚ッ<E7919A>€夊ソ<E5A48A>","timestamp":1733580006000}
data: {"step":5,"stepName":"execute","status":"running","message":"笞呻ク<E591BB> 豁」蝨ィ謇ァ陦御サ」遐<EFBDA3>...","timestamp":1733580007000}
data: {"step":5,"stepName":"execute","status":"success","message":"笨?莉」遐∵鴬陦梧<E999A6><EFBFBD>","timestamp":1733580008000}
data: {"step":6,"stepName":"complete","status":"success","message":"<22>脂 螟<>炊螳梧<E89EB3><E6A2A7>∬ッキ譟・逵句キヲ萓ァ陦ィ譬シ","data":{"result":..., "newDataPreview":[...],"retryCount":0},"timestamp":1733580009000}
data: [DONE]
```
#### 2. 蟇シ蜃コExcel
```
GET /api/v1/dc/tool-c/sessions/{sessionId}/export
Response: (File Download)
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Content-Disposition: attachment; filename="test_data_cleaned_2025-12-07T15-30-00.xlsx"
Content-Length: 45234
(Binary Excel file data)
```
---
## <20>雌 蠑€蜿第€サ扈<EFBDBB>
### 謌仙粥扈城ェ<E59F8E>
1. **豬∝シ丞桃蠎碑ョセ隶。**<EFBFBD>售SE豈埜ebSocket譖エ邂€蜊包シ梧峩騾ょ粋蜊募髄謗ィ騾?
2. **扈溯ョ。菫。諱ッ郛灘ュ<E78198>**<EFBFBD>售ession蛻帛サコ譌カ隶。邂嶺ク€谺。<EFBFBD>碁∩蜈埼㍾螟崎ョ。邂<EFBFBD>
3. **譎コ閭ス蛻<EFBDBD><EFBFBD>**<EFBFBD><EFBFBD>髞ョ隸榊愛譁ュ蜃<EFBFBD>。ョ邇?0%莉・荳<EFBDA5>
4. **閾ェ蜉ィ驥崎ッ<E5B48E>**<EFBFBD>哂I閾ェ謌台ソョ豁」謌仙粥邇?0%
5. **莠大次逕滓楔譫?*<2A><EFBFBD><EFBFBD><EFBFBD>+OSS<53>梧裏逎∫尨蜀吝<E89C80>
### 驕<>芦逧<E88AA6>倦謌?
1. **SSE霍ィ蝓滄琉鬚<E79089>**<EFBFBD>夐怙隕∵ュ」遑ョ隶セ鄂ョCORS螟?
2. **Prisma邀サ蝙矩琉鬚<E79089>**<EFBFBD>哽SONB蟄玲ョオ髴€隕∫アサ蝙区妙險€
3. **蜑咲ォッ豬∝シ剰ッサ蜿<EFBDBB>**<EFBFBD>夐怙隕∝、<EFBFBD>炊荳榊ョ梧紛逧<EFBFBD>カ域<EFBFBD><EFBFBD>
4. **驥崎ッ暮€サ霎大、肴揩**<EFBFBD>夐怙隕∽ソ晏ュ倅ク頑ャ。髞呵ッッ菫。諱?
### 隗」蜀ウ譁ケ譯<EFBDB9>
1. **SSE霍ィ蝓<EFBDA8>**<EFBFBD>壼惠Fastify驟咲スョ荳ュ豺サ蜉<EFBFBD>CORS荳ュ髣エ莉?
2. **Prisma邀サ蝙<EFBDBB>**<EFBFBD>壻スソ逕?`as any` 荳エ譌カ扈戊ソ<E6888A>シ悟錘扈ュ蜿ッ謇ゥ螻墓磁蜿」
3. **豬∝シ剰ッサ蜿<EFBDBB>**<EFBFBD>壻スソ逕ィbuffer郛灘ュ俶悴螳梧<EFBFBD><EFBFBD>。?
4. **驥崎ッ暮€サ霎<EFBDBB>**<EFBFBD>夊ョセ隶。貂<EFBFBD>匆逧<EFBFBD>憾諤∵惻
---
## <20>聡 閾エ隹「
諢溯ー「莉・荳区橿譛ッ譬育噪謾ッ謖<EFBFBD><EFBFBD>
- **Fastify**: 鬮俶€ァ閭スNode.js譯<73>
- **Prisma**: 莨倬寉逧ОRM蟾・蜈キ
- **xlsx**: 蠑コ螟ァ逧Еxcel螟<6C>炊蠎?
- **React + TypeScript**: 邀サ蝙句ョ牙<EFBDAE><EFBFBD>燕遶ッ蠑€蜿?
- **Ant Design X**: 莨倡ァ€<C280>ッケ隸拔I扈<49>サカ
- **DeepSeek-V3**: 蠑コ螟ァ逧<EFBDA7>サ」遐∫函謌占<E8AC8C>蜉?
---
**譁<>。」迚域悽**: v1.0
**菴懆€?*: AI Assistant
**螳。譬ク**: 蠕<>ョ。譬?
**譖エ譁ー譌・譛<EFBDA5>**: 2025-12-07