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

44 KiB
Raw Blame History

撌亙<EFBFBD>C嚗㇍ool C嚗? 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?- 敶枏<E695B6><E69E8F><EFBFBD><E59786><EFBFBD><EFBFBD><E69298><EFBFBD><E78390>?

**<2A><><EFBFBD>擧凒<E693A7>?: 2025-12-22
敶枏<EFBFBD><EFBFBD><EFBFBD>𧋦: Day 5-10 MVP + <20><EFBFBD><E8A098>厰僼 + NA憭<41><E686AD> + Pivot隡睃<E99AA1> + UX<55>滚之<E6BB9A><EFBFBD> + 憭𡁏<E686AD><F0A1818F><EFBFBD><EFBFBD>?+ *<EFBFBD><EFBFBD><EFBFBD><EFBFBD>? + *<EFBFBD><EFBFBD>隡睃<EFBFBD><EFBFBD>?
**撘<><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>? | *<EFBFBD><EFBFBD>隡睃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>-99%嚗?


<EFBFBD><EFBFBD><E79285><E288AA><EFBFBD>餈𥕦漲

<EFBFBD> 餈𥕦漲 <EFBFBD><EFBFBD>銵峕㺭 <EFBFBD><EFBFBD>?
*Python敺格<EFBFBD><EFBFBD>? 100% ~1800銵? <EFBFBD>?Day 1摰峕<E691B0> + Day 6<><EFBFBD> + NA憭<41><E686AD>隡睃<E99AA1> + <20><EFBFBD><E588B8>唳旿憭<E697BF><E686AD>
Node.js<6A>𡒊垢 100% ~3500銵? <EFBFBD>?Day 2-3摰峕<E691B0>嚗㷉ay 5-8憓𧼮撩隡睃<E99AA1> + <20><EFBFBD>餈𥪜<E9A488>
<EFBFBD>滨垢<EFBFBD>屸𢒰 99% ~4000銵? <EFBFBD>?Day 4-8摰峕<E691B0>嚗𣬚<E59A97><F0A3AC9A>?銵<>噡/皛𡁜𢆡<F0A1819C>?<3F><EFBFBD><E588B8>唳旿<E594B3>㰘蝸
<EFBFBD>𡁶鍂 Chat 蝏<> 100% ~968銵? <EFBFBD>?Day 5摰峕<E691B0><EFBFBD><E59A97>憭扳<E686AD>撠梧<E692A0>
<EFBFBD><EFBFBD><EFBFBD>厰僼 100% ~2800銵? <EFBFBD>?Day 6摰峕<E691B0>7銝芸<E98A9D><E88AB8>?+ NA憭<41><E686AD> + Pivot隡睃<E99AA1>
<EFBFBD>唳旿摨廍chema 100% 2銵? <EFBFBD>?Day 2-3摰峕<E691B0>
*蝡臬<EFBFBD>蝡舀<EFBFBD>霂? 90% - <EFBFBD>?<3F><EFBFBD><E8A9A8><EFBFBD><E8A098><EFBFBD>瘚贝<E7989A><E8B49D><EFBFBD>
<EFBFBD><EFBFBD>餈𥕦漲 98% *~15000銵? <EFBFBD>?*MVP摰峕<EFBFBD> + 7銝芸<E98A9D><E88AB8><EFBFBD><E8B3A3>?+ NA憭<41><E686AD> + Pivot隡睃<E99AA1> + UX<55>滚之<E6BB9A><EFBFBD>嚗?

<EFBFBD>?撌脣<E6928C><E884A3>𣂼<EFBFBD><F0A382BC><EFBFBD>Day 1-10嚗?

<EFBFBD><EFBFBD> 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>

  • <EFBFBD>?<3F>𡒊垢<F0A1928A>峕郊閫<E9838A><E996AB>撖潸稲HTTP霂瑟<E99C82><E7919F><EFBFBD>
  • <EFBFBD>?getPreviewData/getFullData 瘥𤩺活<F0A4A9BA><EFBFBD><EFBFBD><E996AB><EFBFBD><E59A97>埈𧒄43蝘𡜐<E89D98>
  • <EFBFBD>?<3F><EFBFBD>雿㯄<E99BBF>撌殷<E6928C><E6AEB7>踵𧒄<E8B8B5><EFBFBD><EFBFBD><E695BA><EFBFBD><EFBFBD>摨血<E691A8>擐? <EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䥪ostgres-Only 撘<><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>撅? 摰䂿緵 <EFBFBD>埈𧒄 <EFBFBD><EFBFBD>
銝𠹺<EFBFBD><EFBFBD>亙藁 敹恍<EFBFBD><EFBFBD>隡𤪻SS + <20><EFBFBD><E588B8><EFBFBD><EFBFBD>?+ 蝡见朖餈𥪜<E9A488> 3蝘? <EFBFBD>?-94%嚗?7<>?蝘𡜐<E89D98>
Worker憭<EFBFBD><EFBFBD> pg-boss撘<73>郊閫<E9838A><E996AB> + 靽嘥<E99DBD>clean data 53蝘? <EFBFBD>𤾸蝱<EFBFBD><EFBFBD>
<EFBFBD>滨垢頧株砭 React Query<72><EFBFBD>頧株砭 + 餈𥕦漲<F0A595A6>? 摰墧𧒄<EFBFBD><EFBFBD> 雿㯄<EFBFBD>隡条<EFBFBD>
<EFBFBD>唳旿霂餃<EFBFBD> 隡睃<EFBFBD>霂餃<EFBFBD>clean data蝻枏<E89DBB> 0.5蝘? <EFBFBD>?-99%嚗?3<>?.5蝘𡜐<EFBFBD>

2. <20><><EFBFBD><EFBFBD><E887AC>?

2.1 Prisma Schema<6D>孵𢆡

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>

  • <EFBFBD>?SessionService.createSession嚗帋<E59A97>隡𤪻SS + <20><EFBFBD><E588B8><EFBFBD><EFBFBD><3蝘𡜐<E89D98>
  • <EFBFBD>?parseExcelWorker嚗𡁜<E59A97><F0A1819C>啗圾<E59597>?+ 靽嘥<E99DBD>clean data嚗?3蝘𡜐<E89D98>
  • <EFBFBD>?SessionController.getSessionStatus嚗𡁶𠶖<F0A181B6><F0A0B696>䰻霂PI嚗<49>蔭霂鍂嚗?- <20>?SessionService.getPreviewData嚗帋<E59A97><E5B88B><EFBFBD>粉clean data嚗?.5蝘𡜐<EFBFBD>
  • <EFBFBD>?SessionService.getFullData嚗帋<E59A97><E5B88B><EFBFBD>粉clean data嚗?.5蝘𡜐<EFBFBD>
  • <EFBFBD>?SessionService.saveProcessedData嚗𡁜<E59A97>甇交凒<E4BAA4>軏lean data

2.3 <20>滨垢React Query頧株砭

  • <EFBFBD>?useSessionStatus Hook嚗𡁏惣<F0A1818F>質蔭霂<E99C82><EFBD87>芸𢆡銝脰<E98A9D><E884B0><EFBFBD>俈撟嗅<E6929F>嚗?- <20>?餈𥕦漲<F0A595A6>I嚗𡁜<E59A97><F0A1819C>嗆遬蝷?-100%
  • <EFBFBD>?useEffect<63>穃𨯬嚗窃tatus='ready'<27>嗉䌊<E59789><EFBFBD>頧賣㺭<E8B3A3>? 2.4 <20><EFBFBD>隡睃<E99AA1>
  • <EFBFBD>?<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>
  • <EFBFBD>?clean data蝻枏<E89DBB>嚗阳orker靽嘥<E99DBD>嚗峕<E59A97><E5B395><EFBFBD>雿𨅯<E99BBF><F0A885AF>?

