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%)
44 KiB
撌亙<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>T<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>蔭霂Y鍂嚗?- <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>質蔭霂g<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>蔭霂g<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>W<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>X䲮<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嚗?- 蝝W<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>嚗?
- <EFBFBD>?蝏煺<E89D8F>蝻箏仃<E7AE8F>潭<EFBFBD>霈?2. <20>?<3F><>掩<EFBFBD>㗛<EFBFBD>蝻𣇉<E89DBB>
- <EFBFBD>?餈䂿賒<E482BF>㗛<EFBFBD><E3979B><EFBFBD>拳
- <EFBFBD>?BMI霈∠<E99C88>
- <EFBFBD>?<3F>∩辣蝑偦<E89D91>?6. <20>?蝻箏仃<E7AE8F>澆‵銵?7. <20>?蝏蠘恣瘙<E681A3><E79899>?8. <20>?憭齿<E686AD><E9BDBF><EFBFBD>掩
- <EFBFBD>?撖寡<E69296><E5AFA1><EFBFBD>蟮<EFBFBD>瑕<EFBFBD>
敺<EFBFBD><EFBFBD><EFBFBD>硋㦤<EFBFBD>荔<EFBFBD>2銝迎<EFBFBD>撌脰扇敶閙<EFBFBD><EFBFBD>臬<EFBFBD>箏𦛚TD-C-006嚗㚁<E59A97>
- <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>蝥Z𠧧嚗? - <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>?皞W枂皛𡁜𢆡<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>蝝X<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嚗?- 蝝W<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>蟮
- POST
**敺<><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摮埈挾嚗?蝝W<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>
- *<EFBFBD>臬𢆡Python敺格<EFBFBD><EFBFBD>? (敹<><E695B9>)
cd extraction_service
.\venv\Scripts\activate
python main.py
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:8000
- <EFBFBD>臬𢆡Node.js<6A>𡒊垢 (敹<><E695B9>)
cd backend
npm run dev
# <20>滚𦛚餈鞱<E9A488><E99EB1>?http://localhost:3000
- <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>W予<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>?
- *<EFBFBD>臬𢆡Python敺格<EFBFBD><EFBFBD>?
cd extraction_service
.\venv\Scripts\activate
python main.py
- 瘚贝<EFBFBD>Python<EFBFBD>滚𦛚
# PowerShell瘚贝<E7989A>
Invoke-WebRequest -Uri "http://localhost:8000/api/health"
- <EFBFBD>臬𢆡Node.js<6A>𡒊垢
cd backend
npm install # 擐𡝗活餈鞱<E9A488>
npm run dev
- 瘚贝<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>X踎 <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>
- 憭𡁻<EFBFBD><EFBFBD>坿‘嚗㇈ICE嚗? 擃䀝<E69383><E4809D><EFBFBD>漣
- <EFBFBD>扯<EFBFBD>隡睃<EFBFBD>嚗<EFBFBD>之<EFBFBD>唳旿<EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>躰秤憭<EFBFBD><EFBFBD>憓𧼮撩
- <EFBFBD>冽<EFBFBD><EFBFBD>见<EFBFBD><EFBFBD><EFBFBD>﹝
<EFBFBD><EFBFBD> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝
- **<2A><>瘙<EFBFBD><E79899>獢?*: PRD嚗関ool C - 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?(MVP V1.1).md
- **<2A><><EFBFBD>航挽霈?*: <EFBFBD><EFBFBD><EFBFBD>航挽霈⊥<EFBFBD>獢<EFBFBD><EFBFBD>撌亙<EFBFBD> C - 蝘𤑳<E89D98><F0A491B3>唳旿蝻𤥁<E89DBB><F0A4A581>?(V7 鈭𤑳垢瘝嗵拳<E597B5>烾<EFBFBD><E783BE>拍<EFBFBD>).md
- **撘<><E69298>𤏸恣<F0A48FB8>?*: 撌亙<EFBFBD>C_MVP撘<EFBFBD><EFBFBD>𤏸恣<EFBFBD>𦚱V1.0.md
- TODO皜<EFBFBD><EFBFBD>: 撌亙<EFBFBD>C_MVP撘<EFBFBD><EFBFBD>䰎TODO皜<EFBFBD><EFBFBD>.md
- UI<EFBFBD>笔<EFBFBD>: 撌亙<EFBFBD>C_<EFBFBD>笔<EFBFBD>霈曇恣V6.html
<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