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