3. <20>喲睸<E596B2><E79DB8><EFBFBD><EFBFBD><E88890>?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
撟賜<EFBFBD><EFBFBD>? 16384<EFBFBD>𦯀葉<EFBFBD><EFBFBD>151<EFBFBD><EFBFBD><EFBFBD>? 颲寧<EFBFBD><EFBFBD>瘚讠<EFBFBD>瘜𤏪<EFBFBD><EFBFBD><EFBFBD><EFBFBD>喃儒蝛箏<EFBFBD>
撟賜<EFBFBD>銵? <EFBFBD><EFBFBD>瘙⊥<EFBFBD>撖潸稲<EFBFBD>𡁻<EFBFBD> <EFBFBD><EFBFBD>函征銵?
<EFBFBD><EFBFBD><EFBFBD>滨妍 asl:screening:batch 銝滚<E98A9D>瘜? <EFBFBD>嫣蛹 asl_screening_batch<EFBFBD><EFBFBD><EFBFBD>垍瑪嚗?
頧株砭憌擧𠂔 <EFBFBD>峕𧒄15+撟嗅<E6929F>霂瑟<E99C82> React Query<72>芸𢆡銝脰<E98A9D>
<EFBFBD><EFBFBD>霈∠<EFBFBD> 瘥𤩺活<EFBFBD><EFBFBD><EFBFBD>齿鰵閫<EFBFBD><EFBFBD>嚗?3蝘𡜐<E89D98> clean data蝻枏<E89DBB>憭滨鍂嚗?.5蝘𡜐<EFBFBD>
MemoryQueue 銝齿𣈲<EFBFBD><EFBFBD><EFBFBD>甇交<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> QUEUE_TYPE=pgboss

4. <20><EFBFBD><E689AF>𣂼<EFBFBD>撖寞<E69296>

