Files
AIclinicalresearch/docs/03-业务模块/DC-数据清洗整理/00-工具C当前状态与开发指南.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

1052 lines
44 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.
# 撌亙<E6928C>C嚗㇍ool C嚗? 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?- 敶枏<E695B6><E69E8F><EFBFBD><E59786><EFBFBD><EFBFBD><E69298><EFBFBD><E78390>?
> **<2A><><EFBFBD>擧凒<E693A7>?*: 2025-12-22
> **敶枏<E695B6><E69E8F><EFBFBD>𧋦**: Day 5-10 MVP + <20><EFBFBD><E8A098>厰僼 + NA憭<41><E686AD> + Pivot隡睃<E99AA1> + UX<55>滚之<E6BB9A><EFBFBD> + 憭𡁏<E686AD><F0A1818F><EFBFBD><EFBFBD>?+ **撘<><EFBFBD><EFBFBD><E59786>?* + **<2A><EFBFBD>隡睃<E99AA1><E79D83>?*
> **撘<><E69298>𤏸<EFBFBD>摨?*: Python敺格<E695BA><E6A0BC>?<3F>?| Session蝞∠<E89D9E> <20>?| AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD> <20>?| <20>滨垢摰峕㟲 <20>?| <20>𡁶鍂蝏<E98D82><20>?| <20><EFBFBD><E8A098>厰僼<E58EB0><E583BC><EFBFBD>7銝迎<E98A9D>| NA憭<41><E686AD><EFBFBD>?| Pivot隡睃<E99AA1><E79D83>?| UX隡睃<E99AA1><E79D83>?| 憭𡁏<E686AD><F0A1818F><EFBFBD><EFBFBD><EFBFBD> | **Postgres-Only撘<79><EFBFBD><EFBFBD><E59786>?* | **<2A><EFBFBD>隡睃<E99AA1><E79D83><EFBFBD><EFBFBD>-99%嚗?*
---
## <20><><E79285><E288AA><EFBFBD>餈𥕦漲
| 蝏<>辣 | 餈𥕦漲 | 隞<><E99A9E>銵峕㺭 | <20><EFBFBD>?|
|------|------|---------|------|
| **Python敺格<E695BA><E6A0BC>?* | 100% | ~1800銵?| <20>?Day 1摰峕<E691B0> + Day 6<><EFBFBD> + NA憭<41><E686AD>隡睃<E99AA1> + <20><EFBFBD><E588B8>唳旿憭<E697BF><E686AD> |
| **Node.js<6A>𡒊垢** | 100% | ~3500銵?| <20>?Day 2-3摰峕<E691B0>嚗㷉ay 5-8憓𧼮撩隡睃<E99AA1> + <20><EFBFBD>餈𥪜<E9A488> |
| **<EFBFBD>滨垢<EFBFBD>屸𢒰** | 99% | ~4000銵?| <20>?Day 4-8摰峕<E691B0>嚗𣬚<E59A97><F0A3AC9A>?銵<>噡/皛𡁜𢆡<F0A1819C>?<3F><EFBFBD><E588B8>唳旿<E594B3>㰘蝸 |
| **<EFBFBD>𡁶鍂 Chat 蝏<>辣** | 100% | ~968銵?| <20>?Day 5摰峕<E691B0><EFBFBD><E59A97>憭扳<E686AD>撠梧<E692A0>|
| **<EFBFBD><EFBFBD><EFBFBD>厰僼** | 100% | ~2800銵?| <20>?Day 6摰峕<E691B0>7銝芸<E98A9D><E88AB8>?+ NA憭<41><E686AD> + Pivot隡睃<E99AA1> |
| **<EFBFBD>唳旿摨廍chema** | 100% | 2銵?| <20>?Day 2-3摰峕<E691B0> |
| **蝡臬<E89DA1>蝡舀<E89DA1>霂?* | 90% | - | <20>?<3F><EFBFBD><E8A9A8><EFBFBD><E8A098><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD> |
| **<EFBFBD><EFBFBD>餈𥕦漲** | **98%** | **~15000銵?* | <20>?**MVP摰峕<E691B0> + 7銝芸<E98A9D><E88AB8><EFBFBD><E8B3A3>?+ NA憭<41><E686AD> + Pivot隡睃<E99AA1> + UX<55>滚之<E6BB9A><EFBFBD>嚗?* |
---
## <20>?撌脣<E6928C><E884A3>𣂼<EFBFBD><F0A382BC><EFBFBD>Day 1-10嚗?
### <20><> Day 10 Postgres-Only撘<79><EFBFBD><EFBFBD> + <20><EFBFBD>隡睃<E99AA1>嚗?025-12-22嚗争<E59A97>
#### 1. <20><EFBFBD><E8A9A8><EFBFBD>𩤃<EFBFBD><F0A9A483><EFBFBD>辣銝𠹺<E98A9D><EFBFBD>郊憭<E9838A><E686AD><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD><EFBFBD>峕艶**嚗?- <20>?憭扳<E686AD>隞塚<E99A9E>3339銵䁱?51<35><EFBFBD>4MB嚗劐<E59A97>隡㰘<E99AA1><E3B098><EFBFBD>47蝘?> 30蝘㘾<E89D98><E398BE><EFBFBD>
- <20>?<3F>𡒊垢<F0A1928A>峕郊閫<E9838A><E996AB>撖潸稲HTTP霂瑟<E99C82><E7919F><EFBFBD>
- <20>?getPreviewData/getFullData 瘥𤩺活<F0A4A9BA><EFBFBD><EFBFBD><E996AB><EFBFBD><E59A97>埈𧒄43蝘𡜐<E89D98>
- <20>?<3F><EFBFBD>雿㯄<E99BBF>撌殷<E6928C><E6AEB7>踵𧒄<E8B8B5><EFBFBD><EFBFBD><E695BA><EFBFBD><EFBFBD>摨血<E691A8>擐?
**閫<><E996AB><EFBFBD><EFBFBD>嚗䥪ostgres-Only 撘<><EFBFBD><EFBFBD>**
| <20><EFBFBD>撅?| 摰䂿緵 | <20>埈𧒄 | <20><EFBFBD> |
|-------|------|------|------|
| **銝𠹺<E98A9D><F0A0B9BA>亙藁** | 敹恍<E695B9><EFBFBD>隡𤪻SS + <20><EFBFBD><E588B8><EFBFBD><EFBFBD>?+ 蝡见朖餈𥪜<E9A488> | 3蝘?| <20>?-94%嚗?7<>?蝘𡜐<E89D98> |
| **Worker憭<72><E686AD>** | pg-boss撘<73>郊閫<E9838A><E996AB> + 靽嘥<E99DBD>clean data | 53蝘?| <20>𤾸蝱<F0A4BEB8><EFBFBD> |
| **<EFBFBD>滨垢頧株砭** | React Query<72><EFBFBD>頧株砭 + 餈𥕦漲<F0A595A6>?| 摰墧𧒄<E5A2A7><EFBFBD> | 雿㯄<E99BBF>隡条<E99AA1> |
| **<EFBFBD>唳旿霂餃<EFBFBD>** | 隡睃<E99AA1>霂餃<E99C82>clean data蝻枏<E89DBB> | 0.5蝘?| <20>?-99%嚗?3<>?.5蝘𡜐<EFBFBD> |
#### 2. <20><><EFBFBD><EFBFBD><E887AC>?
**2.1 Prisma Schema<6D>孵𢆡**
```prisma
model DcToolCSession {
// <20><EFBFBD>摮埈挾
cleanDataKey String? // 皜<><E79A9C><EFBFBD>𡒊<EFBFBD><F0A1928A>唳旿嚗<E697BF><E59A97><EFBFBD><EFBFBD>憭滩恣蝞梹<E89D9E>
// 摮埈挾<E59F88>嫣蛹<E5ABA3><EFBFBD><EFBFBD><EFBFBD>郊憛怠<E6869B>嚗? totalRows Int?
totalCols Int?
columns Json?
}
```
**2.2 <20>𡒊垢撘<E59EA2><EFBFBD><EFBFBD>**
- <20>?SessionService.createSession嚗帋<E59A97>隡𤪻SS + <20><EFBFBD><E588B8><EFBFBD><EFBFBD><3蝘𡜐<E89D98>
- <20>?parseExcelWorker嚗𡁜<E59A97><F0A1819C>啗圾<E59597>?+ 靽嘥<E99DBD>clean data嚗?3蝘𡜐<E89D98>
- <20>?SessionController.getSessionStatus嚗𡁶𠶖<F0A181B6><F0A0B696>䰻霂PI嚗<49>蔭霂鍂嚗?- <20>?SessionService.getPreviewData嚗帋<E59A97><E5B88B><EFBFBD>粉clean data嚗?.5蝘𡜐<EFBFBD>
- <20>?SessionService.getFullData嚗帋<E59A97><E5B88B><EFBFBD>粉clean data嚗?.5蝘𡜐<EFBFBD>
- <20>?SessionService.saveProcessedData嚗𡁜<E59A97>甇交凒<E4BAA4>軏lean data
**2.3 <20>滨垢React Query頧株砭**
- <20>?useSessionStatus Hook嚗𡁏惣<F0A1818F>質蔭霂<E99C82><EFBD87>芸𢆡銝脰<E98A9D><E884B0><EFBFBD>俈撟嗅<E6929F>嚗?- <20>?餈𥕦漲<F0A595A6>I嚗𡁜<E59A97><F0A1819C>嗆遬蝷?-100%
- <20>?useEffect<63>穃𨯬嚗窃tatus='ready'<27>嗉䌊<E59789><EFBFBD>頧賣㺭<E8B3A3>?
**2.4 <20><EFBFBD>隡睃<E99AA1>**
- <20>?<3F><EFBFBD><EFBFBD><E79A9C>蝞埈<E89D9E>嚗朞器<E69C9E><EFBFBD>瘚?+ 摰匧<E691B0><E58CA7><EFBFBD>嚗?000<30>𨰜<EFBFBD>?00銝<30><E98A9D><EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD>嚗?- <20>?頧駁<E9A0A7>蝥折<E89DA5><EFBFBD><E99C82>validateFile銝滚<E98A9D>摰峕㟲閫<E39FB2><E996AB>嚗?1蝘𡜐<E89D98>
- <20>?clean data蝻枏<E89DBB>嚗阳orker靽嘥<E99DBD>嚗峕<E59A97><E5B395><EFBFBD>雿𨅯<E99BBF><F0A885AF>?
#### 3. <20>喲睸<E596B2><E79DB8><EFBFBD><EFBFBD><E88890>?
| <20><><EFBFBD><EFBFBD> | <20><EFBFBD> | 閫<><E996AB><EFBFBD><EFBFBD> |
|-------|------|---------|
| 撟賜<E6929F><E8B39C>?| 16384<38>𦯀葉<F0A6AF80><EFBFBD>151<35><EFBFBD><E59F88>?| 颲寧<E9A2B2><EFBFBD>瘚讠<E7989A>瘜𤏪<E7989C><EFBFBD><E98B86><EFBFBD>喃儒蝛箏<E89D9B> |
| 撟賜<E6929F>銵?| <20><EFBFBD>瘙⊥<E79899>撖潸稲<E6BDB8>𡁻<EFBFBD> | 餈<><EFBFBD>函征銵?|
| <20><EFBFBD><E7AC94>滨妍 | `asl:screening:batch` 銝滚<E98A9D>瘜?| <20>嫣蛹 `asl_screening_batch`<EFBFBD><EFBFBD><EFBFBD>垍瑪嚗?|
| 頧株砭憌擧𠂔 | <20>峕𧒄15+撟嗅<E6929F>霂瑟<E99C82> | React Query<72>芸𢆡銝脰<E98A9D> |
| <20><EFBFBD>霈∠<E99C88> | 瘥𤩺活<F0A4A9BA><EFBFBD><E6BBA2>齿鰵閫<E9B0B5><E996AB>嚗?3蝘𡜐<E89D98> | clean data蝻枏<E89DBB>憭滨鍂嚗?.5蝘𡜐<EFBFBD> |
| MemoryQueue | 銝齿𣈲<E9BDBF><F0A388B2><EFBFBD>甇交<E79487><EFBFBD><E98A8B> | <20><EFBFBD><E887AC><EFBFBD> `QUEUE_TYPE=pgboss` |
#### 4. <20><EFBFBD><E689AF>𣂼<EFBFBD>撖寞<E69296>
**<EFBFBD>閙活<EFBFBD><EFBFBD>**嚗?```
銝𠹺<EFBFBD>+憸<><E686B8>嚗?6蝘?<3F>?53.5蝘𡜐<EFBFBD>-44%嚗?蝑偦<E89D91><EFBFBD>雿頣<E99BBF>44蝘?<3F>?2.5蝘𡜐<EFBFBD>-94%嚗?Pivot<6F><EFBFBD>嚗?5蝘?<3F>?2.5蝘𡜐<EFBFBD>-94%嚗?撟嗅<E6929F>霂瑟<E99C82>嚗?5+銝?<3F>?1銝迎<E98A9D>-93%嚗?```
**摰峕㟲撌乩<E6928C><EFBFBD><E7989A>銝𠹺<E98A9D>+7甈⊥<E79488>雿頣<E99BBF>**嚗?```
銋见<EFBFBD>嚗?6蝘?+ 44蝘𠜎? = 404蝘𡜐<E89D98>6.7<EFBFBD><EFBFBD><EFBFBD>嚗?<3F>啣銁嚗?3蝘?+ 2.5蝘𠜎? = 70.5蝘𡜐<EFBFBD>1.2<EFBFBD><EFBFBD><EFBFBD>嚗?<3F><EFBFBD>嚗?83%
```
#### 5. 隞<><E99A9E>蝏蠘恣
| <20><>辣蝐餃<E89D90> | <20><EFBFBD>/靽格㺿 | 隞<><E99A9E><EFBFBD>?|
|---------|---------|--------|
| **Worker** | parseExcelWorker.ts嚗<73>鰵撱綽<E692B1> | ~410銵?|
| **Hook** | useSessionStatus.ts嚗<73>鰵撱綽<E692B1> | ~90銵?|
| **<2A>𡒊垢靽格㺿** | SessionService/Controller | ~200銵?|
| **<2A>滨垢靽格㺿** | index.tsx嚗<78><E59A97><EFBFBD><EFBFBD>蔭霂<E99C82> | ~100銵?|
| **<2A>唳旿摨?* | clean_data_key摮埈挾 | 1摮埈挾 |
| **<2A><>﹝** | 撘<>郊隞餃𦛚憭<F0A69B9A><E686AD><EFBFBD><EFBFBD><EFBFBD> | ~588銵?|
| **<2A>餉恣** | | **~1388銵?* |
#### 6. 瘚贝<E7989A>撉諹<E69289>
| 瘚贝<E7989A><E8B49D>箸艶 | 蝏𤘪<E89D8F> | 霂湔<E99C82> |
|---------|------|------|
| 11KB撠𤩺<E692A0>隞?| <20>?<3F><EFBFBD> | 3蝘雴<E89D98>隡?+ <20>唳旿<E594B3>㰘蝸 |
| 4MB憭扳<E686AD>隞塚<E99A9E>3339<33>151嚗?| <20>?<3F><EFBFBD> | 銝滚<E98A9D><EFBFBD>𧒄嚗峕㺭<E5B395>格迤蝖?|
| 16384<38>堒厭<E5A092><EFBFBD><E89084><EFBFBD>辣 | <20>?<3F><EFBFBD> | <20><EFBFBD><EFBFBD><E98B86><EFBFBD>?51<35>?|
| 頧株砭<E6A0AA><EFBFBD> | <20>?<3F><EFBFBD> | <20>蓥葵銝脰<E98A9D>霂瑟<E99C82>嚗峕<E59A97>撟嗅<E6929F> |
| clean data蝻枏<E89DBB> | <20>?<3F><EFBFBD> | getPreviewData 0.5蝘?|
| 7憭批<E686AD><E689B9><EFBFBD><EFBFBD> | <20>?<3F><EFBFBD> | 瘥𤩺活<F0A4A9BA><EFBFBD>2-3蝘?|
| 撖澆枂<E6BE86><EFBFBD> | <20>?<3F><EFBFBD> | 撖澆枂憭<E69E82><E686AD><EFBFBD>𡒊<EFBFBD><F0A1928A>唳旿 |
---
### <20><> Day 9 憭𡁏<E686AD><F0A1818F><EFBFBD><EFBFBD><EFBFBD><EFBCB7><EFBFBD>2025-12-21嚗争<E59A97>
#### 1. <20><EFBFBD><EFBFBD>
**<2A>餃郎<E9A483>𠉛弦銝梶鍂<E6A2B6><E98D82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘚钅<E7989A><E99285>唳旿頧祆揢撌亙<E6928C>**嚗峕𣈲<E5B395><F0A388B2>舅銝芾蓮<E88ABE><EFBCB8>𡢅<EFBFBD>
| 頧祆揢<E7A586><EFBFBD> | 颲枏<E9A2B2><E69E8F><EFBFBD> | 颲枏枂<E69E8F><EFBFBD> | <20><><EFBFBD>箸艶 |
|---------|---------|---------|---------|
| **<2A><EFBFBD>1嚗𡁜<E59A97><F0A1819C>鞉聢撘?* | 摰質” | <20>園𡢿<E59C92><EFBFBD>銵䕘<E98AB5><E49598><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 蝏蠘恣<E8A098><E681A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6AFBD><EFBFBD>摨娍芋<E5A88D><EFBFBD><E58D9D>EE<45><45><EFBFBD>桀虾閫<E899BE><E996AB> |
| **<2A><EFBFBD>2嚗𡁜<E59A97>蝷箸聢撘?* | 摰質” | <20>園𡢿<E59C92><EFBFBD><E5AB96><EFBFBD><E6A2B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 銝游<E98A9D><E6B8B8><EFBFBD><E4BA99><EFBFBD><EFBFBD>桀恣<E6A180>亥”<E4BAA5><E2809D>RF<52>詨笆<E8A9A8><E7AC86><EFBFBD><EFBFBD>𡑒<EFBFBD><F0A19192><EFBFBD><EFBFBD>桀恣<E6A180>?|
#### 2. <20><EFBFBD><E8A9A8><EFBFBD> <20>?
**2.1 <20><EFBFBD><E7AE84>芸𢆡<E88AB8><F0A286A1><EFBFBD>** <20>?- <20>?<3F>芸𢆡璉<F0A286A1>瘚见<E7989A><E8A781>滢葉<E6BBA2><E89189><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝘啣<E89D98><E595A3>園𡢿<E59C92>?- <20>?<3F><EFBFBD><EFBFBD><E99C82><EFBFBD><EFBFBD><EFBFBD>蝚佗<E89D9A>`___`<60><>__`<EFBFBD><EFBFBD>_`<60><>-`<EFBFBD><EFBFBD>.`蝑㚁<E89D91>
- <20>?<3F><EFBFBD><E7A08D><EFBFBD><E6BBA8><EFBFBD><E7AE84><EFBFBD><EFBFBD>耨憭?FMA<4D><EFBFBD><E9A483><EFBFBD>__<5F>箇瑪"霂<><E99C82><EFBFBD><EFBFBD>嚗?- <20>?<3F>園𡢿<E59C92><EFBFBD><E5ABA3><EFBFBD><EFBFBD>霂?- <20>?蝵桐縑摨西<E691A8><E8A5BF>?
**蝷箔<E89DB7>**嚗?```
颲枏<EFBFBD><EFBFBD><EFBFBD>嚗鎄MA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>__蝑偦<EFBFBD><EFBFBD><EFBFBD>箇瑪<EFBFBD><EFBFBD>MA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>__<EFBFBD>讛挪(2<>?<3F><>DL<44><EFBFBD>___<5F>箇瑪<E7AE87><E791AA>DL<44><EFBFBD>___<5F>讛挪(2<>?
<EFBFBD>芸𢆡璉<EFBFBD>瘚页<EFBFBD>
<20>?3銝芣<E98A9D><E88AA3><EFBFBD><EFBFBD>FMA<4D><EFBFBD><E9A483><EFBFBD><EFBFBD><EFBFBD>DL<44><EFBFBD><E9A483><EFBFBD>M<EFBFBD><EFBFBD>
<20>?8銝芣𧒄<E88AA3><EFBFBD>嚗𡁶<E59A97><F0A181B6><EFBFBD><E58CA7>箇瑪<E7AE87><E791AA><EFBFBD>霈?2<>?<3F><><EFBFBD>霈?1銝芣<E98A9D>)...
<20>?<3F><><EFBFBD>蝚佗<E89D9A>"___"
```
**2.2 <20><EFBFBD>1嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD>頧祇鵭銵剁<E98AB5><E58981>園𡢿<E59C92>嫣蛹銵䕘<E98AB5><E49598><EFBFBD><EFBFBD>銝箏<E98A9D>嚗?* <20>?- <20>?<3F><><EFBFBD>箸艶嚗鑹/Python蝏蠘恣<E8A098><E681A3><EFBFBD><EFBFBD><EFBFBD>gplot2/seaborn<72><EFBFBD><E888AA><EFBFBD><E7A194><EFBFBD>典郎銋?- <20>?<3F>烾◇摨譍<E691A8><E8AD8D><EFBFBD>`ID<EFBFBD>?<3F>?Event_Name <20>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>`
- <20>?靽脲<E99DBD><E884B2><EFBFBD>Record ID憿箏<E686BF>
- <20>?<3F>芸𢆡憭<F0A286A1><E686AD>蝻箏仃<E7AE8F><EFBFBD>outer join嚗?
**蝷箔<E89DB7>**嚗?```
颲枏<EFBFBD><EFBFBD>捐銵剁<EFBFBD>嚗?Record_ID | FMA<4D><EFBFBD><E9A483><EFBFBD><EFBFBD>箇瑪 | FMA<4D><EFBFBD><E9A483><EFBFBD><EFBFBD>讛挪1 | ADL<44><EFBFBD>_<EFBFBD>箇瑪 | ADL<44><EFBFBD>_<EFBFBD>讛挪1
4 | 58 | 67 | 40 | 95
5 | 61 | 79 | 35 | 85
颲枏枂嚗<EFBFBD>鵭銵剁<EFBFBD>嚗?Record_ID | Event_Name | FMA<4D><EFBFBD><E9A483>?| ADL<44><EFBFBD>
4 | <20>箇瑪 | 58 | 40
4 | <20>讛挪1 | 67 | 95
5 | <20>箇瑪 | 61 | 35
5 | <20>讛挪1 | 79 | 85
```
**2.3 <20><EFBFBD>2嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD>頧祉畆<E7A589><EFBFBD><E89B9B>園𡢿<E59C92>嫣蛹<E5ABA3><EFBFBD><E6A2B9><EFBFBD><EFBFBD>銝箄<E98A9D>嚗?* <20>?- <20>?<3F><><EFBFBD>箸艶嚗帋葩摨𦠜𥁒<F0A6A09C>𨳍<EFBFBD><F0A8B38D><EFBFBD>桀恣<E6A180><EFBFBD><E4B993>RF<52>詨笆
- <20>?<3F>烾◇摨譍<E691A8><E8AD8D><EFBFBD>`ID<EFBFBD>?<3F>?<3F><><EFBFBD><EFBFBD><EFBFBD> <20>?<3F><>𧒄<EFBFBD><EFBFBD><E6B8A1>𡢟
- <20>?靽脲<E99DBD><E884B2><EFBFBD>Record ID憿箏<E686BF>
- <20>?<3F>園𡢿<E59C92><EFBFBD><E5ADB5><EFBFBD>憪钅◇摨𤩺<E691A8><F0A4A9BA>?
**蝷箔<E89DB7>**嚗?```
颲枏<EFBFBD><EFBFBD>捐銵剁<EFBFBD>嚗?Record_ID | FMA<4D><EFBFBD><E9A483><EFBFBD><EFBFBD>箇瑪 | FMA<4D><EFBFBD><E9A483><EFBFBD><EFBFBD>讛挪1 | ADL<44><EFBFBD>_<EFBFBD>箇瑪 | ADL<44><EFBFBD>_<EFBFBD>讛挪1
4 | 58 | 67 | 40 | 95
颲枏枂嚗<EFBFBD><EFBFBD><EFBFBD>嚗?Record_ID | <20><><EFBFBD><EFBFBD>? | <20>箇瑪 | <20>讛挪1
4 | FMA<4D><EFBFBD><E9A483>? | 58 | 67
4 | ADL<44><EFBFBD> | 40 | 95
```
#### 3. UX隡睃<E99AA1> <20>?
| <20><EFBFBD> | 霂湔<E99C82> | <20><EFBFBD>?|
|------|------|------|
| 頧祆揢<E7A586><EFBFBD><E5ADB5>㗇𥋘 | Radio蝏<6F>辣嚗䔶舅銝芷<E98A9D>厰★嚗<E29885><EFBFBD>箸艶霂湔<E99C82> | <20>?|
| <20><EFBFBD>?皜<><EFBFBD>厰僼 | 敹恍<E695B9><EFBFBD>㗇𥋘<E39787><F0A58B98><EFBFBD><EFBFBD><EFBFBD> | <20>?|
| 摰墧𧒄憸<F0A79284><E686B8> | <20>㗇𥋘<E39787><EFBFBD><E5A092>芸𢆡<E88AB8><F0A286A1><EFBFBD><EFBFBD><E686B8><EFBFBD><E59A97>10銵䕘<E98AB5> | <20>?|
| <20><EFBFBD>銵典<E98AB5> | <20>寞旿頧祆揢<E7A586><EFBFBD><E5ADB5><EFBFBD><E586BD>遬蝷箔<E89DB7><E7AE94>𣬚<EFBFBD>颲枏<E9A2B2>獢?| <20>?|
| <20><EFBFBD><E888AA><EFBFBD><EFBFBD><E89D8F><EFBFBD>?| Tag<61><67>倌撅閧內璉<E585A7>瘚见<E7989A><E8A781><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>園𡢿<E59C92>?| <20>?|
| 蝵桐縑摨行<E691A8>蝷?| 璉<>瘚讠蔭靽漲<1.0<EFBFBD>嗆遬蝷箄郎<EFBFBD>?| <20>?|
#### 4. <20><><EFBFBD>舀沲<E88880>?<3F>?
**4.1 Python撅<6E><E69285>`metric_time_transform.py`嚗?*
- <20>?`detect_metric_groups()` - <20>芸𢆡<E88AB8><F0A286A1><EFBFBD><EFBFBD>瘚页<E7989A>300銵䕘<E98AB5>
- <20>?`apply_multi_metric_to_long()` - <20><EFBFBD>1頧祆揢嚗?50銵䕘<E98AB5>
- <20>?`apply_multi_metric_to_matrix()` - <20><EFBFBD>2頧祆揢嚗?80銵䕘<E98AB5>
- <20>?<3F><EFBFBD><E7AE84><EFBFBD>嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD>憪苄ecord ID憿箏<E686BF>
**4.2 Python API嚗Ǒmain.py`嚗?*
- <20>?`POST /api/operations/multi-metric/detect` - 璉<>瘚𧢲<E7989A><F0A7A2B2><EFBFBD><EFBFBD>蝏?- <20>?`POST /api/operations/multi-metric/to-long` - <20><EFBFBD><E689AF><EFBFBD>1頧祆揢
- <20>?`POST /api/operations/multi-metric/to-matrix` - <20><EFBFBD><E689AF><EFBFBD>2頧祆揢
**4.3 Node.js Backend**
- <20>?`QuickActionService.ts` - 3銝芣鰵<E88AA3><EFBFBD>
- <20>?`QuickActionController.ts` - <20><EFBFBD>2銝芣鰵action
- <20>?頝舐眏瘜典<E7989C>嚗䫤/multi-metric/detect`
**4.4 Frontend嚗ǑMultiMetricPanel.tsx`嚗?*
- <20>?頧祆揢<E7A586><EFBFBD><E5ADB5>㗇𥋘嚗㇌adio蝏<6F>辣嚗?- <20>?<3F><EFBFBD>銵典<E98AB5><EFBFBD>𢆡<EFBFBD><F0A286A1>遬蝷綽<E89DB7>
- <20>?摰墧𧒄璉<F0A79284>瘚见<E7989A><EFBFBD><E686B8>
- <20>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC>?
#### 5. <20>喲睸<E596B2><E79DB8><EFBFBD><EFBFBD><E88890>?<3F>?
| <20><><EFBFBD><EFBFBD> | <20><EFBFBD> | 閫<><E996AB><EFBFBD><EFBFBD> |
|-------|------|---------|
| <20><EFBFBD><EFBFBD><E99C82> | "FMA<4D><EFBFBD><E9A483><EFBFBD>__<5F>箇瑪" 鋡恍<E98BA1>霂航<E99C82><E888AA>思蛹 "FMA" | <20><EFBFBD>靽格迤蝞埈<E89D9E>嚗𡁏<E59A97>撅訫<E69285><E8A8AB><EFBFBD><EFBFBD> |
| <20>烾◇摨?| Event_Name雿滨蔭<E6BBA8>𤩺㦤 | 撘箏<E69298><E7AE8F>烾◇摨𧶏<E691A8>ID <20>?Event_Name <20>?<3F><><EFBFBD> |
| Record ID憿箏<E686BF> | 頧祆揢<E7A586><EFBFBD>摮堒<E691AE>摨𤩺<E691A8>摨𧶏<E691A8>4,10,11,5,6嚗?| 瘛餃<E7989B>銝湔𧒄<E6B994>?`_original_order` 靽脲<E99DBD><E884B2><EFBFBD>憿箏<E686BF> |
| <20><><EFBFBD>蝚西<E89D9A><E8A5BF>?| 銝齿𣈲<E9BDBF><F0A388B2><EFBFBD><EFBFBD><EFBFBD><E6BBA2>垍瑪 `___` | 隡睃<E99AA1>蝥批<E89DA5>銵剁<E98AB5>`['___', '__', '_', '-', '.']` |
| <20>園𡢿<E59C92><EFBFBD><E5AF9E>?| `.lstrip()` <20>躰秤蝘駁膄摮㛖泵 | 雿輻鍂 `.startswith()` 蝎曄<E69B84><EFBFBD> |
#### 6. 瘚贝<E7989A><EFBFBD><E996AC> <20>?
| 瘚贝<E7989A><E8B49D>箸艶 | 瘚贝<E7989A><E8B49D>唳旿 | <20><EFBFBD>?|
|---------|---------|------|
| <20>𣗏D<F0A3978F><EFBFBD>憭𡁏<E686AD><F0A1818F>?| Record_ID: 4,5,6,10,11 | <20>?|
| 銝厰<E98A9D>銝见<E98A9D>蝥踹<E89DA5><E8B8B9>𠉛泵 | `FMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>__蝑偦<EFBFBD><EFBFBD><EFBFBD>箇瑪` | <20>?|
| <20>砍噡<E7A08D>園𡢿<E59C92>?| `<EFBFBD>讛挪(2<>?` | <20>?|
| 銝剜<E98A9D><E5899C><EFBFBD> | `FMA<EFBFBD><EFBFBD>` | <20>?|
| 蝛箏<E89D9B><EFBFBD><E6BE86>?| outer join靽萘<E99DBD><E89098><EFBFBD><EFBFBD>㗇𧒄<E39787><EFBFBD> | <20>?|
| <20><EFBFBD>憿箏<E686BF>靽脲<E99DBD> | 4<>?<3F>?<3F>?0<>?1 | <20>?|
#### 7. 隞<><E99A9E>蝏蠘恣 <20>?
| <20><>辣 | <20><EFBFBD><EFBFBD><E99A9E> | 霂湔<E99C82> |
|------|---------|------|
| `metric_time_transform.py` | ~600銵?| Python<6F><EFBFBD>蝞埈<E89D9E> |
| `main.py` | ~150銵?| 3銝服PI蝡舐<E89DA1> |
| `QuickActionService.ts` | ~100銵?| 3銝芣鰵<E88AA3><EFBFBD> |
| `QuickActionController.ts` | ~50銵?| Action<6F><EFBFBD> |
| `MultiMetricPanel.tsx` | ~530銵?| 摰峕㟲UI蝏<49>辣 |
| `TransformDialog.tsx` | ~30銵?| Tab<61><62><EFBFBD> |
| **<2A>餉恣** | **~1460銵?* | **摰峕㟲<E5B395><EFBFBD>摰䂿緵** |
---
### <20><> Day 7-8 NA憭<41><E686AD>隡睃<E99AA1> + Pivot<6F>烾◇摨譍<E691A8><E8AD8D><EFBFBD>2025-12-09~10嚗?
#### 1. NA嚗<41><EFBFBD><EFBFBD><EFBFBD><E686AD>隡睃<E99AA1> <20>?**4銝芸<E98A9D><E88AB8>賣𣈲<E8B3A3><F0A388B2><EFBFBD><EFBFBD><E6BE86>?*嚗?| <20><EFBFBD> | NA憭<41><E686AD><EFBFBD>厰★ | <20><EFBFBD>?|
|------|-----------|------|
| <20><EFBFBD><EFBFBD>撠?| 靽脲<E99DBD>NA / <20><EFBFBD>銝箸<E98A9D>摰𡁜<E691B0>?/ <20>𣳇膄銵?| <20>?|
| 擃条漣蝑偦<E89D91>?| 銝箇征 / 銝滢蛹蝛箸辺隞?| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗车
| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | 靽脲<E99DBD>銝箇征 / <20><>扇銝?蝻箏仃" / <20><><EFBFBD><EFBFBD><EFBFBD>摰𡁶<E691B0> | <20>?|
| <20>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>?| 銝箇征 / 銝滢蛹蝛箄<E89D9B>蝞㛖泵 | <20>?|
#### 2. Pivot<6F>烾◇摨譍<E691A8><E8AD8D>?<3F>?- <20>?靽萘<E99DBD><E89098><EFBFBD>㗇𥋘<E39787><F0A58B98><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E58CA7><EFBFBD>UI憭漤<E686AD><EFBFBD><E39787><EFBFBD>嚗?- <20>?<3F><EFBFBD><EFBFBD><E58CA7>𡁜<EFBFBD><F0A1819C><EFBFBD><EFBFBD><E59A97>蝚砌<E89D9A>銝芸<E98A9D>?<3F><EFBFBD><E7A2B6>?<3F><EFBFBD><E7A18B><EFBFBD>
- <20>?靽脲<E99DBD><E884B2><EFBFBD><E7AC94>烾◇摨𧶏<E691A8>頧祆揢<E7A586>𤾸<EFBFBD><F0A4BEB8><EFBFBD><E58CA7><EFBFBD>辣憿箏<E686BF><E7AE8F><EFBFBD>嚗?- <20>?<3F><EFBFBD><E8AE9B><EFBFBD><EFBFBD>擐𡝗活<F0A19D97>箇緵憿箏<E686BF><E7AE8F><EFBFBD>
#### 3. 霈∠<E99C88><E288A0>埈䲮獢㇂摰墧鴌 <20>?**閫<><E996AB><EFBFBD><EFBFBD>摮㛖泵<E39B96><EFBFBD><E5A092><EFBFBD>**嚗?- <20>?<3F>滨垢摰匧<E691B0><E58CA7><EFBFBD><E5A092><EFBFBD>嚗Ếol_0, col_1...嚗?- <20>?<3F>𡒊垢columnMapping摮睃<E691AE><E79D83><EFBFBD><E494B6>?- <20>?Python蝡臭蝙<E887AD>牢olumnMapping霈∠<E99C88>
- <20>?<3F><EFBFBD>銝剜<E98A9D><E5899C>砍噡<E7A08D><E599A1><EFBFBD>堒噡蝑厩鸌畾𠰴<E795BE>蝚血<E89D9A><E8A180>?
#### 4. UX隡睃<E99AA1> <20>?- <20>?<3F>堒仍tooltip嚗<70><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨀣遬蝷箏<E89DB7><E7AE8F><EFBFBD><E6B8B8><EFBFBD>
- <20>?50銵屸<E98AB5><EFBFBD><E996AB>蝷箏虾<E7AE8F>喲𡡒
- <20>?憿菟𢒰皛𡁜𢆡<F0A1819C><EFBFBD><E288A9><EFBFBD><E59094><EFBFBD><EFBFBD>皛𡁜𢆡嚗峕<E59A97><E5B395>湧△皛𡁜𢆡嚗?
---
### <20><> Day 8 UX<55>滚之<E6BB9A><EFBFBD>嚗?025-12-10<31><EFBFBD>嚗争<E59A97>
#### 1. <20><EFBFBD>雿㯄<E99BBF><E3AF84>券𢒰隡睃<E99AA1> <20>?**7憿寞瓲敹<E793B2>㺿餈?*嚗?| <20><EFBFBD> | <20><EFBFBD><E5AFA1><EFBFBD>捆 | <20><EFBFBD>?|
|------|---------|------|
| 憸<><E686B8><EFBFBD>鞟內 | <20>𣳇膄"銵冽聢隞<E881A2><E99A9E>蝷箏<E89DB7>50銵?<3F>鞟內<E99E9F>?| <20>?|
| 銵<><EFBFBD>?| 瘛餃<E7989B><E9A483><EFBFBD><EFBFBD><EFBFBD><EFBFBD>#<23>堒仍嚗𣬚<E59A97><F0A3AC9A><EFBFBD><E884B0><EFBFBD>撌虫儒<E899AB><EFBFBD>嚗?| <20>?|
| <20>堒仍蝑偦<E89D91>?| Excel憌擧聢蝑偦<E89D91><EFBFBD>Community<74><79>𧋦嚗䔶葉<E494B6><E89189>𧋦<EFBFBD><EFBFBD>嚗峕遬蝷箏<E89DB7>潸恣<E6BDB8><EFBFBD> | <20>?|
| <20><EFBFBD><E588B8>唳旿<E594B3>㰘蝸 | 銝滚<E98A9D><E6BB9A>𣂼<EFBFBD>50銵䕘<E98AB5>Session<6F>㰘蝸<E3B098><EFBFBD><E588B8>唳旿 | <20>?|
| <20><EFBFBD><E588B8>唳旿餈𥪜<E9A488> | <20><><EFBFBD>匧翰<E58CA7><E7BFB0><EFBFBD>雿𨅯<E99BBF><F0A885AF><EFBFBD><E8AE9B><EFBFBD>蝑偦<E89D91>?<3F><EFBFBD>/<2F><>拳/<2F>∩辣/<2F>賫A/霈∠<E99C88>/Pivot嚗?| <20>?|
| 皛𡁜𢆡<F0A1819C>∩耨憭?| 靽格㺿MainLayout銝箏𤐄摰𡁻<E691B0>摨佗<E691A8><E4BD97>港葵憿菟𢒰<E88F9F><EFBFBD><E4ADBE>冽辺 | <20>?|
| 霈∠<E99C88><E288A0>𦯀耨憭?| <20><EFBFBD>摮㛖泵<E39B96>芸𢆡頧祆揢 + 摰<><E691B0><EFBFBD><EFBFBD><E5A092>齿㦤<E9BDBF>?| <20>?|
#### 2. <20>堒仍蝑偦<E89D91><EFBFBD><E58CA7>?<3F>?- <20>?AG Grid Community<74><79>𧋦嚗ÒgTextColumnFilter / agNumberColumnFilter嚗?- <20>?銝剜<E98A9D><E5899C>砍𧑐<E7A08D><EFBFBD>"蝑偦<E89D91>?.."<22>?皜<>膄"<22>?摨𠉛鍂"蝑㚁<E89D91>
- <20>?<3F>曄內<E69B84><EFBFBD><E887AD><EFBFBD>霈⊥㺭嚗<E3BAAD>掩隡勰xcel嚗?- <20>?蝑偦<E89D91>匧笆霂脲<E99C82>蝢𤾸<E89DA2><EFBFBD><EFBFBD><EFBFBD><E884B0><EFBFBD><E88D94><EFBFBD><EFBFBD>嚗屸狍敶梧<E695B6>
- <20>?蝑偦<E89D91>匧抅鈭𤾸<E988AD><F0A4BEB8>𤩺㺭<F0A4A9BA><EFBFBD>蝎曄蝑偦<E89D91><EFBFBD>
#### 3. 皛𡁜𢆡<F0A1819C><EFBFBD><E288A0><EFBFBD>耨憭?<3F>?**<2A><EFBFBD><E6A185><EFBFBD>**嚗鐝ainLayout雿輻鍂 `min-h-screen`嚗<><E59A97>摰寡<E691B0><E5AFA1>箸𧒄鈭抒<E988AD>憿菟𢒰蝥扳<E89DA5><E689B3>冽辺
**閫<><E996AB><EFBFBD><EFBFBD>**嚗?- <20>?靽格㺿 `MainLayout.tsx`嚗䫤min-h-screen` <20>?`h-screen + overflow-hidden`
- <20>?銝文<E98A9D><E69687>賣溶<E8B3A3>?`overflow-hidden`嚗𡁻▲撅?+ <20><><EFBFBD>?- <20>?<3F><><EFBFBD>嚗𡁏㟲銝芣<E98A9D><EFBFBD>膥蝒堒藁<E5A092><EFBFBD><E4ADBE>冽辺嚗<E8BEBA><EFBFBD>𡅅G Grid<69><64><EFBFBD>皛𡁜𢆡
#### 4. <20><EFBFBD><E588B8>唳旿憭<E697BF><E686AD> <20>?**靽格㺿<E6A0BC><E3BABF>凒**嚗?- <20>?`SessionService.ts` - `getPreviewData()` 餈𥪜<E9A488><F0A5AA9C><EFBFBD><E588B8>唳旿
- <20>?`QuickActionController.ts` - 3憭<33><EFBFBD>?`slice(0, 50)`
- <20>?`AICodeService.ts` - 1憭<31><EFBFBD>?`slice(0, 50)`
- <20>?<3F>滨垢API瘜券<E7989C><E588B8>湔鰵 - `getPreviewData` 霂湔<E99C82>餈𥪜<E9A488><F0A5AA9C><EFBFBD>
**敶勗<E695B6><EFBFBD>摯**嚗?- <20>?<3F><><EFBFBD><EFBFBD>删鍂嚗𡁜虾<F0A1819C><EFBFBD>Node.js<6A><73><EFBFBD>摮睃<E691AE>頞喉<E9A09E>
- <20>?蝵𤑳<E89DB5>隡㰘<E99AA1>嚗𡁶裦憓痹<E68693><EFBFBD><EFBFBD>舀𦻖<E88880>𡑒<EFBFBD><F0A19192><EFBFBD>
- <20>?蝑偦<E89D91>厩移摨佗<E691A8>憭批<E686AD><E689B9>𣂼<EFBFBD><EFBFBD>抅鈭𤾸<E988AD><F0A4BEB8>𤩺㺭<F0A4A9BA><EFBFBD>
- <20>?<3F><EFBFBD>雿㯄<E99BBF>嚗𡁏遬<F0A1818F>𦯀<EFBFBD><F0A6AF80><EFBFBD><E59094>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD>"隞?0銵?嚗?
---
### <20><> Day 6 <20><EFBFBD><E8A098>厰僼撘<E583BC><E69298>𡢅<EFBFBD>2025-12-08嚗?
#### 1. 憸<><E686B8>Python<6F>賣㺭<E8B3A3><EFBFBD> <20>?**<2A>滚之<E6BB9A><EFBFBD><E59786>齿<EFBFBD>**嚗帋<E59A97><E5B88B><EFBFBD><E586BD><EFBFBD><E8AAA8><EFBFBD><EFBFBD>鞉㺿銝粹<E98A9D><E7B2B9>坔遆<E59D94>?- <20>?<3F>𥕦遣 `extraction_service/operations/` 璅<E79285>
- <20>?7銝芷<E98A9D><E88AB7>坔遆<E59D94><EFBFBD>隞塚<E99A9E>~1500銵䕘<E98AB5>
- <20>?摰峕㟲<E5B395><E39FB2><EFBFBD>𧢲釣閫<E987A3><E996AB><EFBFBD><EFBFBD>
- <20>?銝交聢<E4BAA4><E881A2><EFBFBD><EFBFBD><EFBFBD>霂?- <20>?<3F><EFBFBD>蝐餃<E89D90>頧祆揢嚗<E68FA2><E59A97>蝚虫葡<E899AB>埝㺭<E59F9D><EFBFBD>
#### 2. 7銝芣瓲敹<E793B2><E695B9><EFBFBD><EFBFBD>蝥?<3F>?| <20><EFBFBD> | Python<6F>賣㺭 | <20>滨垢Dialog | <20><EFBFBD>?|
|------|-----------|-----------|------|
| 擃条漣蝑偦<E89D91>?| filter.py | FilterDialog.tsx | <20>?+銝箇征/銝滢蛹蝛?|
| <20><EFBFBD><EFBFBD>撠?| recode.py | RecodeDialog.tsx | <20>?+NA憭<41><E686AD> |
| <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> | binning.py | BinningDialog.tsx | <20>?+NA憭<41><E686AD> |
| <20>∩辣<E288A9><E8BEA3><EFBFBD><EFBFBD>?| conditional.py | ConditionalDialog.tsx | <20>?+銝箇征/銝滢蛹蝛?|
| <20>𣳇膄蝻箏仃<E7AE8F>?| dropna.py | DropnaDialog.tsx | <20>?|
| 霈∠<E99C88><E288A0>?| compute.py | ComputeDialog.tsx | <20>?<3F><EFBFBD>B |
| Pivot頧祆揢 | pivot.py | PivotDialog.tsx | <20>?+靽萘<E99DBD><E89098><EFBFBD><EFBFBD>+<2B>烾◇摨?|
#### 3. <20><EFBFBD>靽桀<E99DBD>銝𦒘<E98A9D><F0A69298>?<3F>?- <20>?NaN摨誩<E691A8><E8AAA9><EFBFBD>霂荔<E99C82>蝏煺<E89D8F><EFBFBD><E686AD>嚗?- <20>?<3F>芸𢆡蝐餃<E89D90>頧祆揢嚗<E68FA2><E59A97>蝚虫葡<E899AB><EFBFBD><E595A3>埝㺭<E59F9D><EFBFBD>
- <20>?銝剛㘚<E5899B><E3989A><EFBFBD>堒噡<E5A092><EFBFBD>
- <20>?<3F><>拳颲寧<E9A2B2><E5AFA7>芸𢆡瘛餃<E7989B>
- <20>?<3F><EFBFBD><E5A092><EFBFBD>摮㛖泵憭<E6B3B5><E686AD><EFBFBD>䲮獢㇂嚗?- <20>?Ant Design霅血<E99C85>靽桀<E99DBD>
- <20>?<3F><>拳"nan"摮㛖泵銝脫遬蝷粹䔮憸䀝耨憭?
---
### <20><> Day 5 <20>滚之<E6BB9A>𣂼停嚗?025-12-07嚗?
#### 1. Ant Design X <20><><EFBFBD> <20>?- <20>?<3F><><EFBFBD>?Ant Design 6.0.1
- <20>?摰㕑<E691B0> @ant-design/x (2.1.0) - UI 蝏<>辣摨?- <20>?摰㕑<E691B0> @ant-design/x-sdk (2.1.0) - <20>唳旿瘚<E697BF><EFBFBD>?
#### 2. <20>滨垢<E6BBA8>𡁶鍂<F0A181B6><EFBFBD><EFBFBD>遣霈?<3F>?<3F>𥕦遣 `frontend-v2/src/shared/components/Chat/`嚗?- <20>?ChatContainer.tsx嚗?63銵䕘<E98AB5>- <20><EFBFBD>摰孵膥蝏<E886A5>
- <20>?MessageRenderer.tsx嚗?4銵䕘<E98AB5>- 瘨<><E798A8>皜脫<E79A9C><E884AB>?- <20>?CodeBlockRenderer.tsx嚗?1銵䕘<E98AB5>- 隞<><E99A9E><EFBFBD>埈葡<E59F88>枏膥
- <20>?types.ts嚗?51銵䕘<E98AB5>- 摰峕㟲蝐餃<E89D90>摰帋<E691B0>
- <20>?chat.css嚗?44銵䕘<E98AB5>- <20><EFBFBD><E79195><EFBFBD>
- <20>?README.md嚗?97銵䕘<E98AB5>- 雿輻鍂<E8BCBB><E98D82>
**<EFBFBD>餉恣**嚗鰺968銵䕘<E98AB5><E49598><EFBFBD><E887AC><EFBFBD> AIA<49><41>KB<4B><42>ool C 蝑㗇芋<E39787>?
#### 3. Tool C MVP 摰峕<E691B0> <20>?- <20>?<3F><>辣銝𠹺<E98A9D> <20>?<3F>曄內<E69B84>唳旿銵冽聢
- <20>?AI 撖寡<E69296> <20>?<3F><><EFBFBD><EFBFBD><E99A9E>
- <20>?<3F>见𢆡<E8A781><EFBFBD> <20>?<3F>湔鰵銵冽聢
- <20>?<3F><EFBFBD><EFBFBD><E89D9E>閖䔮蝑䈑<E89D91>銝滨<E98A9D><E6BBA8>𣂷誨<F0A382B7><E8AAA8><EFBFBD>
- <20>?UI 隡睃<E99AA1>嚗?銝芷䔮憸䀝耨憭㵪<E686AD>
- <20>?蝡臬<E89DA1>蝡舀<E89DA1>霂閖<E99C82><EFBFBD>
---
### Day 1: Python敺格<E695BA><E6A0BC><EFBFBD>撅?<3F>?
---
### 1. Python敺格<E695BA><E6A0BC><EFBFBD>撅?
#### <20><>辣蝏𤘪<E89D8F>
```
extraction_service/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> dc_executor.py # 427銵?<3F>?<3F><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> main.py # 617銵䕘<E98AB5><E49598><EFBFBD>2銝芰垢<E88AB0><EFBFBD><E5B08D>?<3F><EFBFBD><E98EBF><EFBFBD> test_module.py # 27銵䕘<E98AB5>瘚贝<E7989A><E8B49D>𡁏𧋦嚗争<E59A97>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> quick_test.py # 64銵䕘<E98AB5>敹恍<E695B9><E6818D><EFBFBD>霂𤏪<E99C82><F0A48FAA>?<3F><EFBFBD><E5A999><EFBFBD> test_execute_simple.py # 51銵䕘<E98AB5><EFBFBD><E89D9E><EFBFBD>霂𤏪<E99C82><F0A48FAA>?```
#### <20><EFBFBD><E8A9A8><EFBFBD>
**1.1 AST<53><EFBFBD><E8B9B1><EFBFBD><E8AAA8><EFBFBD><EFBFBD>?* <20>?- **璅<E79285>**: `dc_executor.py::validate_code()`
- **<2A><EFBFBD>**:
- 閫<><E996AB>Python隞<6E><E99A9E><EFBFBD><EFBFBD>𡂝鞊∟祗瘜閙<E7989C>嚗㇁ST嚗? - 璉<>瘚见暒<E8A781>拇芋<E68B87>堒紡<E5A092><EFBFBD>os, sys, subprocess蝑㚁<E89D91>
- 璉<>瘚见暒<E8A781>拙遆<E68B99><EFBFBD><E59597><EFBFBD>eval, exec, open蝑㚁<E89D91>
- 璉<>瘚𧢲糓<F0A7A2B2><EFBFBD>雿筂f<E7AD82><EFBFBD>
- **摰匧<E691B0>暺穃<E69ABA><E7A983>?*:
```python
DANGEROUS_MODULES = {
'os', 'sys', 'subprocess', 'shutil', 'glob',
'socket', 'urllib', 'requests', 'http',
'pickle', 'shelve', 'dbm',
'importlib', '__import__',
'eval', 'exec', 'compile',
'open', 'input', 'file',
}
DANGEROUS_BUILTINS = {
'eval', 'exec', 'compile', '__import__',
'open', 'input', 'file',
'getattr', 'setattr', 'delattr',
'globals', 'locals', 'vars',
}
```
**1.2 Pandas隞<73><E99A9E>瘝嗵拳<E597B5><EFBFBD>** <20>?- **璅<E79285>**: `dc_executor.py::execute_pandas_code()`
- **<2A><EFBFBD>**:
- <20>𥕦遣摰匧<E691B0><E58CA7><EFBFBD><EFBFBD>銵𣬚㴓憓<E3B493><E68693><EFBFBD>𣂼<EFBFBD><F0A382BC>舐鍂<E88890>賣㺭嚗? - <20><EFBFBD>Pandas<61>唳旿憭<E697BF><E686AD><EFBFBD><E99A9E>
- <20>閗繮print颲枏枂
- 30蝘坿<E89D98><E59DBF><EFBFBD><E597A1>? - 餈𥪜<E9A488><F0A5AA9C><EFBFBD>蝏𤘪<E89D8F><F0A498AA><EFBFBD><EFBFBD><EFBFBD>唳旿
- **摰匧<E691B0><E58CA7>芣鴌**:
- <20>𣂼<EFBFBD><F0A382BC>舐鍂<E88890><E98D82><EFBFBD>賣㺭嚗<E3BAAD><E59A97><EFBFBD><EFBFBD>捂摰匧<E691B0><E58CA7>賣㺭憒<E3BAAD>en, range蝑㚁<E89D91>
- 蝳<><EFBFBD><E8BFAB><EFBFBD><EFBFBD>
- 蝳<>迫蝵𤑳<E89DB5>霈輸䔮
- 蝳<>迫蝟餌<E89D9F><EFBFBD>
- 頞<>𧒄<EFBFBD>芸𢆡蝏<F0A286A1>迫嚗㇎nix蝟餌<E89D9F>嚗?
**1.3 FastAPI蝡舐<E89DA1>** <20>?- **蝡舐<E89DA1>1**: `POST /api/dc/validate`
- <20><EFBFBD>嚗帋誨<E5B88B><E8AAA8><EFBFBD><EFBFBD><EFBFBD>霂? - 霂瑟<E99C82>嚗䫤{"code": "..."}`
- <20><EFBFBD>嚗䫤{"valid": bool, "errors": [], "warnings": []}`
- **蝡舐<E89DA1>2**: `POST /api/dc/execute`
- <20><EFBFBD>嚗䥪andas隞<73><E99A9E><EFBFBD><EFBFBD>
- 霂瑟<E99C82>嚗䫤{"data": [...], "code": "..."}`
- <20><EFBFBD>嚗䫤{"success": bool, "result_data": [...], "output": "", ...}`
#### 瘚贝<E7989A>撉諹<E69289>蝏𤘪<E89D8F>
<EFBFBD>?**瘚贝<E7989A>1嚗𡁏迤撣訾誨<E8A8BE><E8AAA8><EFBFBD>銵?*
```python
# 颲枏<E9A2B2>
data = [{"age": 25}, {"age": 65}, {"age": 45}]
code = "df['old'] = df['age'] > 60"
# 颲枏枂
{
"success": true,
"result_data": [
{"age": 25, "old": false},
{"age": 65, "old": true},
{"age": 45, "old": false}
],
"execution_time": 0.004,
"result_shape": [3, 2]
}
```
<EFBFBD>?**瘚贝<E7989A>2嚗𡁜暒<F0A1819C>拐誨<E68B90><E8AAA8><EFBFBD>?*
```python
# 颲枏<E9A2B2>
code = "import os"
# 颲枏枂
{
"valid": false,
"errors": ["<EFBFBD>麱 蝳<>迫撖澆<E69296><E6BE86>梢埯璅<E79285>: os (銵?1)"],
"warnings": ["<EFBFBD>𩤃<EFBFBD><><E99A9E>銝剜𧊋雿輻鍂 df <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘜閙<E7989C>雿𨀣㺭<F0A880A3>?]
}
```
<EFBFBD>?**瘚贝<E7989A>3嚗𡁜龫<F0A1819C>埈㺭<E59F88><EFBFBD>瘣?*
```python
# 颲枏<E9A2B2>
data = [
{"patient_id": "P001", "age": 25, "sbp": 120, "dbp": 80},
{"patient_id": "P002", "age": 65, "sbp": 150, "dbp": 95},
{"patient_id": "P003", "age": None, "sbp": 160, "dbp": 100}
]
code = """
import numpy as np
df['age'] = df['age'].apply(lambda x: np.nan if x is None or x > 120 else x)
df['hypertension'] = df.apply(
lambda row: '擃䁅<EFBFBD><EFBFBD>? if row['sbp'] >= 140 or row['dbp'] >= 90 else '<EFBFBD>',
axis=1
)
"""
# 颲枏枂
{
"success": true,
"result_data": [
{"patient_id": "P001", "age": 25, "sbp": 120, "dbp": 80, "hypertension": "<EFBFBD>"},
{"patient_id": "P002", "age": 65, "sbp": 150, "dbp": 95, "hypertension": "擃䁅<EFBFBD><EFBFBD>?},
{"patient_id": "P003", "age": null, "sbp": 160, "dbp": 100, "hypertension": "擃䁅<EFBFBD><EFBFBD>?}
],
"execution_time": 0.008
}
```
---
### Day 3: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚 <20>?
#### <20><>辣蝏𤘪<E89D8F><EFBFBD>鰵憓痹<E68693>
```
backend/src/modules/dc/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts # 177銵?<3F>?Day 1
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts # 383銵?<3F>?Day 2
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> DataProcessService.ts # 303銵?<3F>?Day 2
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> AICodeService.ts # 550銵?<3F>?Day 3 <20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> controllers/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> TestController.ts # 131銵?<3F>?Day 1
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> SessionController.ts # 300銵?<3F>?Day 2
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> AIController.ts # 257銵?<3F>?Day 3 <20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> routes/
<20><EFBFBD><E5A999><EFBFBD> index.ts # 85銵?<3F>?Day 3 <20>湔鰵
```
#### <20><EFBFBD><E8A9A8><EFBFBD>
**3.1 AICodeService** <20>?- **<EFBFBD><EFBFBD>**: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A9A8>滚𦛚
- **<2A><EFBFBD>**:
```typescript
class AICodeService {
generateCode(sessionId, userMessage): Promise<GenerateCodeResult>
executeCode(sessionId, code, messageId): Promise<ExecuteCodeResult>
generateAndExecute(sessionId, userMessage, maxRetries): Promise<ProcessResult>
getHistory(sessionId, limit): Promise<Message[]>
}
```
- **<2A><EFBFBD>?*:
- <20>?憭滨鍂LLMFactory嚗<79><E59A97>𡁶鍂<F0A181B6><EFBFBD><EFBFBD><E69285>
- <20>?10銝東ew-shot蝷箔<E89DB7>嚗𡿨evel 1-4嚗? - <20>?<3F><EFBFBD>靽格迤<E6A0BC><EFBFBD><EFBFBD><E59A97>憭?甈⊿<E79488>霂𤏪<E99C82>
- <20>?撖寡<E69296><E5AFA1><EFBFBD>蟮蝞∠<E89D9E><EFBFBD><E59A97>餈?頧殷<E9A0A7>
- <20>?隞燑ession<6F><EFBFBD><E79195><EFBFBD><E7AC94>唳旿<E594B3><EFBFBD>
- <20>?霂衣<E99C82>System Prompt嚗<74><EFBFBD><EFBFBD>霂湔<E99C82>嚗?
**3.2 AIController** <20>?- **<2A><EFBFBD>**: AI<41><EFBFBD>API蝡舐<E89DA1>
- **蝡舐<E89DA1>**:
- `POST /ai/generate` - <20><><EFBFBD><EFBFBD><E99A9E><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗争<E59A97>
- `POST /ai/execute` - <20><EFBFBD><EFBFBD><E99A9E> <20>? - `POST /ai/process` - <20><><EFBFBD>撟嗆<E6929F>銵䕘<E98AB5><EFBFBD>甇亙<E79487>雿㵪<E99BBF><E3B5AA>? - `GET /ai/history/:sessionId` - <20><EFBFBD>撖寡<E69296><E5AFA1><EFBFBD><20>?
**3.3 <20>唳旿摨栞”** <20>?- **銵典<E98AB5>**: `dc_schema.dc_tool_c_ai_history`
- **摮埈挾**: 14銝迎<E98A9D>id, session_id, user_id, role, content, generated_code, code_explanation, execute_status, execute_result, execute_error, retry_count, model, created_at嚗?- **蝝<E89D9D>**: 3銝迎<E98A9D>銝駁睸 + session_id + user_id嚗?- **餈<><EFBFBD>𡁏𧋦**: `backend/scripts/create-tool-c-ai-history-table.mjs`
#### AI<41><EFBFBD>瘚贝<E7989A>蝏𤘪<E89D8F>嚗㇄ay 3嚗?
<EFBFBD>?**瘚贝<E7989A><E8B49D><EFBFBD><E69C9E>?*: 9/11 (81.8%) **颲曉<E9A2B2>MVP<56><50><EFBFBD>**
**<2A>𣂼<EFBFBD><F0A382BC>箸艶嚗?銝迎<E98A9D>嚗?*
1. <20>?蝏煺<E89D8F>蝻箏仃<E7AE8F><EFBFBD>霈?2. <20>?<3F><><EFBFBD><EFBFBD>蝻𣇉<E89DBB>
3. <20>?餈䂿賒<E482BF><EFBFBD><E3979B><EFBFBD>
4. <20>?BMI霈∠<E99C88>
5. <20>?<3F>∩辣蝑偦<E89D91>?6. <20>?蝻箏仃<E7AE8F>銵?7. <20>?蝏蠘恣瘙<E681A3><E79899>?8. <20>?憭齿<E686AD><E9BDBF><EFBFBD>
9. <20>?撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><EFBFBD>
**敺<><E695BA><EFBFBD>硋㦤<E7A18B><EFBFBD>2銝迎<E98A9D>撌脰扇敶閙<E695B6><E99699><EFBFBD>箏𦛚TD-C-006嚗㚁<E59A97>**
1. <20>?<3F><EFBFBD><EFBFBD><EFBFBD><E79A9C><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>蝚虫葡憭<E891A1><E686AD>嚗?2. <20>?<3F><EFBFBD><E7AE84><EFBFBD><EFBFBD>𠯫<EFBFBD>蠘圾<E8A098>?<3F><EFBFBD>嚗?
**<2A>喲睸靽桀<E99DBD>嚗?*
- <20>?NaN摨誩<E691A8><E8AAA9>㚚䔮憸矋<E686B8>Python蝡航蓮None嚗?- <20>?<3F>唳旿隡𣳇<E99AA1>㘾䔮憸矋<E686B8>隞燑ession<6F><EFBFBD><E79195><EFBFBD><E7AC94>唳旿嚗?- <20>?System Prompt隡睃<E99AA1><EFBFBD><E59A97>蝖桀<E89D96><E6A180>亦㴓憓<E3B493><EFBFBD><EFBFBD>
- <20>?Few-shot蝷箔<E89DB7><EFBFBD>㟲嚗<E39FB2><EFBFBD>夕mport霂剖蘂嚗?
---
### Day 4: <20>滨垢<E6BBA8><EFBFBD><EFBFBD><20>?
#### <20><>辣蝏𤘪<E89D8F><EFBFBD>鰵憓痹<E68693>
```
frontend-v2/src/modules/dc/pages/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> index.tsx # 258銵?<3F>?銝餃<E98A9D><E9A483>?<3F><EFBFBD><E98EBF><EFBFBD> components/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> Header.tsx # 91銵?<3F>?憿園<E686BF><E59C92>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> Toolbar.tsx # 104銵?<3F>?撌亙<E6928C><E4BA99>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> DataGrid.tsx # 111銵?<3F>?AG Grid銵冽聢
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> Sidebar.tsx # 149銵?<3F>?<3F>喃儒<E59683>𧶏<EFBFBD><EFBFBD><E89D9E>𣇉<EFBFBD>嚗?<3F>? <20><EFBFBD><E5A999><EFBFBD> ag-grid-custom.css # 113銵?<3F>?<3F><EFBFBD>銋㗇甅撘?<3F><EFBFBD><E98EBF><EFBFBD> types/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 62銵?<3F>?蝐餃<E89D90>摰帋<E691B0>
api/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> toolC.ts # 218銵?<3F>?API撠<49><E692A0>嚗?銝芣䲮瘜𤏪<E7989C>
<EFBFBD>颱誨<EFBFBD><EFBFBD><EFBFBD>~1106銵?```
#### <20><EFBFBD><E8A9A8><EFBFBD>
**4.1 AG Grid<69><64><EFBFBD>** <20>?- **蝏<>辣**: DataGrid.tsx
- **<2A><>𧋦**: AG Grid Community 31.0.0
- **<2A><EFBFBD>**:
- <20>?Excel憌擧聢銵冽聢皜脫<E79A9C>
- <20>?<3F><EFBFBD>摨譌<E691A8><E8AD8C><EFBFBD>皛扎<E79A9B><E6898E><EFBFBD><EFBFBD>游捐摨? - <20>?蝻箏仃<E7AE8F><EFBFBD>鈭格遬蝷綽<E89DB7>𠧧嚗? - <20>?<3F><EFBFBD>澆𢰧撖寥<E69296>
- <20>?<3F>煾帕蝥寡<E89DA5><E5AFA1>? - <20>?蝛箇𠶖<E7AE87><F0A0B696><EFBFBD>蝷? - <20><EFBFBD> <20><EFBFBD><E8A8AB><EFBFBD>颲𡢅<E9A2B2>Day 6嚗?
**4.2 憿菟𢒰撣<F0A292B0><E692A3>** <20>?- **銝餃<E98A9D><E9A483>?*: index.tsx
- **撣<><E692A3>**: 撌血𢰧<E8A180><F0A2B0A7><EFBFBD>嚗Êlex撣<78><E692A3>嚗? - 撌虫儒嚗関oolbar + DataGrid嚗Êlex-1嚗? - <20>喃儒嚗锭idebar嚗<72>𤐄摰?20px摰賢漲嚗?- **<2A><EFBFBD>?*:
- <20>?<3F><EFBFBD>撘誯<E69298>摨佗<E691A8>h-screen嚗? - <20>?皞枂皛𡁜𢆡<F0A1819C><EFBFBD>
- <20>?Emerald蝏輯𠧧銝駁<E98A9D>
**4.3 API撠<49><E692A0>** <20>?- **<2A><>辣**: api/toolC.ts
- **<2A><EFBFBD><E5AF9E>?*: 8銝? ```typescript
// Session蝞∠<E89D9E>
uploadFile(file)
getSession(sessionId)
getPreviewData(sessionId)
updateHeartbeat(sessionId)
// AI<41><EFBFBD>
generateCode(sessionId, message)
executeCode(sessionId, code, messageId)
processMessage(sessionId, message) // 潃?<3F><EFBFBD>API
getChatHistory(sessionId, limit)
```
**4.4 頝舐眏<E88890><E79C8F><EFBFBD>** <20>?- **頝臬<E9A09D>**: `/data-cleaning/tool-c`
- **<2A><EFBFBD>?*: Portal撌脣鍳<E884A3><EFBFBD>status: 'ready'嚗?- **<2A><EFBFBD>頧?*: 雿輻鍂React.lazy()
- **瘚贝<E7989A>**: Portal<61><EFBFBD><E288A0><EFBFBD><E88890><EFBFBD><E9A489>?
#### Day 4摰峕<E691B0><E5B395><EFBFBD>?
<EFBFBD>?**<2A><EFBFBD><EFBFBD>沲100%摰峕<E691B0>**:
- <20>?Header嚗<72><E59A97><EFBFBD><EFBFBD><E5A2A7><EFBFBD><E69FB4><EFBFBD>隞嗅<E99A9E><E59785><EFBFBD><EFBFBD><EFBFBD>
- <20>?Toolbar嚗?銝芸翰<E88AB8><EFBFBD><E7919F><EFBFBD><E69FB4><EFBFBD><E89D9D>嚗?- <20>?DataGrid嚗㇁G Grid摰峕㟲<E5B395><E39FB2><EFBFBD>嚗?- <20>?Sidebar嚗<72><EFBFBD><EFBFBD><E597A5>穿<EFBFBD><EFBFBD>ay 5摰<35><E691B0>嚗?- <20>?API撠<49><E692A0>嚗?銝芣䲮瘜𤏪<E7989C>
- <20>?頝舐眏<E88890>滨蔭嚗㇊ortal <20>?Tool C嚗?
<EFBFBD><EFBFBD> **敺<>ay 5摰峕<E691B0>**:
- <20><EFBFBD> MessageItem蝏<6D>辣嚗<E8BEA3><E59A97><EFBFBD>舀葡<E88880><EFBFBD>
- <20><EFBFBD> CodeBlock蝏<6B>辣嚗<E8BEA3><EFBFBD><E8AAA8><EFBFBD>鈭殷<E988AD>
- <20><EFBFBD> InputArea蝏<61>辣嚗<E8BEA3><E59A97><EFBFBD><EFBFBD>嚗?- <20><EFBFBD> InsightsPanel蝏<6C>辣嚗<E8BEA3><EFBFBD><EFBFBD><EFBFBD><E69296>
- <20><EFBFBD> <20><>辣銝𠹺<E98A9D>摰峕㟲瘚<E39FB2><E7989A>
- <20><EFBFBD> AI撖寡<E69296>摰峕㟲鈭支<E988AD>
- <20><EFBFBD> 蝡臬<E89DA1>蝡舀<E89DA1>霂?
---
### Day 2: Session蝞∠<E89D9E> + <20>唳旿憭<E697BF><E686AD> <20>?
#### <20><>辣蝏𤘪<E89D8F><EFBFBD>鰵憓痹<E68693>
```
backend/src/modules/dc/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts # 177銵?<3F>?Day 1
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts # 383銵?<3F>?Day 2 <20><EFBFBD>
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> DataProcessService.ts # 303銵?<3F>?Day 2 <20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> controllers/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> TestController.ts # 131銵?<3F>?Day 1
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> SessionController.ts # 300銵?<3F>?Day 2 <20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> routes/
<20><EFBFBD><E5A999><EFBFBD> index.ts # 62銵?<3F>?Day 2 <20>湔鰵
```
#### <20><EFBFBD><E8A9A8><EFBFBD>
**2.1 SessionService** <20>?- **<2A><EFBFBD>**: Session<6F>笔𦶢<E7AC94><EFBFBD>蝞∠<E89D9E>
- **<2A><EFBFBD>**:
```typescript
class SessionService {
createSession(userId, fileName, buffer): Promise<SessionData>
getSession(sessionId): Promise<SessionData>
getPreviewData(sessionId): Promise<PreviewDataResponse>
getFullData(sessionId): Promise<any[]>
deleteSession(sessionId): Promise<void>
updateHeartbeat(sessionId): Promise<Date>
cleanExpiredSessions(): Promise<number>
}
```
- **<2A><EFBFBD>?*:
- <20>?<3F>嗉氜<E59789><EFBFBD>Excel<65><6C><EFBFBD><EFBFBD><E996AB>嚗𣬚凒<F0A3AC9A><EFBFBD>隡𤪻SS
- <20>?10<31><30><EFBFBD><EFBFBD><E9A488><EFBFBD><EFBFBD>
- <20>?敹<>歲撱園鵭<E59C92><EFBFBD>
- <20>?<3F>芸𢆡皜<F0A286A1><E79A9C><EFBFBD><E9A488>Session
- <20>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC>?
**2.2 DataProcessService** <20>?- **<2A><EFBFBD>**: Excel<65><6C>辣閫<E8BEA3><E996AB><EFBFBD><EFBFBD>霂?- **<2A><EFBFBD>**:
```typescript
class DataProcessService {
parseExcel(buffer): ParsedExcelData
validateFile(buffer, fileName): ValidationResult
inferColumnTypes(data): ColumnType[]
formatFileSize(bytes): string
}
```
- **<2A><EFBFBD>?*:
- <20>?<3F><><EFBFBD><EFBFBD><E996AB><EFBFBD><EFBFBD><EFBFBD>嚗? - <20>?10MB<4D><42>辣憭批<E686AD><E689B9>𣂼<EFBFBD>
- <20>?<3F><EFBFBD>.xlsx, .xls, .csv
- <20>?<3F>㛖掩<E39B96>𧢲綫<F0A7A2B2><EFBFBD><E593A8><EFBFBD><EFBFBD>
**2.3 SessionController** <20>?- **<2A><EFBFBD>**: Session蝞∠<E89D9E>API蝡舐<E89DA1>
- **蝡舐<E89DA1>**:
- `POST /sessions/upload` - 銝𠹺<E98A9D>Excel<65>𥕦遣Session <20>? - `GET /sessions/:id` - <20><EFBFBD>Session靽⊥<E99DBD> <20>? - `GET /sessions/:id/preview` - <20><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿嚗<E697BF><E59A97>100銵䕘<E98AB5><E49598>? - `GET /sessions/:id/full` - <20><EFBFBD>摰峕㟲<E5B395>唳旿 <20>? - `DELETE /sessions/:id` - <20>𣳇膄Session <20>? - `POST /sessions/:id/heartbeat` - <20>湔鰵敹<E9B0B5><20>?
**2.4 <20>唳旿摨栞”** <20>?- **銵典<E98AB5>**: `dc_schema.dc_tool_c_sessions`
- **摮埈挾**: 12銝迎<E98A9D>id, user_id, file_name, file_key, total_rows, total_cols, columns, encoding, file_size, created_at, updated_at, expires_at嚗?- **蝝<E89D9D>**: 3銝迎<E98A9D>銝駁睸 + user_id + expires_at嚗?- **餈<><EFBFBD>𡁏𧋦**: `backend/scripts/create-tool-c-table.mjs`
#### API瘚贝<E7989A>蝏𤘪<E89D8F>嚗㇄ay 2嚗?
<EFBFBD>?**瘚贝<E7989A><E8B49D>唳旿**:
```
<EFBFBD><EFBFBD><EFBFBD>? test-medical-data.xlsx
<EFBFBD>唳旿: 8銵?x 7<>堒龫<E5A092>埈㺭<E59F88>?<3F><EFBFBD>: patient_id, name, age, gender, diagnosis, sbp, dbp
<EFBFBD><EFBFBD>辣憭批<EFBFBD>: 17.42 KB
```
<EFBFBD>?**瘚贝<E7989A>蝏𤘪<E89D8F>**:
| 瘚贝<E7989A>憿?| <20><EFBFBD>?| 霂湔<E99C82> |
|--------|------|------|
| 銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD>𥕦遣Session | <20>?| 餈𥪜<E9A488>201嚗玺ession<6F>𥕦遣<F0A595A6>𣂼<EFBFBD> |
| <20><EFBFBD>Session靽⊥<E99DBD> | <20>?| <20><><EFBFBD>格迤蝖株<E89D96><E6A0AA>?|
| <20><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿嚗<E697BF><E59A97>100銵䕘<E98AB5>| <20>?| 8銵峕㺭<E5B395><EFBFBD><E6A180><EFBFBD><E588BB>?|
| <20><EFBFBD>摰峕㟲<E5B395>唳旿 | <20>?| 隞窻SS霂餃<E99C82><E9A483>𣂼<EFBFBD> |
| <20>湔鰵敹<E9B0B5>歲 | <20>?| 餈<><E9A488><EFBFBD>園𡢿撱園鵭10<31><30><EFBFBD> |
| <20>𣳇膄Session | <20>?| OSS+DB皜<42><E79A9C><EFBFBD>𣂼<EFBFBD> |
| 撉諹<E69289><E8ABB9>𣳇膄 | <20>?| 餈𥪜<E9A488>404蝖株恕<E6A0AA>𣳇膄 |
| **<2A>餉恣** | **7/7 (100%)** | **<2A><><EFBFBD><EFBFBD>霂閖<E99C82><EFBFBD>** |
<EFBFBD>?**鈭穃<E988AD><E7A983><EFBFBD><E8A098><EFBFBD><EFBFBD><EFBFBD>?*:
- <20>?雿輻鍂 `storage` <20>滚𦛚嚗<F0A69B9A><EFBFBD><EFBFBD>嚗?- <20>?雿輻鍂 `logger` <20>滚𦛚嚗<F0A69B9A><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?- <20>?雿輻鍂 `prisma` <20><EFBFBD>摰硺<E691B0>
- <20>?Excel<65><6C><EFBFBD><EFBFBD><E996AB>嚗峕<E59A97><E5B395>砍𧑐<E7A08D><F0A79190>辣摮睃<E691AE>
- <20>?<3F>蝻𣇉<E89DBB><F0A38789>滨蔭
---
### 2. Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>嚗㇄ay 1嚗?
#### <20><>辣蝏𤘪<E89D8F>
```
backend/src/modules/dc/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> PythonExecutorService.ts # 177銵?<3F>?<3F><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> controllers/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> TestController.ts # 131銵?<3F>?<3F><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> routes/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 29銵?<3F>?<3F><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> README.md # 172銵䕘<E98AB5><E49598><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E78DA2><EFBFBD>?```
#### <20><EFBFBD><E8A9A8>滚𦛚
**2.1 PythonExecutorService** <20>?- **<2A><EFBFBD>**: 撠<><E692A0>Python敺格<E695BA><E6A0BC>TTP靚<50>
- **<2A><EFBFBD>**:
```typescript
class PythonExecutorService {
validateCode(code: string): Promise<ValidateCodeResponse>
executeCode(data: any[], code: string): Promise<ExecuteCodeResponse>
healthCheck(): Promise<boolean>
}
```
- **<2A><EFBFBD>?*:
- 摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6BBA9><EFBFBD>
- 30蝘坿<E89D98><E59DBF>嗆綉<E59786>? - 餈墧𦻖<E5A2A7><EFBFBD><E59786><EFBFBD>瘚? - 霂衣<E99C82><E8A1A3><EFBFBD>𠯫敹𡑒扇敶?
**2.2 TestController** <20>?- **<2A><EFBFBD>**: Day 1瘚贝<E7989A>蝡舐<E89DA1><E88890><EFBFBD><E689B9>?- **蝡舐<E89DA1>**:
- `GET /test/health` - 瘚贝<E7989A>Python<6F>滚𦛚<E6BB9A>亙熒
- `POST /test/validate` - 瘚贝<E7989A><EFBFBD><E99A9E>撉諹<E69289>
- `POST /test/execute` - 瘚贝<E7989A><EFBFBD><E99A9E><EFBFBD><EFBFBD>
**2.3 頝舐眏瘜典<E7989C>** <20>?- **<2A><EFBFBD>**: `/api/v1/dc/tool-c`
- **<2A><EFBFBD>?*: 撌脣銁 `dc/index.ts` 銝剜釣<E5899C>?- **<2A>航挪<E888AA>?*: <20>?<3F>滚𦛚<E6BB9A>臬𢆡<E887AC>𤾸朖<F0A4BEB8><EFBFBD><E888AA>?
---
## <20><EFBFBD><><E695BA><EFBFBD><EFBFBD><E7A983><EFBFBD>Day 2-15嚗?
### Week 1: <20><EFBFBD><E7AE87><EFBFBD>嚗㇄ay 2-5嚗?
#### Day 2: <20>唳旿摨?+ Session蝞∠<E89D9E> <20>?
**<2A>唳旿摨廍chema**嚗<><EFBFBD>𥕦遣嚗?
```prisma
// dc_tool_c_sessions 銵?<3F>?model DcToolCSession {
id String @id @default(uuid())
userId String
fileName String
fileKey String // OSS摮睃<E691AE>key
totalRows Int
totalCols Int
columns Json // <20><EFBFBD><E5A092><EFBFBD>
encoding String? // 蝻𣇉<E89DBB><F0A38789><EFBFBD>
fileSize Int
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
expiresAt DateTime // 餈<><E9A488><EFBFBD>園𡢿
@@index([userId])
@@index([expiresAt])
@@map("dc_tool_c_sessions")
@@schema("dc_schema")
}
```
**撌脣<E6928C><E884A3><EFBFBD><E99E89>?*:
- [x] `SessionService.ts` - Session蝞∠<E89D9E>嚗?83銵䕘<E98AB5><E49598>? - [x] `createSession()` - <20>𥕦遣隡朞<E99AA1><EFBFBD><E59A97>隡𪊲xcel<65>記SS嚗? - [x] `getSession()` - <20><EFBFBD>隡朞<E99AA1><E69C9E><EFBFBD><EFBFBD>? - [x] `getPreviewData()` - <20><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿嚗<E697BF><E59A97>100銵䕘<E98AB5>
- [x] `getFullData()` - <20><EFBFBD>摰峕㟲<E5B395>唳旿嚗<E697BF><E59A97>OSS嚗? - [x] `deleteSession()` - <20>𣳇膄隡朞<E99AA1>嚗㇉SS+DB嚗? - [x] `updateHeartbeat()` - <20>湔鰵敹<E9B0B5>歲嚗<E6ADB2><EFBFBD>?0<><30><EFBFBD>嚗? - [x] `cleanExpiredSessions()` - 皜<><E79A9C><EFBFBD><E9A488>Session
- [x] `DataProcessService.ts` - <20>唳旿憭<E697BF><E686AD>嚗?03銵䕘<E98AB5><E49598>? - [x] Excel<65><6C>辣閫<E8BEA3><E996AB>嚗ūlsx摨橒<E691A8><E6A992><EFBFBD><EFBFBD><EFBFBD><E996AB>嚗? - [x] <20><>辣撉諹<E69289><EFBFBD>之撠譌<E692A0><E8AD8C>聢撘譌<E69298><E8AD8C><EFBFBD>摰對<E691B0>
- [x] <20>㛖掩<E39B96>𧢲綫<F0A7A2B2><EFBFBD><E593A8><EFBFBD><EFBFBD>
- [x] <20><>辣憭批<E686AD><E689B9>𣂼<EFBFBD>嚗?0MB嚗?- [x] `SessionController.ts` - Session<6F><EFBFBD><E689B9><EFBFBD>300銵䕘<E98AB5><E49598>? - [x] 6銝服PI蝡舐<E89DA1><E88890><EFBFBD>摰䂿緵
#### Day 3: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚 <20><EFBFBD>
**敺<><E695BA><EFBFBD><EFBFBD><E78390>?*:
- [ ] `AICodeService.ts` - AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD>
- [ ] <20><><EFBFBD>LLMFactory
- [ ] System Prompt霈曇恣嚗<E681A3>鉄10銝東ew-shot蝷箔<E89DB7>嚗? - [ ] 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>諹䌊<E8ABB9>睲耨甇? - [ ] 銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD><E681A3><EFBFBD>Session<6F><6E><EFBFBD><EFBFBD>
**System Prompt閬<74><E996AC>**:
```typescript
const systemPrompt = `
雿䭾糓銝<EFBFBD>銝芸龫<EFBFBD><EFBFBD><EFBFBD>娍㺭<EFBFBD><EFBFBD>瘣𦯀<EFBFBD>摰塚<EFBFBD>韐蠘提<EFBFBD><EFBFBD><EFBFBD>Pandas隞<EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <20><><EFBFBD><EFBFBD>${fileName}
- 銵峕㺭嚗?{totalRows}
- <20>埈㺭嚗?{totalCols}
- <20><EFBFBD>嚗?{columns.join(', ')}
摰匧<EFBFBD><EFBFBD><EFBFBD>嚗?1. <20><EFBFBD><E88ABE><EFBFBD>df<64><EFBFBD>
2.<>迫撖澆<E69296>os<6F><73>ys蝑匧暒<E58CA7>拇芋<E68B87>?3. 蝳<>迫雿輻鍂eval<61><6C>xec蝑匧暒<E58CA7>拙遆<E68B99>?4. 敹<>◆餈𥡝<E9A488><EFBFBD>虜憭<E8999C><E686AD>
Few-shot蝷箔<E89DB7>嚗?[蝷箔<E89DB7>1] <20><><EFBFBD><E68987>僑蝏?<3F><EFBFBD>: <20>𠰴僑樴<E58391>之鈭?0<><30><EFBFBD>霈唬蛹<E594AC><E89BB9>僑蝏?隞<><E99A9E>: df['age_group'] = df['age'].apply(lambda x: '<27><>僑' if x > 60 else '<27><EFBFBD><E599BC>僑')
...
`;
```
#### Day 3-5: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>峕綉<E5B395>嗅膥 <20><EFBFBD>
**敺<><E695BA><EFBFBD>烐綉<E78390>嗅膥**:
- [ ] `AIController.ts`
- [ ] POST `/ai/chat` - AI撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><EFBFBD><E99A9E>
- [ ] POST `/ai/execute` - <20><EFBFBD>AI<41><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? - [ ] GET `/ai/history/:sessionId` - <20><EFBFBD>撖寡<E69296><E5AFA1><EFBFBD>
**敺<><E695BA><EFBFBD><EFBFBD><E78390>?*:
- [ ] `AICodeService.ts` - AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD>
- [ ] <20><><EFBFBD>LLMFactory
- [ ] System Prompt霈曇恣嚗?0銝東ew-shot嚗? - [ ] 銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD>? - [ ] <20><EFBFBD>靽格迤<E6A0BC><EFBFBD>
### Week 2: <20>滨垢撘<E59EA2><E69298>𡢅<EFBFBD>Day 6-10嚗?
**敺<><E695BA><EFBFBD>𤑳<EFBFBD>隞?*:
- [ ] `ToolCEditor.tsx` - 銝餌<E98A9D>颲穃膥憿菟𢒰
- [ ] `DataGrid.tsx` - AG Grid<69>唳旿銵冽聢
- [ ] `AICopilot.tsx` - AI<41><EFBFBD>靘扯器<E689AF>?- [ ] `FileUpload.tsx` - <20><>辣銝𠹺<E98A9D><EFBFBD>
- [ ] `CodeBlock.tsx` - 隞<><E99A9E><EFBFBD>曄內蝏<E585A7>
- [ ] `ActionCard.tsx` - AI<41><EFBFBD><E6BBA2><EFBFBD>
### Week 3: 瘚贝<E7989A>隡睃<E99AA1>嚗㇄ay 11-15嚗?
**瘚贝<E7989A>隞餃𦛚**:
- [ ] 15銝芸龫<E88AB8>埈㺭<E59F88><EFBFBD>瘣堒㦤<E5A092><EFBFBD>霂?- [ ] <20><EFBFBD>瘚贝<E7989A>嚗?0MB<4D><42>辣嚗?- [ ] 撟嗅<E6929F>瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?- [ ] 摰匧<E691B0>瘚贝<E7989A><EFBFBD><EFBFBD><E8AAA8><EFBFBD>蝞梧<E89D9E>
- [ ] UI/UX瘚贝<E7989A>
---
## <20><>儭?<3F>唳旿摨梶𠶖<E6A2B6>?
### 敶枏<E695B6>銵函<E98AB5><E587BD>?
**dc_schema 銝剔<E98A9D>銵?*:
```sql
-- Tool B<><EFBFBD>銵剁<E98AB5>撌脣<E6928C><E884A3><EFBFBD>
dc_schema.dc_templates -- 憸<>挽璅⊥踎 <20>?dc_schema.dc_extraction_tasks -- <20>𣂼<EFBFBD>隞餃𦛚 <20>?dc_schema.dc_extraction_items -- <20>𣂼<EFBFBD>霈啣<E99C88> <20>?dc_schema.dc_health_checks -- <20>亙熒璉<E78692><E79289>?<3F>?
-- Tool C<><EFBFBD>銵?dc_schema.dc_tool_c_sessions -- <20>?撌脣<E6928C>撱綽<E692B1>Day 2嚗?dc_schema.dc_tool_c_ai_history -- <20>?撌脣<E6928C>撱綽<E692B1>Day 3嚗?```
**<2A>𥕦遣<F0A595A6><EFBFBD>**嚗<>歇摰峕<E691B0>嚗?
```bash
# Day 2 撌脫<E6928C>銵?cd backend
node scripts/create-tool-c-table.mjs # <20>?<3F>𣂼<EFBFBD>
npx prisma generate # <20>?<3F>𣂼<EFBFBD>
```
**銵函<E98AB5><E587BD><EFBFBD><EFBFBD>?*:
```sql
-- dc_tool_c_sessions 銵剁<E98AB5>12摮埈挾嚗?蝝<E89D9D>嚗?CREATE TABLE dc_schema.dc_tool_c_sessions (
id UUID PRIMARY KEY,
user_id VARCHAR(255),
file_name VARCHAR(500),
file_key VARCHAR(500), -- OSS頝臬<E9A09D>
total_rows INTEGER,
total_cols INTEGER,
columns JSONB, -- ["age", "gender", ...]
encoding VARCHAR(50),
file_size INTEGER,
created_at TIMESTAMP,
updated_at TIMESTAMP,
expires_at TIMESTAMP -- 10<31><30><EFBFBD><EFBFBD><E9A488>
);
```
---
## <20><> API蝡舐<E89DA1><EFBFBD><E79A9C>
### Python敺格<E695BA><E6A0BC>?(http://localhost:8000)
| <20><EFBFBD> | 蝡舐<E89DA1> | <20><EFBFBD> | <20><EFBFBD>?| 霂湔<E99C82> |
|------|------|------|------|------|
| GET | `/api/health` | <20>亙熒璉<E78692><E79289>?| <20>?| 璉<><E79289><EFBFBD><E4BAA4>∠𠶖<E288A0>?|
| POST | `/api/dc/validate` | 隞<><E99A9E>撉諹<E69289> | <20>?| AST摰匧<E691B0><EFBFBD><E79289>?|
| POST | `/api/dc/execute` | 隞<><E99A9E><EFBFBD><EFBFBD> | <20>?| Pandas隞<73><E99A9E><EFBFBD><EFBFBD> |
### Node.js<6A>𡒊垢 (http://localhost:3000)
#### 瘚贝<E7989A>蝡舐<E89DA1>嚗㇄ay 1嚗?| <20><EFBFBD> | 蝡舐<E89DA1> | <20><EFBFBD> | <20><EFBFBD>?| 霂湔<E99C82> |
|------|------|------|------|------|
| GET | `/api/v1/dc/tool-c/test/health` | 瘚贝<E7989A>Python<6F>滚𦛚 | <20>?| Day 1瘚贝<E7989A><E8B49D>?|
| POST | `/api/v1/dc/tool-c/test/validate` | 瘚贝<E7989A><EFBFBD><E99A9E>撉諹<E69289> | <20>?| Day 1瘚贝<E7989A><E8B49D>?|
| POST | `/api/v1/dc/tool-c/test/execute` | 瘚贝<E7989A><EFBFBD><E99A9E><EFBFBD><EFBFBD> | <20>?| Day 1瘚贝<E7989A><E8B49D>?|
#### Session蝞∠<E89D9E>蝡舐<E89DA1>嚗㇄ay 2 撌脣<E6928C><E884A3><EFBFBD><E7909C>?| <20><EFBFBD> | 蝡舐<E89DA1> | <20><EFBFBD> | <20><EFBFBD>?| 瘚贝<E7989A> |
|------|------|------|------|------|
| POST | `/api/v1/dc/tool-c/sessions/upload` | 銝𠹺<E98A9D>Excel | <20>?| 201 <20>𣂼<EFBFBD> |
| GET | `/api/v1/dc/tool-c/sessions/:id` | <20><EFBFBD>Session | <20>?| 200 <20>𣂼<EFBFBD> |
| GET | `/api/v1/dc/tool-c/sessions/:id/preview` | <20><EFBFBD><EFBFBD><E686B8><EFBFBD>唳旿 | <20>?| 200 <20>𣂼<EFBFBD> |
| GET | `/api/v1/dc/tool-c/sessions/:id/full` | <20><EFBFBD>摰峕㟲<E5B395>唳旿 | <20>?| 200 <20>𣂼<EFBFBD> |
| DELETE | `/api/v1/dc/tool-c/sessions/:id` | <20>𣳇膄Session | <20>?| 200 <20>𣂼<EFBFBD> |
| POST | `/api/v1/dc/tool-c/sessions/:id/heartbeat` | 敹<><EFBFBD>湔鰵 | <20>?| 200 <20>𣂼<EFBFBD> |
#### AI<41><EFBFBD>蝡舐<E89DA1>嚗㇄ay 3撌脣<E6928C><E884A3><EFBFBD><E7909C>?| <20><EFBFBD> | 蝡舐<E89DA1> | <20><EFBFBD> | <20><EFBFBD>?| 瘚贝<E7989A> |
|------|------|------|------|------|
| POST | `/api/v1/dc/tool-c/ai/generate` | <20><><EFBFBD><EFBFBD><E99A9E> | <20>?| <20>?<3F><EFBFBD> |
| POST | `/api/v1/dc/tool-c/ai/execute` | <20><EFBFBD><EFBFBD><E99A9E> | <20>?| <20>?<3F><EFBFBD> |
| POST | `/api/v1/dc/tool-c/ai/process` | <20><><EFBFBD>撟嗆<E6929F>銵?| <20>?| <20>?81.8%<25><EFBFBD> |
| GET | `/api/v1/dc/tool-c/ai/history/:sessionId` | <20><EFBFBD><E79195><EFBFBD>蟮 | <20>?| <20>?<3F><EFBFBD> |
---
## <20><EFBFBD> <20><EFBFBD><E887AC>滨蔭
### 敹<><E695B9><EFBFBD><EFBFBD><E887AC><EFBFBD>
<EFBFBD>?`backend/.env` 銝剝<E98A9D>蝵殷<E89DB5>
```bash
# Python敺格<E695BA><E6A0BC>𧑐<E288AA><F0A79190><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?EXTRACTION_SERVICE_URL=http://localhost:8000
# OSS摮睃<E691AE>嚗㇄ay 2雿輻鍂嚗?OSS_REGION=your-region
OSS_BUCKET=your-bucket
OSS_ACCESS_KEY_ID=your-key-id
OSS_ACCESS_KEY_SECRET=your-secret
# LLM<4C>滨蔭嚗㇄ay 3雿輻鍂嚗?LLM_PROVIDER=openai
LLM_API_KEY=your-api-key
LLM_MODEL=gpt-4
```
### <20>滚𦛚<E6BB9A>臬𢆡憿箏<E686BF>
1. **<2A>臬𢆡Python敺格<E695BA><E6A0BC>?* (敹<><E695B9>)
```bash
cd extraction_service
.\venv\Scripts\activate
python main.py
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:8000
```
2. **<2A>臬𢆡Node.js<6A>𡒊垢** (敹<><E695B9>)
```bash
cd backend
npm run dev
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:3000
```
3. **<2A>臬𢆡<E887AC>滨垢** (Day 6<>?
```bash
cd frontend-v2
npm run dev
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:5173
```
---
## <20><><><E99A9E>蝏𤘪<E89D8F>
### Python敺格<E695BA><E6A0BC>?```
extraction_service/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> dc_executor.py # DC隞<43><E99A9E><EFBFBD><EFBFBD><E79285> <20>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> pdf_extractor.py # PDF<44>𣂼<EFBFBD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> docx_extractor.py # Docx<63>𣂼<EFBFBD>
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> txt_extractor.py # Txt<78>𣂼<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> main.py # FastAPI銝餅<E98A9D>隞?<3F>?<3F><EFBFBD><E98EBF><EFBFBD> requirements.txt # Python靘肽<E99D98>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> venv/ # <20>𡁏<EFBFBD><F0A1818F><EFBFBD>
```
### Node.js<6A>𡒊垢
```
backend/src/modules/dc/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> services/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts # Python靚<6E><EFBFBD>滚𦛚 <20>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts # Session蝞∠<E89D9E> <20><EFBFBD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> AICodeService.ts # AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> DataProcessService.ts # <20>唳旿憭<E697BF><E686AD> <20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> controllers/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> TestController.ts # 瘚贝<E7989A><E8B49D><EFBFBD><E689B9>?<3F>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> SessionController.ts # Session<6F><EFBFBD><E689B9>?<3F><EFBFBD>
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> AIController.ts # AI<41><EFBFBD><E689B9>?<3F><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> routes/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 頝舐眏摰帋<E691B0> <20>?<3F><EFBFBD><E5A999><EFBFBD> utils/
<20><EFBFBD><E5A999><EFBFBD> (敺<><EFBFBD>?
```
### <20>滨垢
```
frontend-v2/src/modules/dc/pages/tool-c/
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> index.tsx # 258銵?<3F>?Day 4嚗<34><EFBFBD>亙藁+<2B><EFBFBD><E59786><EFBFBD><E681A3><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> components/
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> Header.tsx # 91銵?<3F>?Day 4嚗<34><EFBFBD><EFBFBD>嚗?<3F>? <20><EFBFBD><E98EBF><EFBFBD> Toolbar.tsx # 104銵?<3F>?Day 4嚗?銝芸翰<E88AB8><EFBFBD><E7919F><EFBFBD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> DataGrid.tsx # 111銵?<3F>?Day 4嚗㇁G Grid銵冽聢嚗?<3F>? <20><EFBFBD><E98EBF><EFBFBD> Sidebar.tsx # 149銵?<3F>?Day 4嚗<34><EFBFBD><EFBFBD>嚗?<3F>? <20><EFBFBD><E98EBF><EFBFBD> ag-grid-custom.css # 113銵?<3F>?Day 4嚗𠄌merald銝駁<E98A9D>嚗?<3F>? <20><EFBFBD><E98EBF><EFBFBD> MessageItem.tsx # <20><EFBFBD> Day 5嚗<35><E59A97><EFBFBD>舀葡<E88880><EFBFBD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> CodeBlock.tsx # <20><EFBFBD> Day 5嚗<35><EFBFBD><E8AAA8><EFBFBD>鈭殷<E988AD>
<EFBFBD>? <20><EFBFBD><E98EBF><EFBFBD> InputArea.tsx # <20><EFBFBD> Day 5嚗<35><E59A97><EFBFBD><EFBFBD>嚗?<3F>? <20><EFBFBD><E5A999><EFBFBD> InsightsPanel.tsx # <20><EFBFBD> Day 5嚗<35><EFBFBD><EFBFBD><EFBFBD><E69296>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> hooks/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> useToolC.ts # <20><EFBFBD> Day 5嚗<35>瓲敹<E793B2>ook嚗<6B><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> types/
<EFBFBD>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 62銵?<3F>?Day 4嚗<34><EFBFBD><EFBFBD>銋㚁<E98A8B>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (API撠<49><E692A0><EFBFBD>?../../api/toolC.ts) # 218銵?<3F>?Day 4嚗?銝芣䲮瘜𤏪<E7989C>
<EFBFBD>?Day 4摰峕<E691B0>嚗鰺1106銵?<3F><EFBFBD> Day 5敺<35><E695BA><EFBFBD><EFBFBD>~400-600銵䕘<E98AB5>Chat蝏<74>辣嚗?```
---
## <20>妒 瘚贝<E7989A><EFBFBD><E79A9C>
### Day 1 瘚贝<E7989A><EFBFBD>歇摰峕<E691B0>嚗争<E59A97>
- [x] Python<6F>滚𦛚<E6BB9A>亙熒璉<E78692><E79289>?- [x] AST隞<54><E99A9E>撉諹<E69289><EFBFBD>迤撣訾誨<E8A8BE><E8AAA8><EFBFBD>
- [x] AST隞<54><E99A9E>撉諹<E69289><EFBFBD><EFBFBD>拐誨<E68B90><E8AAA8><EFBFBD><EFBFBD>
- [x] Pandas隞<73><E99A9E><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD>訫㦤<E8A8AB><EFBFBD>
- [x] Pandas隞<73><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>埈㺭<E59F88><EFBFBD>瘣梹<E798A3>
- [x] Node.js<6A>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>
- [x] HTTP<54>帋縑甇<E7B891>
### Day 2-15 瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗争虬儭?
#### <20><EFBFBD><E7AE87><EFBFBD>瘚贝<E7989A>
- [ ] Excel<65><6C>辣銝𠹺<E98A9D>嚗?10MB嚗?- [ ] <20><>辣蝻𣇉<E89DBB><EFBFBD>瘚?- [ ] Session<6F>𥕦遣<F0A595A6><E981A3><EFBFBD><EFBFBD>?- [ ] OSS摮睃<E691AE>霂餃<E99C82>
- [ ] 敹<><EFBFBD><EFBFBD>
#### AI<41><EFBFBD>瘚贝<E7989A>
- [ ] LLM隞<4D><E99A9E><EFBFBD><EFBFBD><EFBFBD>
- [ ] 隞<><E99A9E><EFBFBD><EFBFBD>靽格迤
- [ ] Few-shot<6F><74><EFBFBD>撉諹<E69289>
- [ ] 銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD><EFBFBD><E996AB>蝖格<E89D96>?
#### 15銝芸龫<E88AB8>埈㺭<E59F88><EFBFBD>瘣堒㦤<E5A092>?**<2A><EFBFBD><E7AE87>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>90%嚗?*:
- [ ] <20>箸艶1嚗𡁏<E59A97>霈啗<E99C88><E59597>僑蝏<E58391><E89D8F>age > 60嚗?- [ ] <20>箸艶2嚗𡁜<E59A97><F0A1819C>斤撩憭望<E686AD><E69C9B><EFBFBD>D<EFBFBD><44><EFBFBD>
- [ ] <20>箸艶3嚗𡁏<E59A97><EFBFBD>蝻𣇉<E89DBB><EFBFBD>琸1憟?嚗?- [ ] <20>箸艶4嚗朞恣蝞娋MI
- [ ] <20>箸艶5嚗𡁜<E59A97><F0A1819C>斤撩憭梁<E686AD>>50%<25><><EFBFBD>
**銝剔<E98A9D><E58994>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>80%嚗?*:
- [ ] <20>箸艶6嚗朞<E59A97><E69C9E><EFBFBD>蝐鳴<E89D90><EFBFBD>虜/擃䁅<E69383><E48185><EFBFBD>
- [ ] <20>箸艶7嚗朞恣蝞𦯀<E89D9E><F0A6AF80><EFBCB7>?- [ ] <20>箸艶8嚗𡁜<E59A97><F0A1819C><EFBFBD>憭齿<E686AD><E9BDBF><EFBFBD>D
- [ ] <20>箸艶9嚗𡁏<E59A97><F0A1818F><EFBFBD><EFBFBD>撣詨僑樴<E58391><E6A8B4><EFBFBD>>120嚗?- [ ] <20>箸艶10嚗𡁏<E59A97><F0A1818F><EFBFBD><E689B9><EFBFBD><EFBFBD>蝏蠘恣
**擃条漣<E69DA1>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>60%嚗?*:
- [ ] <20>箸艶11嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD><EFBFBD><E89D8F><EFBFBD>?- [ ] <20>箸艶12嚗𡁏𧒄<F0A1818F><EFBFBD><E6B8B8><EFBFBD><E5A092>?- [ ] <20>箸艶13嚗𡁜龫摮西<E691AE><E8A5BF><EFBFBD>霂?- [ ] <20>箸艶14嚗𡁜<E59A97><F0A1819C>𡑒<EFBFBD><F0A19192><EFBFBD><EFBFBD>瘣?- [ ] <20>箸艶15嚗𡁶撩憭勗<E686AD>潭惣<E6BDAD><E8B3A2>?
---
## <20><> 敹恍<E695B9><EFBFBD>憪?
### 撘<><E69298>𤏸<EFBFBD><F0A48FB8><EFBFBD><EFBFBD><E785BA>?
1. **<2A>臬𢆡Python敺格<E695BA><E6A0BC>?*
```bash
cd extraction_service
.\venv\Scripts\activate
python main.py
```
2. **瘚贝<E7989A>Python<6F>滚𦛚**
```bash
# PowerShell瘚贝<E7989A>
Invoke-WebRequest -Uri "http://localhost:8000/api/health"
```
3. **<2A>臬𢆡Node.js<6A>𡒊垢**
```bash
cd backend
npm install # 擐𡝗活餈鞱<E9A488>
npm run dev
```
4. **瘚贝<E7989A>Node.js<6A><73><EFBFBD>**
```bash
curl http://localhost:3000/api/v1/dc/tool-c/test/health
```
### API靚<49>鍂蝷箔<E89DB7>
**隞<><E99A9E>撉諹<E69289>**:
```bash
curl -X POST http://localhost:3000/api/v1/dc/tool-c/test/validate \
-H "Content-Type: application/json" \
-d '{"code":"df[\"age_group\"] = df[\"age\"] > 60"}'
```
**隞<><E99A9E><EFBFBD><EFBFBD>**:
```bash
curl -X POST http://localhost:3000/api/v1/dc/tool-c/test/execute \
-H "Content-Type: application/json" \
-d '{
"data": [{"age": 25}, {"age": 65}],
"code": "df[\"old\"] = df[\"age\"] > 60"
}'
```
---
## <20><><><E69298>𤏸扇敶?
| <20><EFBFBD> | <20>𣬚<EFBFBD>蝣?| 霂衣<E99C82>霈啣<E99C88> |
|------|--------|---------|
| 2025-12-06 | Day 1摰峕<E691B0> | [2025-12-06_撌亙<E6928C>C_Day1撘<31><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md](./06-撘<><E69298>𤏸扇敶?2025-12-06_撌亙<E6928C>C_Day1撘<31><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md) |
| 2025-12-06 | Day 2摰峕<E691B0> | [2025-12-06_撌亙<E6928C>C_Day2撘<32><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md](./06-撘<><E69298>𤏸扇敶?2025-12-06_撌亙<E6928C>C_Day2撘<32><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md) |
| 2025-12-07 | Day 3摰峕<E691B0> | [2025-12-06_撌亙<E6928C>C_Day3撘<33><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md](./06-撘<><E69298>𤏸扇敶?2025-12-06_撌亙<E6928C>C_Day3撘<33><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md) <20>?**<2A>𡒊垢MVP摰峕<E691B0>** |
| 2025-12-07 | Day 4摰峕<E691B0> | [2025-12-07_撌亙<E6928C>C_Day4<79>滨垢<E6BBA8><EFBFBD>摰峕<E691B0>.md](./06-撘<><E69298>𤏸扇敶?2025-12-07_撌亙<E6928C>C_Day4<79>滨垢<E6BBA8><EFBFBD>摰峕<E691B0>.md) <20>?**AG Grid<69><64><EFBFBD>** |
| 2025-12-07 | Day 5摰峕<E691B0> | [2025-12-07_Day5_Ant-Design-X<>齿<EFBFBD>摰峕<E691B0>.md](./06-撘<><E69298>𤏸扇敶?2025-12-07_Day5_Ant-Design-X<>齿<EFBFBD>摰峕<E691B0>.md) <20>?**Ant Design X<><58><EFBFBD>** |
| 2025-12-07 | UI隡睃<E99AA1> | [2025-12-07_摰峕㟲UI隡睃<E99AA1>銝𤾸<E98A9D><F0A4BEB8><EFBFBD>撘?md](./06-撘<><E69298>𤏸扇敶?2025-12-07_摰峕㟲UI隡睃<E99AA1>銝𤾸<E98A9D><F0A4BEB8><EFBFBD>撘?md) <20>?**7銝芷䔮憸䀝耨憭?* |
---
## <20>㴓 銝衤<E98A9D>甇亥<E79487><E4BAA5>?
### <20>?Week 1 撌脣<E6928C><E884A3><EFBFBD>Day 1-5嚗?- [x] 摰峕<E691B0>Python敺格<E695BA><E6A0BC><EFBFBD>撅?<3F>?- [x] 摰峕<E691B0>Session蝞∠<E89D9E><E288A0>峕㺭<E5B395><EFBFBD><E6A180>?<3F>?- [x] 摰峕<E691B0>AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚 <20>?- [x] 摰峕<E691B0><E5B395>𡒊垢<F0A1928A><E59EA2><EFBFBD>𡅅PI蝡舐<E89DA1> <20>?- [x] 摰峕<E691B0><E5B395>滨垢<E6BBA8><EFBFBD><EFBFBD><20>?- [x] 摰峕<E691B0>AI Chat<61><20>?- [x] <20><><EFBFBD> Ant Design X <20>?- [x] 撘<><E69298><EFBFBD>𡁶鍂 Chat 蝏<><20>?- [x] 蝡臬<E89DA1>蝡舀<E89DA1>蝔𧢲<E89D94>霂閖<E99C82><EFBFBD> <20>?
### <20>?Week 2 撌脣<E6928C><E884A3><EFBFBD>Day 6-8嚗?- [x] 7銝芸<E98A9D><E88AB8><EFBFBD><E8B3A3><EFBFBD><E6A180>?<3F>?- [x] NA憭<41><E686AD>隡睃<E99AA1>嚗?銝芸<E98A9D><E88AB8><EFBFBD><E8B89D>?- [x] Pivot<6F>烾◇摨譍<E691A8><E8AD8D>?<3F>?- [x] 霈∠<E99C88><E288A0>埈䲮獢㇂摰墧鴌 <20>?- [x] UX隡睃<E99AA1>嚗ōooltip<69><70><EFBFBD><EFBFBD>冽辺<E586BD><E8BEBA><EFBFBD><EFBFBD><E996AB>蝷綽<E89DB7><E7B6BD>?
### Week 3 霈<E99C88>嚗㇄ay 9-15嚗?1. [ ] 蝻箏仃<E7AE8F>銵亙<E98AB5><E4BA99><EFBFBD><E8B89D><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>?隡埈㺭/<2F><EFBFBD><E7AE8F><EFBFBD>
2. [ ] 憭𡁻<E686AD><F0A181BB>嚗㇈ICE嚗? 擃䀝<E69383><E4809D><EFBFBD>
3. [ ] <20><EFBFBD>隡睃<E99AA1><EFBFBD><EFBFBD>唳旿<E594B3><E697BF><EFBFBD>
4. [ ] <20>躰秤憭<E7A7A4><E686AD>憓𧼮撩
5. [ ] <20><EFBFBD><E586BD><EFBFBD><E8A781><EFBFBD>
---
## <20><> <20><EFBFBD><E8A9A8><EFBFBD>
- **<2A><><EFBFBD><E79899>獢?*: [PRD嚗関ool C - 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?(MVP V1.1).md](./01-<2D><><EFBFBD><E79899><EFBFBD>?PRD嚗関ool%20C%20-%20蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?20(MVP%20V1.1).md)
- **<2A><><EFBFBD>航挽霈?*: [<EFBFBD><EFBFBD><EFBFBD>航挽霈⊥<EFBFBD><EFBFBD><EFBFBD>撌亙<EFBFBD> C - 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?(V7 鈭𤑳垢瘝嗵拳<E597B5><EFBFBD><E783BE><EFBFBD>).md](./02-<2D><><EFBFBD>航挽霈?<3F><><EFBFBD>航挽霈⊥<E99C88><EFBFBD><E78DA2>撌亙<E6928C>%20C%20-%20蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?20(V7%20鈭𤑳垢瘝嗵拳<E597B5><EFBFBD><E783BE><EFBFBD>).md)
- **撘<><E69298>𤏸恣<F0A48FB8>?*: [撌亙<EFBFBD>C_MVP撘<EFBFBD><EFBFBD>𤏸恣<EFBFBD>𦚱V1.0.md](./04-撘<><E69298>𤏸恣<F0A48FB8>?撌亙<E6928C>C_MVP撘<50><E69298>𤏸恣<F0A48FB8>𦚱V1.0.md)
- **TODO皜<4F><E79A9C>**: [撌亙<EFBFBD>C_MVP撘<EFBFBD><EFBFBD>䰎TODO皜<EFBFBD><EFBFBD>.md](./04-撘<><E69298>𤏸恣<F0A48FB8>?撌亙<E6928C>C_MVP撘<50><E69298>䰎TODO皜<4F><E79A9C>.md)
- **UI<55><EFBFBD>**: [撌亙<EFBFBD>C_<EFBFBD><EFBFBD>霈曇恣V6.html](./03-UI霈曇恣/撌亙<E6928C>C_<43><EFBFBD>霈曇恣V6%20.html)
---
## <20><> 摰匧<E691B0>霂湔<E99C82>
### 隞<><E99A9E><EFBFBD><EFBFBD>摰匧<E691B0>
- <20>?AST<53><EFBFBD><E8B9B1><EFBFBD><EFBFBD>交㜃<E4BAA4>芸暒<E88AB8><EFBFBD>雿?- <20>?瘝嗵拳<E597B5><EFBFBD><E887AC>𣂼<EFBFBD><F0A382BC>舐鍂<E88890>賣㺭
- <20>?30蝘坿<E89D98><E59DBF><EFBFBD><E597A1>?- <20>?蝳<><EFBFBD><E8BFAB><EFBFBD>𣬚<EFBFBD>蝏𨀣<E89D8F>雿?- <20><EFBFBD><><E99F8F>雿輻鍂<E8BCBB>𣂼<EFBFBD><EFBFBD><E59A97>摰䂿緵嚗?
### <20>唳旿摰匧<E691B0>
- <20>?10MB<4D><42>辣憭批<E686AD><E689B9>𣂼<EFBFBD>
- <20><EFBFBD> OSS<53><EFBFBD>摮睃<E691AE><EFBFBD><E59A97>摰䂿緵嚗?- <20><EFBFBD> 10<31><30><EFBFBD>Session餈<6E><E9A488><EFBFBD><E59A97>摰䂿緵嚗?- <20><EFBFBD> <20><EFBFBD><E586BD>𠉛氖嚗<E6B096><E59A97>摰䂿緵嚗?
---
**撌脩䰻<E884A9><EFBFBD>**嚗?- <20><> MICE憭𡁻<E686AD><F0A181BB>DataFrame shape銝滚龪<E6BB9A>漤䔮憸矋<E686B8><EFBFBD>銁靚<E98A81><E99D9A>銝哨<E98A9D>
- 撱箄悅嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD>?蝘滨<E89D98><E6BBA8>銵交䲮瘜𤏪<E7989C><F0A48FAA><EFBFBD><EFBFBD>?銝凋<E98A9D><E5878B>?隡埈㺭/<2F><EFBFBD><E7AE8F>?<3F><EFBFBD>/<2F>𤾸<EFBFBD>嚗㚁<E59A97>MICE敺<45>耨憭滚<E686AD>雿輻鍂
**蝏湔擪<E6B994>?*: AI Assistant
**<EFBFBD>𠉛頂<EFBFBD><EFBFBD>**: 霂瑟䰻<E7919F>钅★<E99285>娜EADME
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*: 2025-12-10