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