**<2A>閙活<E99699><EFBFBD>**嚗? 銝𠹺<E98A9D>+憸<><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>**嚗?``` 銋见<E98A8B>嚗?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><>__`<60><>_`<60><>-`<60><>.`蝑㚁<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>**嚗?```
颲枏<E9A2B2><E69E8F><EFBFBD>嚗鎄MA<4D><EFBFBD><E9A483><EFBFBD>__蝑偦<E89D91><EFBFBD><E58CA7>箇瑪<E7AE87><E791AA>MA<4D><EFBFBD><E9A483><EFBFBD>__<5F>讛挪(2<>?<3F><>DL<44><EFBFBD>___<5F>箇瑪<E7AE87><E791AA>DL<44><EFBFBD>___<5F>讛挪(2<>?
<0A>芸𢆡璉<F0A286A1>瘚页<E7989A>
  <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>

  • <EFBFBD>?靽脲<E99DBD><E884B2><EFBFBD>Record ID憿箏<E686BF>
  • <EFBFBD>?<3F>芸𢆡憭<F0A286A1><E686AD>蝻箏仃<E7AE8F><EFBFBD>outer join嚗? **蝷箔<E89DB7>**嚗?``` 颲枏<E9A2B2><EFBFBD>捐銵剁<E98AB5>嚗?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<49>?<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>**嚗?```
颲枏<E9A2B2><EFBFBD>捐銵剁<E98AB5>嚗?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

颲枏枂嚗<E69E82><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>?

<EFBFBD><EFBFBD> 霂湔<EFBFBD> <EFBFBD><EFBFBD>?
頧祆揢<EFBFBD><EFBFBD><EFBFBD>㗇𥋘 Radio蝏<EFBFBD>辣嚗䔶舅銝芷<EFBFBD>厰★嚗<EFBFBD><EFBFBD>箸艶霂湔<EFBFBD> <EFBFBD>?
<EFBFBD><EFBFBD>?皜<><EFBFBD>厰僼 敹恍<EFBFBD><EFBFBD>㗇𥋘<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>?
摰墧𧒄憸<EFBFBD><EFBFBD> <EFBFBD>㗇𥋘<EFBFBD><EFBFBD><EFBFBD>芸𢆡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10銵䕘<EFBFBD> <EFBFBD>?
<EFBFBD><EFBFBD>銵典<EFBFBD> <EFBFBD>寞旿頧祆揢<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>遬蝷箔<EFBFBD><EFBFBD>𣬚<EFBFBD>颲枏<EFBFBD>獢? <EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? Tag<EFBFBD><EFBFBD>倌撅閧內璉<EFBFBD>瘚见<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>園𡢿<EFBFBD>? <EFBFBD>?
蝵桐縑摨行<EFBFBD>蝷? <EFBFBD>瘚讠蔭靽漲<1.0<EFBFBD>嗆遬蝷箄郎<EFBFBD>? <EFBFBD>?

4. <20><><EFBFBD>舀沲<E88880>?<3F>?

*4.1 Python撅<6E><E69285>metric_time_transform.py嚗?

  • <EFBFBD>?detect_metric_groups() - <20>芸𢆡<E88AB8><F0A286A1><EFBFBD><EFBFBD>瘚页<E7989A>300銵䕘<E98AB5>
  • <EFBFBD>?apply_multi_metric_to_long() - <20><EFBFBD>1頧祆揢嚗?50銵䕘<E98AB5>
  • <EFBFBD>?apply_multi_metric_to_matrix() - <20><EFBFBD>2頧祆揢嚗?80銵䕘<E98AB5>
  • <EFBFBD>?<3F><EFBFBD><E7AE84><EFBFBD>嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD>憪苄ecord ID憿箏<E686BF>

*4.2 Python API嚗Ǒmain.py`嚗?

  • <EFBFBD>?POST /api/operations/multi-metric/detect - 璉<>瘚𧢲<E7989A><F0A7A2B2><EFBFBD><EFBFBD>蝏?- <20>?POST /api/operations/multi-metric/to-long - <20><EFBFBD><E689AF><EFBFBD>1頧祆揢
  • <EFBFBD>?POST /api/operations/multi-metric/to-matrix - <20><EFBFBD><E689AF><EFBFBD>2頧祆揢

4.3 Node.js Backend

  • <EFBFBD>?QuickActionService.ts - 3銝芣鰵<E88AA3><EFBFBD>
  • <EFBFBD>?QuickActionController.ts - <20><EFBFBD>2銝芣鰵action
  • <EFBFBD>?頝舐眏瘜典<E7989C>嚗䫤/multi-metric/detect`

*4.4 Frontend嚗ǑMultiMetricPanel.tsx`嚗?

  • <EFBFBD>?頧祆揢<E7A586><EFBFBD><E5ADB5>㗇𥋘嚗㇌adio蝏<6F>辣嚗?- <20>?<3F><EFBFBD>銵典<E98AB5><EFBFBD>𢆡<EFBFBD><F0A286A1>遬蝷綽<E89DB7>
  • <EFBFBD>?摰墧𧒄璉<F0A79284>瘚见<E7989A><EFBFBD><E686B8>
  • <EFBFBD>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC>?

5. <20>喲睸<E596B2><E79DB8><EFBFBD><EFBFBD><E88890>?<3F>?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> "FMA<4D><EFBFBD><E9A483><EFBFBD>__<5F>箇瑪" 鋡恍<E98BA1>霂航<E99C82><E888AA>思蛹 "FMA" <EFBFBD><EFBFBD>靽格迤蝞埈<EFBFBD>嚗𡁏<EFBFBD>撅訫<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>烾◇摨? Event_Name雿滨蔭<EFBFBD>𤩺㦤 撘箏<EFBFBD><EFBFBD>烾◇摨𧶏<EFBFBD>ID <20>?Event_Name <20>?<3F><><EFBFBD>
Record ID憿箏<E686BF> 頧祆揢<EFBFBD><EFBFBD>摮堒<EFBFBD>摨𤩺<EFBFBD>摨𧶏<EFBFBD>4,10,11,5,6嚗? 瘛餃<EFBFBD>銝湔𧒄<EFBFBD>?_original_order 靽脲<E99DBD><E884B2><EFBFBD>憿箏<E686BF>
<EFBFBD><EFBFBD><EFBFBD>蝚西<EFBFBD><EFBFBD>? 銝齿𣈲<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>垍瑪 ___ 隡睃<EFBFBD>蝥批<EFBFBD>銵剁<EFBFBD>['___', '__', '_', '-', '.']
<EFBFBD>園𡢿<EFBFBD><EFBFBD><EFBFBD>? .lstrip() <20>躰秤蝘駁膄摮㛖泵 雿輻鍂 .startswith() 蝎曄<E69B84><EFBFBD>

6. 瘚贝<E7989A><EFBFBD><E996AC> <20>?

瘚贝<EFBFBD><EFBFBD>箸艶 瘚贝<EFBFBD><EFBFBD>唳旿 <EFBFBD><EFBFBD>?
<EFBFBD>𣗏D<EFBFBD><EFBFBD>憭𡁏<EFBFBD><EFBFBD>? Record_ID: 4,5,6,10,11 <EFBFBD>?
銝厰<EFBFBD>銝见<EFBFBD>蝥踹<EFBFBD><EFBFBD>𠉛泵 FMA<EFBFBD><EFBFBD><EFBFBD><EFBFBD>__蝑偦<EFBFBD><EFBFBD><EFBFBD>箇瑪 <EFBFBD>?
<EFBFBD>砍噡<EFBFBD>園𡢿<EFBFBD>? <EFBFBD>讛挪(2<>? <EFBFBD>?
銝剜<EFBFBD><EFBFBD><EFBFBD> FMA<EFBFBD><EFBFBD> <EFBFBD>?
蝛箏<EFBFBD><EFBFBD><EFBFBD>? outer join靽萘<E99DBD><E89098><EFBFBD><EFBFBD>㗇𧒄<E39787><EFBFBD> <EFBFBD>?
<EFBFBD><EFBFBD>憿箏<EFBFBD>靽脲<EFBFBD> 4<EFBFBD>?<3F>?<3F>?0<>?1 <EFBFBD>?

7. 隞<><E99A9E>蝏蠘恣 <20>?

<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 霂湔<EFBFBD>
metric_time_transform.py ~600銵? Python<EFBFBD><EFBFBD>蝞埈<EFBFBD>
main.py ~150銵? 3銝服PI蝡舐<EFBFBD>
QuickActionService.ts ~100銵? 3銝芣鰵<EFBFBD><EFBFBD>
QuickActionController.ts ~50銵? Action<EFBFBD><EFBFBD>
MultiMetricPanel.tsx ~530銵? 摰峕㟲UI蝏<EFBFBD>
TransformDialog.tsx ~30銵? Tab<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>餉恣 *~1460銵? 摰峕㟲<EFBFBD><EFBFBD>摰䂿緵

<EFBFBD><EFBFBD> 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>

  • <EFBFBD>?靽脲<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>

  • <EFBFBD>?<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>

  • <EFBFBD>?50銵屸<E98AB5><EFBFBD><E996AB>蝷箏虾<E7AE8F>喲𡡒
  • <EFBFBD>?憿菟𢒰皛𡁜𢆡<F0A1819C><EFBFBD><E288A9><EFBFBD><E59094><EFBFBD><EFBFBD>皛𡁜𢆡嚗峕<E59A97><E5B395>湧△皛𡁜𢆡嚗?

<EFBFBD><EFBFBD> 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>

  • <EFBFBD>?<3F>曄內<E69B84><EFBFBD><E887AD><EFBFBD>霈⊥㺭嚗<E3BAAD>掩隡勰xcel嚗?- <20>?蝑偦<E89D91>匧笆霂脲<E99C82>蝢𤾸<E89DA2><EFBFBD><EFBFBD><EFBFBD><E884B0><EFBFBD><E88D94><EFBFBD><EFBFBD>嚗屸狍敶梧<E695B6>
  • <EFBFBD>?蝑偦<E89D91>匧抅鈭𤾸<E988AD><F0A4BEB8>𤩺㺭<F0A4A9BA><EFBFBD>蝎曄蝑偦<E89D91><EFBFBD>

3. 皛𡁜𢆡<F0A1819C><EFBFBD><E288A0><EFBFBD>耨憭?<3F>?**<2A><EFBFBD><E6A185><EFBFBD>**嚗鐝ainLayout雿輻鍂 min-h-screen<EFBFBD><EFBFBD>摰寡<EFBFBD><EFBFBD>箸𧒄鈭抒<EFBFBD>憿菟𢒰蝥扳<EFBFBD><EFBFBD>冽辺

**閫<><E996AB><EFBFBD><EFBFBD>**嚗?- <20>?靽格㺿 MainLayout.tsx嚗䫤min-h-screen <20>?h-screen + overflow-hidden`

  • <EFBFBD>?銝文<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>?靽格㺿<EFBFBD><EFBFBD>嚗?- <20>?SessionService.ts - getPreviewData() 餈𥪜<E9A488><F0A5AA9C><EFBFBD><E588B8>唳旿

  • <EFBFBD>?QuickActionController.ts - 3憭<33><EFBFBD>?slice(0, 50)
  • <EFBFBD>?AICodeService.ts - 1憭<31><EFBFBD>?slice(0, 50)
  • <EFBFBD>?<3F>滨垢API瘜券<E7989C><E588B8>湔鰵 - getPreviewData 霂湔<E99C82>餈𥪜<E9A488><F0A5AA9C><EFBFBD>

敶勗<EFBFBD><EFBFBD>嚗?- <20>?<3F><><EFBFBD><EFBFBD>删鍂嚗𡁜虾<F0A1819C><EFBFBD>Node.js<6A><73><EFBFBD>摮睃<E691AE>頞喉<E9A09E>

  • <EFBFBD>?蝵𤑳<E89DB5>隡㰘<E99AA1>嚗𡁶裦憓痹<E68693><EFBFBD><EFBFBD>舀𦻖<E88880>𡑒<EFBFBD><F0A19192><EFBFBD>
  • <EFBFBD>?蝑偦<E89D91>厩移摨佗<E691A8>憭批<E686AD><E689B9>𣂼<EFBFBD><EFBFBD>抅鈭𤾸<E988AD><F0A4BEB8>𤩺㺭<F0A4A9BA><EFBFBD>
  • <EFBFBD>?<3F><EFBFBD>雿㯄<E99BBF>嚗𡁏遬<F0A1818F>𦯀<EFBFBD><F0A6AF80><EFBFBD><E59094>𣳇<EFBFBD><F0A3B387><EFBFBD><EFBFBD>"隞?0銵?嚗?

<EFBFBD><EFBFBD> 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>

  • <EFBFBD>?7銝芷<E98A9D><E88AB7>坔遆<E59D94><EFBFBD>隞塚<E99A9E>~1500銵䕘<E98AB5>
  • <EFBFBD>?摰峕㟲<E5B395><E39FB2><EFBFBD>𧢲釣閫<E987A3><E996AB><EFBFBD><EFBFBD>
  • <EFBFBD>?銝交聢<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>

  • <EFBFBD>?銝剛㘚<E5899B><E3989A><EFBFBD>堒噡<E5A092><EFBFBD>
  • <EFBFBD>?<3F><>拳颲寧<E9A2B2><E5AFA7>芸𢆡瘛餃<E7989B>
  • <EFBFBD>?<3F><EFBFBD><E5A092><EFBFBD>摮㛖泵憭<E6B3B5><E686AD><EFBFBD>䲮獢㇂嚗?- <20>?Ant Design霅血<E99C85>靽桀<E99DBD>
  • <EFBFBD>?<3F><>拳"nan"摮㛖泵銝脫遬蝷粹䔮憸䀝耨憭?

<EFBFBD><EFBFBD> Day 5 <20>滚之<E6BB9A>𣂼停嚗?025-12-07嚗?

1. Ant Design X <20><><EFBFBD> <20>?- <20>?<3F><><EFBFBD>?Ant Design 6.0.1

  • <EFBFBD>?摰㕑<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>

  • <EFBFBD>?MessageRenderer.tsx嚗?4銵䕘<E98AB5>- 瘨<><E798A8>皜脫<E79A9C><E884AB>?- <20>?CodeBlockRenderer.tsx嚗?1銵䕘<E98AB5>- 隞<><E99A9E><EFBFBD>埈葡<E59F88>枏膥
  • <EFBFBD>?types.ts嚗?51銵䕘<E98AB5>- 摰峕㟲蝐餃<E89D90>摰帋<E691B0>
  • <EFBFBD>?chat.css嚗?44銵䕘<E98AB5>- <20><EFBFBD><E79195><EFBFBD>
  • <EFBFBD>?README.md嚗?97銵䕘<E98AB5>- 雿輻鍂<E8BCBB><E98D82>

<EFBFBD>餉恣嚗鰺968銵䕘<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> AIA<49><41>KB<4B><42>ool C 蝑㗇芋<E39787>?

3. Tool C MVP 摰峕<E691B0> <20>?- <20>?<3F><>辣銝𠹺<E98A9D> <20>?<3F>曄內<E69B84>唳旿銵冽聢

  • <EFBFBD>?AI 撖寡<E69296> <20>?<3F><><EFBFBD><EFBFBD><E99A9E>
  • <EFBFBD>?<3F>见𢆡<E8A781><EFBFBD> <20>?<3F>湔鰵銵冽聢
  • <EFBFBD>?<3F><EFBFBD><EFBFBD><E89D9E>閖䔮蝑䈑<E89D91>銝滨<E98A9D><E6BBA8>𣂷誨<F0A382B7><E8AAA8><EFBFBD>
  • <EFBFBD>?UI 隡睃<E99AA1>嚗?銝芷䔮憸䀝耨憭㵪<E686AD>
  • <EFBFBD>?蝡臬<E89DA1>蝡舀<E89DA1>霂閖<E99C82><EFBFBD>

Day 1: Python敺格<E695BA><E6A0BC><EFBFBD>撅?<3F>?


1. Python敺格<E695BA><E6A0BC><EFBFBD>撅?

<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>

extraction_service/
<0A><EFBFBD><E98EBF><EFBFBD> services/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> dc_executor.py              # 427銵?<3F>?<3F><EFBFBD>
<0A><EFBFBD><E98EBF><EFBFBD> main.py                          # 617銵䕘<E98AB5><E49598><EFBFBD>2銝芰垢<E88AB0><EFBFBD><E5B08D>?<3F><EFBFBD><E98EBF><EFBFBD> test_module.py                   # 27銵䕘<E98AB5>瘚贝<E7989A><E8B49D>𡁏𧋦嚗争<E59A97>
<0A><EFBFBD><E98EBF><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>?- <EFBFBD>: dc_executor.py::execute_pandas_code()

  • <EFBFBD><EFBFBD>:

    • <EFBFBD>𥕦遣摰匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銵𣬚㴓憓<EFBFBD><EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>舐鍂<EFBFBD>賣㺭嚗? - <20><EFBFBD>Pandas<61>唳旿憭<E697BF><E686AD><EFBFBD><E99A9E>
    • <EFBFBD>閗繮print颲枏枂
    • 30蝘坿<EFBFBD><EFBFBD><EFBFBD><EFBFBD>? - 餈𥪜<E9A488><F0A5AA9C><EFBFBD>蝏𤘪<E89D8F><F0A498AA><EFBFBD><EFBFBD><EFBFBD>唳旿
  • 摰匧<EFBFBD><EFBFBD>芣鴌:

    • <EFBFBD>𣂼<EFBFBD><EFBFBD>舐鍂<EFBFBD><EFBFBD><EFBFBD>賣㺭嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>捂摰匧<EFBFBD><EFBFBD>賣㺭憒<EFBFBD>en, range蝑㚁<E89D91>
    • <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
    • <EFBFBD>迫蝵𤑳<EFBFBD>霈輸䔮
    • <EFBFBD>迫蝟餌<EFBFBD><EFBFBD>
    • <EFBFBD>𧒄<EFBFBD>芸𢆡蝏<EFBFBD>迫嚗㇎nix蝟餌<EFBFBD>嚗? 1.3 FastAPI蝡舐<E89DA1> <20>?- 蝡舐<EFBFBD>1: POST /api/dc/validate
    • <EFBFBD><EFBFBD>嚗帋誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂? - 霂瑟<E99C82>嚗䫤{"code": "..."}`
    • <EFBFBD><EFBFBD>嚗䫤{"valid": bool, "errors": [], "warnings": []}`
  • 蝡舐<EFBFBD>2: POST /api/dc/execute

    • <EFBFBD><EFBFBD>嚗䥪andas隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
    • 霂瑟<EFBFBD>嚗䫤{"data": [...], "code": "..."}`
    • <EFBFBD><EFBFBD>嚗䫤{"success": bool, "result_data": [...], "output": "", ...}`

瘚贝<EFBFBD>撉諹<EFBFBD>蝏𤘪<EFBFBD>

<EFBFBD>?*瘚贝<EFBFBD>1嚗𡁏迤撣訾誨<EFBFBD><EFBFBD><EFBFBD>銵?

# 颲枏<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>?*瘚贝<EFBFBD>2嚗𡁜暒<EFBFBD>拐誨<EFBFBD><EFBFBD><EFBFBD>?

# 颲枏<E9A2B2>
code = "import os"

# 颲枏枂
{
  "valid": false,
  "errors": ["<22>麱 蝳<>迫撖澆<E69296><E6BE86>梢埯璅<E79285>: os (銵?1)"],
  "warnings": ["<22>𩤃<EFBFBD><><E99A9E>銝剜𧊋雿輻鍂 df <20><EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘜閙<E7989C>雿𨀣㺭<F0A880A3>?]
}

<EFBFBD>?*瘚贝<EFBFBD>3嚗𡁜龫<EFBFBD>埈㺭<EFBFBD><EFBFBD>瘣?

# 颲枏<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: '擃䁅<E69383><E48185>? if row['sbp'] >= 140 or row['dbp'] >= 90 else '甇<>虜',
    axis=1
)
"""

# 颲枏枂
{
  "success": true,
  "result_data": [
    {"patient_id": "P001", "age": 25, "sbp": 120, "dbp": 80, "hypertension": "甇<>虜"},
    {"patient_id": "P002", "age": 65, "sbp": 150, "dbp": 95, "hypertension": "擃䁅<E69383><E48185>?},
    {"patient_id": "P003", "age": null, "sbp": 160, "dbp": 100, "hypertension": "擃䁅<E69383><E48185>?}
  ],
  "execution_time": 0.008
}

Day 3: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>滚𦛚 <20>?

<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD><EFBFBD>鰵憓痹<EFBFBD>

backend/src/modules/dc/tool-c/
<0A><EFBFBD><E98EBF><EFBFBD> services/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts    # 177銵?<3F>?Day 1
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts           # 383銵?<3F>?Day 2
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> DataProcessService.ts       # 303銵?<3F>?Day 2
<0A>?  <20><EFBFBD><E5A999><EFBFBD> AICodeService.ts            # 550銵?<3F>?Day 3 <20><EFBFBD>
<0A><EFBFBD><E98EBF><EFBFBD> controllers/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> TestController.ts           # 131銵?<3F>?Day 1
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> SessionController.ts        # 300銵?<3F>?Day 2
<0A>?  <20><EFBFBD><E5A999><EFBFBD> AIController.ts             # 257銵?<3F>?Day 3 <20><EFBFBD>
<0A><EFBFBD><E5A999><EFBFBD> routes/
    <20><EFBFBD><E5A999><EFBFBD> index.ts                    # 85銵?<3F>?Day 3 <20>湔鰵

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

3.1 AICodeService <20>?- <EFBFBD><EFBFBD>: AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E8A9A8>滚𦛚

  • <EFBFBD><EFBFBD>:
    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>?*:
    • <EFBFBD>?憭滨鍂LLMFactory嚗<79><E59A97>𡁶鍂<F0A181B6><EFBFBD><EFBFBD><E69285>
    • <EFBFBD>?10銝東ew-shot蝷箔<E89DB7>嚗𡿨evel 1-4嚗? - <20>?<3F><EFBFBD>靽格迤<E6A0BC><EFBFBD><EFBFBD><E59A97>憭?甈⊿<E79488>霂𤏪<E99C82>
    • <EFBFBD>?撖寡<E69296><E5AFA1><EFBFBD>蟮蝞∠<E89D9E><EFBFBD><E59A97>餈?頧殷<E9A0A7>
    • <EFBFBD>?隞燑ession<6F><EFBFBD><E79195><EFBFBD><E7AC94>唳旿<E594B3><EFBFBD>
    • <EFBFBD>?霂衣<E99C82>System Prompt嚗<74><EFBFBD><EFBFBD>霂湔<E99C82>嚗? 3.2 AIController <20>?- <EFBFBD><EFBFBD>: AI<41><EFBFBD>API蝡舐<E89DA1>
  • 蝡舐<EFBFBD>:
    • 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>?- 銵典<EFBFBD>: 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嚗?- <EFBFBD>: 3銝迎<E98A9D>銝駁睸 + session_id + user_id嚗?- <EFBFBD><EFBFBD>𡁏𧋦: backend/scripts/create-tool-c-ai-history-table.mjs

AI<EFBFBD><EFBFBD>瘚贝<EFBFBD>蝏𤘪<EFBFBD>嚗㇄ay 3嚗?

<EFBFBD>?**瘚贝<E7989A><E8B49D><EFBFBD><E69C9E>?*: 9/11 (81.8%) 颲曉<EFBFBD>MVP<EFBFBD><EFBFBD><EFBFBD>

*<EFBFBD>𣂼<EFBFBD><EFBFBD>箸艶嚗?銝迎<E98A9D>嚗?

  1. <EFBFBD>?蝏煺<E89D8F>蝻箏仃<E7AE8F><EFBFBD>霈?2. <20>?<3F><><EFBFBD><EFBFBD>蝻𣇉<E89DBB>
  2. <EFBFBD>?餈䂿賒<E482BF><EFBFBD><E3979B><EFBFBD>
  3. <EFBFBD>?BMI霈∠<E99C88>
  4. <EFBFBD>?<3F>∩辣蝑偦<E89D91>?6. <20>?蝻箏仃<E7AE8F>銵?7. <20>?蝏蠘恣瘙<E681A3><E79899>?8. <20>?憭齿<E686AD><E9BDBF><EFBFBD>
  5. <EFBFBD>?撖寡<E69296><E5AFA1><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD><EFBFBD>硋㦤<EFBFBD><EFBFBD>2銝迎<EFBFBD>撌脰扇敶閙<EFBFBD><EFBFBD><EFBFBD>箏𦛚TD-C-006嚗㚁<E59A97>

  1. <EFBFBD>?<3F><EFBFBD><EFBFBD><EFBFBD><E79A9C><EFBFBD><E59A97><EFBFBD><EFBFBD><EFBFBD>蝚虫葡憭<E891A1><E686AD>嚗?2. <20>?<3F><EFBFBD><E7AE84><EFBFBD><EFBFBD>𠯫<EFBFBD>蠘圾<E8A098>?<3F><EFBFBD>嚗? *<EFBFBD>喲睸靽桀<EFBFBD>嚗?
  • <EFBFBD>?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>
  • <EFBFBD>?Few-shot蝷箔<E89DB7><EFBFBD>㟲嚗<E39FB2><EFBFBD>夕mport霂剖蘂嚗?

Day 4: <20>滨垢<E6BBA8><EFBFBD><EFBFBD><20>?

<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD><EFBFBD>鰵憓痹<EFBFBD>

frontend-v2/src/modules/dc/pages/tool-c/
<0A><EFBFBD><E98EBF><EFBFBD> index.tsx                        # 258銵?<3F>?銝餃<E98A9D><E9A483>?<3F><EFBFBD><E98EBF><EFBFBD> components/
<0A>?  <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銵冽聢
<0A>?  <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/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> index.ts                     # 62銵?<3F>?蝐餃<E89D90>摰帋<E691B0>
api/
<0A><EFBFBD><E5A999><EFBFBD> toolC.ts                         # 218銵?<3F>?API撠<49><E692A0>嚗?銝芣䲮瘜𤏪<E7989C>

<0A>颱誨<E9A2B1><E8AAA8><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>?- 頝臬<EFBFBD>: /data-cleaning/tool-c

  • **<2A><EFBFBD>?: Portal撌脣鍳<E884A3><EFBFBD>status: 'ready'嚗?- **<2A><EFBFBD>頧?: 雿輻鍂React.lazy()
  • 瘚贝<EFBFBD>: Portal<61><EFBFBD><E288A0><EFBFBD><E88890><EFBFBD><E9A489>?

Day 4摰峕<E691B0><E5B395><EFBFBD>?

<EFBFBD>?<EFBFBD><EFBFBD><EFBFBD>沲100%摰峕<E691B0>:

  • <EFBFBD>?Header嚗<72><E59A97><EFBFBD><EFBFBD><E5A2A7><EFBFBD><E69FB4><EFBFBD>隞嗅<E99A9E><E59785><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD>?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>
  • <EFBFBD>?頝舐眏<E88890>滨蔭嚗㇊ortal <20>?Tool C嚗? <0A><EFBFBD> <EFBFBD>ay 5摰峕<E691B0>:
  • <EFBFBD><EFBFBD> MessageItem蝏<6D>辣嚗<E8BEA3><E59A97><EFBFBD>舀葡<E88880><EFBFBD>
  • <EFBFBD><EFBFBD> CodeBlock蝏<6B>辣嚗<E8BEA3><EFBFBD><E8AAA8><EFBFBD>鈭殷<E988AD>
  • <EFBFBD><EFBFBD> InputArea蝏<61>辣嚗<E8BEA3><E59A97><EFBFBD><EFBFBD>嚗?- <20><EFBFBD> InsightsPanel蝏<6C>辣嚗<E8BEA3><EFBFBD><EFBFBD><EFBFBD><E69296>
  • <EFBFBD><EFBFBD> <20><>辣銝𠹺<E98A9D>摰峕㟲瘚<E39FB2><E7989A>
  • <EFBFBD><EFBFBD> AI撖寡<E69296>摰峕㟲鈭支<E988AD>
  • <EFBFBD><EFBFBD> 蝡臬<E89DA1>蝡舀<E89DA1>霂?

Day 2: Session蝞∠<E89D9E> + <20>唳旿憭<E697BF><E686AD> <20>?

<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD><EFBFBD>鰵憓痹<EFBFBD>

backend/src/modules/dc/tool-c/
<0A><EFBFBD><E98EBF><EFBFBD> services/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts    # 177銵?<3F>?Day 1
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts           # 383銵?<3F>?Day 2 <20><EFBFBD>
<0A>?  <20><EFBFBD><E5A999><EFBFBD> DataProcessService.ts       # 303銵?<3F>?Day 2 <20><EFBFBD>
<0A><EFBFBD><E98EBF><EFBFBD> controllers/
<0A>?  <20><EFBFBD><E98EBF><EFBFBD> TestController.ts           # 131銵?<3F>?Day 1
<0A>?  <20><EFBFBD><E5A999><EFBFBD> SessionController.ts        # 300銵?<3F>?Day 2 <20><EFBFBD>
<0A><EFBFBD><E5A999><EFBFBD> routes/
    <20><EFBFBD><E5A999><EFBFBD> index.ts                    # 62銵?<3F>?Day 2 <20>湔鰵

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

2.1 SessionService <20>?- <EFBFBD><EFBFBD>: Session<6F>笔𦶢<E7AC94><EFBFBD>蝞∠<E89D9E>

  • <EFBFBD><EFBFBD>:
    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>?*:
    • <EFBFBD>?<3F>嗉氜<E59789><EFBFBD>Excel<65><6C><EFBFBD><EFBFBD><E996AB>嚗𣬚凒<F0A3AC9A><EFBFBD>隡𤪻SS
    • <EFBFBD>?10<31><30><EFBFBD><EFBFBD><E9A488><EFBFBD><EFBFBD>
    • <EFBFBD>?敹<>歲撱園鵭<E59C92><EFBFBD>
    • <EFBFBD>?<3F>芸𢆡皜<F0A286A1><E79A9C><EFBFBD><E9A488>Session
    • <EFBFBD>?摰峕㟲<E5B395><E39FB2><EFBFBD>霂臬<E99C82><E887AC>? 2.2 DataProcessService <20>?- <EFBFBD><EFBFBD>: Excel<65><6C>辣閫<E8BEA3><E996AB><EFBFBD><EFBFBD>霂?- <EFBFBD><EFBFBD>:
    class DataProcessService {
      parseExcel(buffer): ParsedExcelData
      validateFile(buffer, fileName): ValidationResult
      inferColumnTypes(data): ColumnType[]
      formatFileSize(bytes): string
    }
    
  • **<2A><EFBFBD>?*:
    • <EFBFBD>?<3F><><EFBFBD><EFBFBD><E996AB><EFBFBD><EFBFBD><EFBFBD>嚗? - <20>?10MB<4D><42>辣憭批<E686AD><E689B9>𣂼<EFBFBD>
    • <EFBFBD>?<3F><EFBFBD>.xlsx, .xls, .csv
    • <EFBFBD>?<3F>㛖掩<E39B96>𧢲綫<F0A7A2B2><EFBFBD><E593A8><EFBFBD><EFBFBD>

2.3 SessionController <20>?- <EFBFBD><EFBFBD>: Session蝞∠<E89D9E>API蝡舐<E89DA1>

  • 蝡舐<EFBFBD>:
    • 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>?- 銵典<EFBFBD>: 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嚗?- <EFBFBD>: 3銝迎<E98A9D>銝駁睸 + user_id + expires_at嚗?- <EFBFBD><EFBFBD>𡁏𧋦: backend/scripts/create-tool-c-table.mjs

API瘚贝<EFBFBD>蝏𤘪<EFBFBD>嚗㇄ay 2嚗?

<EFBFBD>?瘚贝<EFBFBD><EFBFBD>唳旿:

<EFBFBD><EFBFBD><EFBFBD>? test-medical-data.xlsx
<0A>唳旿: 8銵?x 7<>堒龫<E5A092>埈㺭<E59F88>?<3F><EFBFBD>: patient_id, name, age, gender, diagnosis, sbp, dbp
<0A><>辣憭批<E686AD>: 17.42 KB

<EFBFBD>?瘚贝<EFBFBD>蝏𤘪<EFBFBD>:

瘚贝<EFBFBD>憿? <EFBFBD><EFBFBD>? 霂湔<EFBFBD>
銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𥕦遣Session <EFBFBD>? 餈𥪜<EFBFBD>201嚗玺ession<EFBFBD>𥕦遣<EFBFBD>𣂼<EFBFBD>
<EFBFBD><EFBFBD>Session靽⊥<EFBFBD> <EFBFBD>? <EFBFBD><EFBFBD><EFBFBD>格迤蝖株<EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿嚗<EFBFBD><EFBFBD>100銵䕘<EFBFBD> <EFBFBD>? 8銵峕㺭<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD><EFBFBD>摰峕㟲<EFBFBD>唳旿 <EFBFBD>? 隞窻SS霂餃<EFBFBD><EFBFBD>𣂼<EFBFBD>
<EFBFBD>湔鰵敹<EFBFBD> <EFBFBD>? <EFBFBD><EFBFBD><EFBFBD>園𡢿撱園鵭10<EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>𣳇膄Session <EFBFBD>? OSS+DB皜<42><E79A9C><EFBFBD>𣂼<EFBFBD>
撉諹<EFBFBD><EFBFBD>𣳇膄 <EFBFBD>? 餈𥪜<EFBFBD>404蝖株恕<EFBFBD>𣳇膄
<EFBFBD>餉恣 7/7 (100%) <EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂閖<EFBFBD><EFBFBD>

<EFBFBD>?**鈭穃<E988AD><E7A983><EFBFBD><E8A098><EFBFBD><EFBFBD><EFBFBD>?*:

  • <EFBFBD>?雿輻鍂 storage <20>滚𦛚嚗<F0A69B9A><EFBFBD><EFBFBD>嚗?- <20>?雿輻鍂 logger <20>滚𦛚嚗<F0A69B9A><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?- <20>?雿輻鍂 prisma <20><EFBFBD>摰硺<E691B0>
  • <EFBFBD>?Excel<65><6C><EFBFBD><EFBFBD><E996AB>嚗峕<E59A97><E5B395>砍𧑐<E7A08D><F0A79190>辣摮睃<E691AE>
  • <EFBFBD>?<3F>蝻𣇉<E89DBB><F0A38789>滨蔭

2. Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>嚗㇄ay 1嚗?

<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>

backend/src/modules/dc/tool-c/
<0A><EFBFBD><E98EBF><EFBFBD> services/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> PythonExecutorService.ts    # 177銵?<3F>?<3F><EFBFBD>
<0A><EFBFBD><E98EBF><EFBFBD> controllers/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> TestController.ts           # 131銵?<3F>?<3F><EFBFBD>
<0A><EFBFBD><E98EBF><EFBFBD> routes/
<0A>?  <20><EFBFBD><E5A999><EFBFBD> index.ts                    # 29銵?<3F>?<3F><EFBFBD>
<0A><EFBFBD><E5A999><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>?*:
    • 摰峕㟲<EFBFBD><EFBFBD><EFBFBD>霂臬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
    • 30蝘坿<EFBFBD><EFBFBD>嗆綉<EFBFBD>? - 餈墧𦻖<E5A2A7><EFBFBD><E59786><EFBFBD>瘚? - 霂衣<E99C82><E8A1A3><EFBFBD>𠯫敹𡑒扇敶? 2.2 TestController <20>?- <EFBFBD><EFBFBD>: Day 1瘚贝<E7989A>蝡舐<E89DA1><E88890><EFBFBD><E689B9>?- 蝡舐<EFBFBD>:
    • 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>?- <EFBFBD><EFBFBD>: /api/v1/dc/tool-c

  • **<2A><EFBFBD>?: 撌脣銁 dc/index.ts 銝剜釣<E5899C>?- **<2A>航挪<E888AA>?: <20>?<3F>滚𦛚<E6BB9A>臬𢆡<E887AC>𤾸朖<F0A4BEB8><EFBFBD><E888AA>?

<EFBFBD><EFBFBD><><E695BA><EFBFBD><EFBFBD><E7A983><EFBFBD>Day 2-15嚗?

Week 1: <20><EFBFBD><E7AE87><EFBFBD>嚗㇄ay 2-5嚗?

Day 2: <20>唳旿摨?+ Session蝞∠<E89D9E> <20>?

<EFBFBD>唳旿摨廍chema<EFBFBD><EFBFBD>𥕦遣嚗?

// 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>?*:

  • 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>
    • 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
  • 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>
    • <EFBFBD>㛖掩<EFBFBD>𧢲綫<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
    • <EFBFBD><EFBFBD>辣憭批<EFBFBD><EFBFBD>𣂼<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>
    • <EFBFBD><EFBFBD><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>:

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>

<EFBFBD><EFBFBD><EFBFBD>烐綉<EFBFBD>嗅膥:

  • 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>
    • <EFBFBD><EFBFBD><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嚗?

瘚贝<EFBFBD>隞餃𦛚:

  • 15銝芸龫<EFBFBD>埈㺭<EFBFBD><EFBFBD>瘣堒㦤<EFBFBD><EFBFBD>霂?- [ ] <20><EFBFBD>瘚贝<E7989A>嚗?0MB<4D><42>辣嚗?- [ ] 撟嗅<E6929F>瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗?- [ ] 摰匧<E691B0>瘚贝<E7989A><EFBFBD><EFBFBD><E8AAA8><EFBFBD>蝞梧<E89D9E>
  • UI/UX瘚贝<E7989A>

<EFBFBD><EFBFBD>儭?<3F>唳旿摨梶𠶖<E6A2B6>?

敶枏<EFBFBD>銵函<EFBFBD><EFBFBD>?

**dc_schema 銝剔<E98A9D>銵?*:

-- 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嚗?```

**<EFBFBD>𥕦遣<EFBFBD><EFBFBD>**<EFBFBD>歇摰峕<EFBFBD>?
```bash
# Day 2 撌脫<EFBFBD>?cd backend
node scripts/create-tool-c-table.mjs  # <EFBFBD>?<EFBFBD>𣂼<EFBFBD>
npx prisma generate                    # <EFBFBD>?<EFBFBD>𣂼<EFBFBD>

**銵函<E98AB5><E587BD><EFBFBD><EFBFBD>?*:

-- 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>
);

<EFBFBD><EFBFBD> API蝡舐<E89DA1><EFBFBD><E79A9C>

Python敺格<EFBFBD><EFBFBD>?(http://localhost:8000)

<EFBFBD><EFBFBD> 蝡舐<EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD>? 霂湔<EFBFBD>
GET /api/health <EFBFBD>亙熒璉<EFBFBD><EFBFBD>? <EFBFBD>? <EFBFBD><EFBFBD><EFBFBD><EFBFBD>∠𠶖<EFBFBD>?
POST /api/dc/validate <EFBFBD><EFBFBD>撉諹<EFBFBD> <EFBFBD>? AST摰匧<EFBFBD><EFBFBD><EFBFBD>?
POST /api/dc/execute <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>? Pandas隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Node.js<6A>𡒊垢 (http://localhost:3000)

瘚贝<EFBFBD>蝡舐<EFBFBD>嚗㇄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蝞∠<EFBFBD>蝡舐<EFBFBD>嚗㇄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<EFBFBD><EFBFBD>蝡舐<EFBFBD>嚗㇄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> |


<EFBFBD><EFBFBD> <20><EFBFBD><E887AC>滨蔭

<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD>?backend/.env 銝剝<E98A9D>蝵殷<E89DB5>

# 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

<EFBFBD>滚𦛚<EFBFBD>臬𢆡憿箏<EFBFBD>

  1. *<EFBFBD>臬𢆡Python敺格<EFBFBD><EFBFBD>? (敹<><E695B9>)
cd extraction_service
.\venv\Scripts\activate
python main.py
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:8000
  1. <EFBFBD>臬𢆡Node.js<6A>𡒊垢 (敹<><E695B9>)
cd backend
npm run dev
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:3000
  1. <EFBFBD>臬𢆡<EFBFBD>滨垢 (Day 6<>?
cd frontend-v2
npm run dev
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:5173

<EFBFBD><EFBFBD><><E99A9E>蝏𤘪<E89D8F>

Python敺格<EFBFBD><EFBFBD>?```

extraction_service/ <0A><EFBFBD><E98EBF><EFBFBD> services/ <0A>? <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> <0A>? <20><EFBFBD><E98EBF><EFBFBD> docx_extractor.py # Docx<63>𣂼<EFBFBD> <0A>? <20><EFBFBD><E5A999><EFBFBD> txt_extractor.py # Txt<78>𣂼<EFBFBD> <0A><EFBFBD><E98EBF><EFBFBD> main.py # FastAPI銝餅<E98A9D>隞?<3F>?<3F><EFBFBD><E98EBF><EFBFBD> requirements.txt # Python靘肽<E99D98> <0A><EFBFBD><E5A999><EFBFBD> venv/ # <20>𡁏<EFBFBD><F0A1818F><EFBFBD>


### Node.js<6A>𡒊垢

backend/src/modules/dc/tool-c/ <0A><EFBFBD><E98EBF><EFBFBD> services/ <0A>? <20><EFBFBD><E98EBF><EFBFBD> PythonExecutorService.ts # Python靚<6E><EFBFBD>滚𦛚 <20>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> SessionService.ts # Session蝞∠<E89D9E> <20><EFBFBD> <0A>? <20><EFBFBD><E98EBF><EFBFBD> AICodeService.ts # AI隞<49><E99A9E><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <0A>? <20><EFBFBD><E5A999><EFBFBD> DataProcessService.ts # <20>唳旿憭<E697BF><E686AD> <20><EFBFBD> <0A><EFBFBD><E98EBF><EFBFBD> controllers/ <0A>? <20><EFBFBD><E98EBF><EFBFBD> TestController.ts # 瘚贝<E7989A><E8B49D><EFBFBD><E689B9>?<3F>?<3F>? <20><EFBFBD><E98EBF><EFBFBD> SessionController.ts # Session<6F><EFBFBD><E689B9>?<3F><EFBFBD> <0A>? <20><EFBFBD><E5A999><EFBFBD> AIController.ts # AI<41><EFBFBD><E689B9>?<3F><EFBFBD> <0A><EFBFBD><E98EBF><EFBFBD> routes/ <0A>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 頝舐眏摰帋<E691B0> <20>?<3F><EFBFBD><E5A999><EFBFBD> utils/ <0A><EFBFBD><E5A999><EFBFBD> (敺<><EFBFBD>?


### <20>滨垢

frontend-v2/src/modules/dc/pages/tool-c/ <0A><EFBFBD><E98EBF><EFBFBD> index.tsx # 258銵?<3F>?Day 4嚗<34><EFBFBD>亙藁+<2B><EFBFBD><E59786><EFBFBD><E681A3><EFBFBD> <0A><EFBFBD><E98EBF><EFBFBD> components/ <0A>? <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> <0A>? <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> <0A>? <20><EFBFBD><E98EBF><EFBFBD> CodeBlock.tsx # <20><EFBFBD> Day 5嚗<35><EFBFBD><E8AAA8><EFBFBD>鈭殷<E988AD> <0A>? <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> <0A><EFBFBD><E98EBF><EFBFBD> hooks/ <0A>? <20><EFBFBD><E5A999><EFBFBD> useToolC.ts # <20><EFBFBD> Day 5嚗<35>瓲敹<E793B2>ook嚗<6B><EFBFBD><EFBFBD> <0A><EFBFBD><E98EBF><EFBFBD> types/ <0A>? <20><EFBFBD><E5A999><EFBFBD> index.ts # 62銵?<3F>?Day 4嚗<34><EFBFBD><EFBFBD>銋㚁<E98A8B> <0A><EFBFBD><E5A999><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>辣嚗?```


<EFBFBD>妒 瘚贝<E7989A><EFBFBD><E79A9C>

Day 1 瘚贝<E7989A><EFBFBD>歇摰峕<E691B0>嚗争<E59A97>

  • Python<EFBFBD>滚𦛚<EFBFBD>亙熒璉<EFBFBD><EFBFBD>?- [x] AST隞<54><E99A9E>撉諹<E69289><EFBFBD>迤撣訾誨<E8A8BE><E8AAA8><EFBFBD>
  • AST隞<EFBFBD><EFBFBD>撉諹<EFBFBD><EFBFBD><EFBFBD>拐誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • Pandas隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>訫㦤<EFBFBD><EFBFBD>
  • Pandas隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>埈㺭<EFBFBD><EFBFBD>瘣梹<EFBFBD>
  • Node.js<6A>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>
  • HTTP<EFBFBD>帋縑甇<EFBFBD>

Day 2-15 瘚贝<E7989A><EFBFBD><E59A97><EFBFBD><EFBFBD>嚗争虬儭?

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD>

  • Excel<EFBFBD><EFBFBD>辣銝𠹺<EFBFBD>嚗?10MB嚗?- [ ] <20><>辣蝻𣇉<E89DBB><EFBFBD>瘚?- [ ] Session<6F>𥕦遣<F0A595A6><E981A3><EFBFBD><EFBFBD>?- [ ] OSS摮睃<E691AE>霂餃<E99C82>
  • <EFBFBD><EFBFBD><EFBFBD>

AI<EFBFBD><EFBFBD>瘚贝<EFBFBD>

  • LLM隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
  • <EFBFBD><EFBFBD><EFBFBD><EFBFBD>靽格迤
  • Few-shot<6F><74><EFBFBD>撉諹<E69289>
  • 銝𠹺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝖格<EFBFBD>?

15銝芸龫<EFBFBD>埈㺭<EFBFBD><EFBFBD>瘣堒㦤<EFBFBD>?**<2A><EFBFBD><E7AE87>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>90%嚗?*:

  • <EFBFBD>箸艶1嚗𡁏<EFBFBD>霈啗<EFBFBD><EFBFBD>僑蝏<EFBFBD><EFBFBD>age > 60嚗?- [ ] <20>箸艶2嚗𡁜<E59A97><F0A1819C>斤撩憭望<E686AD><E69C9B><EFBFBD>D<EFBFBD><44><EFBFBD>
  • <EFBFBD>箸艶3嚗𡁏<EFBFBD><EFBFBD>蝻𣇉<EFBFBD><EFBFBD>琸1憟?嚗?- [ ] <20>箸艶4嚗朞恣蝞娋MI
  • <EFBFBD>箸艶5嚗𡁜<EFBFBD><EFBFBD>斤撩憭梁<EFBFBD>>50%<25><><EFBFBD>

**銝剔<E98A9D><E58994>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>80%嚗?*:

  • <EFBFBD>箸艶6嚗朞<EFBFBD><EFBFBD><EFBFBD>蝐鳴<EFBFBD><EFBFBD>虜/擃䁅<E69383><E48185><EFBFBD>
  • <EFBFBD>箸艶7嚗朞恣蝞𦯀<EFBFBD><EFBFBD><EFBFBD>?- [ ] <20>箸艶8嚗𡁜<E59A97><F0A1819C><EFBFBD>憭齿<E686AD><E9BDBF><EFBFBD>D
  • <EFBFBD>箸艶9嚗𡁏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撣詨僑樴<EFBFBD><EFBFBD><EFBFBD>>120嚗?- [ ] <20>箸艶10嚗𡁏<E59A97><F0A1818F><EFBFBD><E689B9><EFBFBD><EFBFBD>蝏蠘恣

**擃条漣<E69DA1>箸艶嚗<E889B6><E59A97><EFBFBD><EFBFBD>>60%嚗?*:

  • <EFBFBD>箸艶11嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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>?

<EFBFBD><EFBFBD> 敹恍<E695B9><EFBFBD>憪?

<EFBFBD><EFBFBD>𤏸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?

  1. *<EFBFBD>臬𢆡Python敺格<EFBFBD><EFBFBD>?
cd extraction_service
.\venv\Scripts\activate
python main.py
  1. 瘚贝<EFBFBD>Python<EFBFBD>滚𦛚
# PowerShell瘚贝<E7989A>
Invoke-WebRequest -Uri "http://localhost:8000/api/health"
  1. <EFBFBD>臬𢆡Node.js<6A>𡒊垢
cd backend
npm install  # 擐𡝗活餈鞱<E9A488>
npm run dev
  1. 瘚贝<EFBFBD>Node.js<6A><73><EFBFBD>
curl http://localhost:3000/api/v1/dc/tool-c/test/health

API靚<EFBFBD>鍂蝷箔<EFBFBD>

<EFBFBD><EFBFBD>撉諹<EFBFBD>:

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"}'

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:

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"
  }'

<EFBFBD><EFBFBD><><E69298>𤏸扇敶?

<EFBFBD><EFBFBD> <EFBFBD>𣬚<EFBFBD>蝣? 霂衣<EFBFBD>霈啣<EFBFBD>
2025-12-06 Day 1摰峕<E691B0> 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
2025-12-07 Day 3摰峕<E691B0> 2025-12-06_撌亙<E6928C>C_Day3撘<33><E69298><EFBFBD><E7A983><EFBFBD><EFBFBD>.md <20>?<EFBFBD>𡒊垢MVP摰峕<EFBFBD>
2025-12-07 Day 4摰峕<E691B0> 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 <20>?Ant Design X<><58><EFBFBD>
2025-12-07 UI隡睃<EFBFBD> 2025-12-07_摰峕㟲UI隡睃<E99AA1>銝𤾸<E98A9D><F0A4BEB8><EFBFBD>撘?md <20>?*7銝芷䔮憸䀝耨憭?

<EFBFBD>㴓 銝衤<E98A9D>甇亥<E79487><E4BAA5>?

<EFBFBD>?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>?

<EFBFBD>?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>

  1. 憭𡁻<EFBFBD><EFBFBD>嚗㇈ICE嚗? 擃䀝<E69383><E4809D><EFBFBD>
  2. <EFBFBD><EFBFBD>隡睃<EFBFBD><EFBFBD><EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD>
  3. <EFBFBD>躰秤憭<EFBFBD><EFBFBD>憓𧼮撩
  4. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

<EFBFBD><EFBFBD> <20><EFBFBD><E8A9A8><EFBFBD>


<EFBFBD><EFBFBD> 摰匧<E691B0>霂湔<E99C82>

<EFBFBD><EFBFBD><EFBFBD><EFBFBD>摰匧<EFBFBD>

  • <EFBFBD>?AST<53><EFBFBD><E8B9B1><EFBFBD><EFBFBD>交㜃<E4BAA4>芸暒<E88AB8><EFBFBD>雿?- <20>?瘝嗵拳<E597B5><EFBFBD><E887AC>𣂼<EFBFBD><F0A382BC>舐鍂<E88890>賣㺭
  • <EFBFBD>?30蝘坿<E89D98><E59DBF><EFBFBD><E597A1>?- <20>?蝳<><EFBFBD><E8BFAB><EFBFBD>𣬚<EFBFBD>蝏𨀣<E89D8F>雿?- <20><EFBFBD><><E99F8F>雿輻鍂<E8BCBB>𣂼<EFBFBD><EFBFBD><E59A97>摰䂿緵嚗?

<EFBFBD>唳旿摰匧<EFBFBD>

  • <EFBFBD>?10MB<4D><42>辣憭批<E686AD><E689B9>𣂼<EFBFBD>
  • <EFBFBD><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>

  • 撱箄悅嚗帋<EFBFBD><EFBFBD><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
**<2A><><EFBFBD>擧凒<E693A7>?
: 2025-12-10