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%)
7.2 KiB
ASL璅∪<EFBFBD> Week 1 撘<><E69298>穃<EFBFBD><E7A983>鞉𥁒<E99E89>?
<EFBFBD>交<EFBFBD>: 2025-11-18
**撘<><E69298>穃𪂹<E7A983>?: Week 1 (Day 1-5)
**<2A>嗆<EFBFBD>?: <20>?<3F>券<EFBFBD>摰峕<E691B0>
<EFBFBD><EFBFBD> 隞餃𦛚摰峕<E691B0><E5B395><EFBFBD><EFBFBD>
| 隞餃𦛚 | 霈∪<EFBFBD> | 摰鮋<EFBFBD> | <EFBFBD>嗆<EFBFBD>? | 霂湔<EFBFBD> |
|---|---|---|---|---|
| Prisma Schema霈曇恣 | Day 1 | Day 1 | <EFBFBD>? | 4銝芣芋<EFBFBD>页<EFBFBD>174銵䔶誨<EFBFBD>? |
| <EFBFBD>唳旿摨栞<EFBFBD>蝘? | Day 1 | Day 1 | <EFBFBD>? | 4撘㰘”<EFBFBD>𥕦遣<EFBFBD>𣂼<EFBFBD> |
| <EFBFBD>𡒊垢<EFBFBD>桀<EFBFBD>蝏𤘪<EFBFBD> | Day 2 | Day 1 | <EFBFBD>? | 5銝芸<EFBFBD><EFBFBD>桀<EFBFBD>嚗?銝芣<E98A9D>隞? |
| 頝舐眏瘜典<EFBFBD> | Day 3 | Day 1 | <EFBFBD>? | 10銝服PI蝡舐<EFBFBD> |
| <EFBFBD>箇<EFBFBD>API摰䂿緵 | Day 4-5 | Day 1 | <EFBFBD>? | 憿寧𤌍+<2B><>讃蝞∠<E89D9E> |
| API瘚贝<EFBFBD> | - | Day 1 | <EFBFBD>? | 7銝芣<EFBFBD>霂訫<EFBFBD><EFBFBD>券<EFBFBD>朞<EFBFBD> |
**摰峕<E691B0>摨?*: 6/6 (100%)
<EFBFBD>𣂼<EFBFBD>摰峕<EFBFBD>: 4憭?
<EFBFBD>㴓 摰䂿緵<E482BF><E7B7B5><EFBFBD><EFBFBD>?
1. <20>唳旿摨栞挽霈?<3F>?
Schema霈曇恣
// 4銝芣瓲敹<E793B2>芋<EFBFBD>?
- AslScreeningProject // 蝑偦<E89D91>厰★<E58EB0>?(19摮埈挾)
- AslLiterature // <20><>讃<EFBFBD>∠𤌍 (14摮埈挾 + OSS憸<53><E686B8>)
- AslScreeningResult // 蝑偦<E89D91>厩<EFBFBD><E58EA9>?(40摮埈挾嚗<E68CBE><E59A97>璅∪<E79285>)
- AslScreeningTask // 蝑偦<E89D91>劐遙<E58A90>?(14摮埈挾)
<EFBFBD>唳旿摨栞”
asl_schema.screening_projects -- 蝑偦<E89D91>厰★<E58EB0>株”
asl_schema.literatures -- <20><>讃<EFBFBD>∠𤌍銵?
asl_schema.screening_results -- 蝑偦<E89D91>厩<EFBFBD><E58EA9>𡏭”
asl_schema.screening_tasks -- 蝑偦<E89D91>劐遙<E58A90>∟”
<EFBFBD>寞<EFBFBD>?
- <EFBFBD>?Schema<6D>𠉛氖 (
asl_schema) - <EFBFBD>?憭㚚睸蝥行<E89DA5> (蝥扯<E89DA5><E689AF>𣳇膄)
- <EFBFBD>?蝝W<E89D9D>隡睃<E99AA1> (12銝芰揣撘?
- <EFBFBD>?<3F>臭<EFBFBD>蝥行<E89DA5> (projectId + pmid)
- <EFBFBD>?JSONB摮埈挾 (PICO<43><4F><EFBFBD>)
- <EFBFBD>?OSS摮埈挾憸<E68CBE><E686B8> (pdfUrl, pdfOssKey)
2. <20>𡒊垢API <20>?
<EFBFBD>桀<EFBFBD>蝏𤘪<EFBFBD>
backend/src/modules/asl/
<0A>鎿<EFBFBD><E98EBF><EFBFBD> controllers/
<0A>? <20>鎿<EFBFBD><E98EBF><EFBFBD> projectController.ts (224銵?
<0A>? <20>婙<EFBFBD><E5A999><EFBFBD> literatureController.ts (259銵?
<0A>鎿<EFBFBD><E98EBF><EFBFBD> routes/
<0A>? <20>婙<EFBFBD><E5A999><EFBFBD> index.ts (47銵?
<0A>鎿<EFBFBD><E98EBF><EFBFBD> services/
<0A>? <20>婙<EFBFBD><E5A999><EFBFBD> llmScreeningService.ts (189銵?
<0A>鎿<EFBFBD><E98EBF><EFBFBD> schemas/
<0A>? <20>婙<EFBFBD><E5A999><EFBFBD> screening.schema.ts (108銵?
<0A>婙<EFBFBD><E5A999><EFBFBD> types/
<20>婙<EFBFBD><E5A999><EFBFBD> index.ts (121銵?
API蝡舐<EFBFBD> (10銝?
POST /api/v1/asl/projects - <20>𥕦遣憿寧𤌍
GET /api/v1/asl/projects - <20>瑕<EFBFBD>憿寧𤌍<E5AFA7>𡑒”
GET /api/v1/asl/projects/:projectId - <20>瑕<EFBFBD>憿寧𤌍霂行<E99C82>
PUT /api/v1/asl/projects/:projectId - <20>湔鰵憿寧𤌍
DELETE /api/v1/asl/projects/:projectId - <20>𣳇膄憿寧𤌍
POST /api/v1/asl/literatures/import - 撖澆<E69296><E6BE86><EFBFBD>讃(JSON)
POST /api/v1/asl/literatures/import-excel - 撖澆<E69296><E6BE86><EFBFBD>讃(Excel)
GET /api/v1/asl/projects/:projectId/literatures - <20>瑕<EFBFBD><E79195><EFBFBD>讃<EFBFBD>𡑒”
DELETE /api/v1/asl/literatures/:literatureId - <20>𣳇膄<F0A3B387><E88684>讃
3. <20>詨<EFBFBD><E8A9A8>滚𦛚 <20>?
LLM蝑偦<EFBFBD>㗇<EFBFBD><EFBFBD>?
class LLMScreeningService {
// <20>閙芋<E99699>讠<EFBFBD><E8AEA0>?
async screenWithModel()
// <20>峕芋<E5B395>见僎銵𣬚<E98AB5><F0A3AC9A>?(<28>詨<EFBFBD>)
async dualModelScreening()
// <20>脩<EFBFBD>璉<EFBFBD>瘚?
private detectConflict()
// <20>寥<EFBFBD>蝑偦<E89D91>?
async batchScreening()
}
JSON Schema撉諹<E69289>
// AJV撉諹<E69289><E8ABB9>?
- PicoJudgment Schema
- PicoEvidence Schema
- LLMScreeningOutput Schema
Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
// <20><><EFBFBD>PICO<43><4F><EFBFBD>蝑偦<E89D91>侨rompt
generateScreeningPrompt(
title, abstract, picoCriteria,
inclusionCriteria, exclusionCriteria
)
<EFBFBD>妒 瘚贝<E7989A>蝏𤘪<E89D8F>
API瘚贝<EFBFBD> (7/7<>朞<EFBFBD>)
<EFBFBD>?1. <20>亙熒璉<E78692><E79289>? GET /health
<0A>?2. <20>𥕦遣蝑偦<E89D91>厰★<E58EB0>? POST /api/v1/asl/projects
<0A>?3. <20>瑕<EFBFBD>憿寧𤌍<E5AFA7>𡑒” GET /api/v1/asl/projects
<0A>?4. <20>瑕<EFBFBD>憿寧𤌍霂行<E99C82> GET /api/v1/asl/projects/:id
<0A>?5. 撖澆<E69296><E6BE86><EFBFBD>讃 POST /api/v1/asl/literatures/import
<0A>?6. <20>瑕<EFBFBD><E79195><EFBFBD>讃<EFBFBD>𡑒” GET /api/v1/asl/projects/:id/literatures
<0A>?7. <20>湔鰵憿寧𤌍 PUT /api/v1/asl/projects/:id
瘚贝<EFBFBD><EFBFBD>唳旿
- <EFBFBD>冽<EFBFBD>: asl-test-user-001
- 憿寧𤌍: 1銝?(SGLT2<54>穃<EFBFBD><E7A983><EFBFBD>頂蝏毺遞餈?
- <EFBFBD><EFBFBD>讃: 3蝭?(<28><>鉄PMID<49><44>OI<4F><49><EFBFBD><EFBFBD>羓<EFBFBD>靽⊥<E99DBD>)
<EFBFBD>唳旿摨㯄<EFBFBD>霂?
- <EFBFBD>?銵典<E98AB5>撱箸<E692B1><E7AEB8>?
- <EFBFBD>?蝝W<E89D9D><EFBCB7>𥕦遣<F0A595A6>𣂼<EFBFBD>
- <EFBFBD>?憭㚚睸蝥行<E89DA5>甇<EFBFBD>虜
- <EFBFBD>?<3F>唳旿<E594B3>鍦<EFBFBD>甇<EFBFBD>虜
- <EFBFBD>?<3F>唾<EFBFBD><E594BE>亥砭甇<E7A0AD>虜
<EFBFBD>𣑐 <20><><EFBFBD>舀<EFBFBD>
<EFBFBD>𡒊垢獢<EFBFBD>沲
- <EFBFBD>?Fastify (Web獢<62>沲)
- <EFBFBD>?Prisma (ORM)
- <EFBFBD>?TypeScript (蝐餃<E89D90>蝟餌<E89D9F>)
靘肽<EFBFBD><EFBFBD>?(<28>啣<EFBFBD>)
- <EFBFBD>?
xlsx- Excel<65><6C>辣閫<E8BEA3><E996AB> - <EFBFBD>?
ajv- JSON Schema撉諹<E69289>
撟喳蝱<EFBFBD>滚𦛚<EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?Logger (蝏𤘪<E89D8F><F0A498AA>𡝗𠯫敹?
- <EFBFBD>?Database Connection Pool
- <EFBFBD>?LLMFactory (<28>峕芋<E5B395>𧢲𣈲<F0A7A2B2>?
- <EFBFBD>?StorageFactory (OSS憸<53><E686B8>)
<EFBFBD><EFBFBD> 隞<><E99A9E>蝏蠘恣
| 蝐餃<EFBFBD> | <EFBFBD><EFBFBD>辣<EFBFBD>? | 隞<EFBFBD><EFBFBD>銵峕㺭 |
|---|---|---|
| <EFBFBD>批<EFBFBD><EFBFBD>? | 2 | 483 |
| <EFBFBD>滚𦛚 | 1 | 189 |
| 頝舐眏 | 1 | 47 |
| 蝐餃<EFBFBD>摰帋<EFBFBD> | 1 | 121 |
| Schema | 1 | 108 |
| <EFBFBD>𡁏𧋦 | 3 | 350 |
| <EFBFBD>餉恣 | 9 | ~1300 |
<EFBFBD>綫 霈曇恣鈭桃<E988AD>
1. Schema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>
platform_schema.users <20>? asl_schema.screening_projects
<20>?
asl_schema.literatures
<20>?
asl_schema.screening_results
2. <20>峕芋<E5B395>钅<EFBFBD>霂<EFBFBD><E99C82><EFBFBD>?
Literature <20>?DeepSeek + Qwen (撟嗉<E6929F>)
<20>?
<20>脩<EFBFBD>璉<EFBFBD>瘚?
<20>?
<20>惩<EFBFBD>蝒?<3F>?<3F>芸𢆡<E88AB8>喟<EFBFBD>
<20>匧<EFBFBD>蝒?<3F>?鈭箏極摰⊥瓲
3. 鈭穃<E988AD><E7A983>蠘挽霈?
- <20>删𠶖<E588A0><F0A0B696>PI
- 撟喳蝱<E596B3>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>
- OSS摮睃<E691AE>憸<EFBFBD><E686B8>
- 撘<>郊隞餃𦛚<E9A483><F0A69B9A><EFBFBD>
<EFBFBD><EFBFBD> 閫<><E996AB><EFBFBD><EFBFBD>䔮憸?
1. Prisma撖澆<E69296><E6BE86>躰秤
<EFBFBD>桅<EFBFBD>: getPrisma is not exported
閫<EFBFBD><EFBFBD>: 靽格㺿銝?import { prisma } from '...'
2. 靘肽<E99D98><E882BD><EFBFBD>撩憭?
<EFBFBD>桅<EFBFBD>: Cannot find package 'xlsx'
閫<EFBFBD><EFBFBD>: 摰㕑<E691B0> npm install xlsx ajv
3. 霈方<E99C88><E696B9>桅<EFBFBD>
<EFBFBD>桅<EFBFBD>: API<50><49>閬<EFBFBD>serId雿<64><E99BBF>JWT銝剝𡢿隞? 閫<EFBFBD><EFBFBD>: 瘛餃<E7989B>瘚贝<E7989A>璅∪<E79285>嚗屸<E59A97>霈支蝙<E694AF>冽<EFBFBD>霂閧鍂<E996A7>弒D
4. <20>唳旿摨栞”<E6A09E>滚<EFBFBD>
<EFBFBD>桅<EFBFBD>: prisma db push璉<EFBFBD>瘚见<EFBFBD>public schema<6D>滚<EFBFBD>銵?
閫<EFBFBD><EFBFBD>: <20>𥕦遣<F0A595A6>见𢆡SQL<51>𡁏𧋦嚗<F0A78BA6>蘨<EFBFBD>𥕦遣ASL銵?
<EFBFBD><EFBFBD> <20><>﹝鈭批枂
- <EFBFBD>?
backend/ASL-API-瘚贝<E7989A><E8B49D>亙<EFBFBD>.md - <EFBFBD>?
docs/03-銝𡁜𦛚璅∪<E79285>/ASL-AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃/05-撘<><E69298>𤏸扇敶?2025-11-18-Week1摰峕<E691B0><E5B395>亙<EFBFBD>.md - <EFBFBD>?
scripts/test-asl-api.ts(API瘚贝<E7989A><E8B49D>𡁏𧋦) - <EFBFBD>?
scripts/create-asl-tables.ts(<28>唳旿摨枏<E691A8>撱箄<E692B1><E7AE84>? - <EFBFBD>?
scripts/create-test-user-for-asl.ts(瘚贝<E7989A><E8B49D>冽<EFBFBD><E586BD>𡁏𧋦)
<EFBFBD><EFBFBD> 銝衤<E98A9D>甇亥恣<E4BAA5>?(Week 2)
Day 1-2: 蝑偦<E89D91>劐遙<E58A90>⊥綉<E28AA5>嗅膥
- <EFBFBD>𥕦遣
screeningController.ts - 摰䂿緵
startScreening(<28>臬𢆡蝑偦<E89D91>劐遙<E58A90>? - 摰䂿緵
getProgress(<28>瑕<EFBFBD>餈𥕦漲) - 摰䂿緵
getResults(<28>瑕<EFBFBD>蝏𤘪<E89D8F>) - <EFBFBD><EFBFBD><EFBFBD>撘<EFBFBD>郊隞餃𦛚<EFBFBD>笔<EFBFBD> (JobFactory)
Day 3-4: LLM蝑偦<E89D91>匧<EFBFBD><E58CA7>?
- 瘚贝<EFBFBD><EFBFBD>峕芋<EFBFBD>讠<EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>?
- 隡睃<EFBFBD>Prompt<EFBFBD><EFBFBD><EFBFBD>
- 摰䂿緵<EFBFBD>寥<EFBFBD>蝑偦<EFBFBD>?
- 瘛餃<EFBFBD>餈𥕦漲<EFBFBD>噼<EFBFBD>
Day 5: <20>脩<EFBFBD>摰⊥瓲
- 摰䂿緵
reviewConflictsAPI - <EFBFBD>寥<EFBFBD>摰⊥瓲<EFBFBD>蠘<EFBFBD>
- 摰⊥瓲<EFBFBD><EFBFBD>蟮霈啣<EFBFBD>
<EFBFBD>?撉峕𤣰<E5B395><F0A4A3B0><EFBFBD>
Week 1 <20>格<EFBFBD> (<28>券<EFBFBD>摰峕<E691B0>)
- <EFBFBD>?Prisma Schema霈曇恣摰峕<E691B0>
- <EFBFBD>?4撘䭾㺭<E4ADBE>桀<EFBFBD>銵典<E98AB5>撱?
- <EFBFBD>?<3F>𡒊垢<F0A1928A>桀<EFBFBD>蝏𤘪<E89D8F><F0A498AA>𥕦遣
- <EFBFBD>?10銝服PI蝡舐<E89DA1>摰䂿緵
- <EFBFBD>?API瘚贝<E7989A><E8B49D>券<EFBFBD><E588B8>朞<EFBFBD>
- <EFBFBD>?撟喳蝱<E596B3>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>
韐券<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>?隞<><E99A9E>蝚血<E89D9A>TypeScript閫<74><E996AB>
- <EFBFBD>?雿輻鍂撟喳蝱<E596B3>箇<EFBFBD>霈暹鴌<E69AB9>滚𦛚
- <EFBFBD>?Schema<6D>𠉛氖<F0A0899B>嗆<EFBFBD>
- <EFBFBD>?鈭穃<E988AD><E7A983>蠘挽霈∪<E99C88><E288AA>?
- <EFBFBD>?<3F>躰秤憭<E7A7A4><E686AD>摰<EFBFBD><E691B0>
- <EFBFBD>?<3F>亙<EFBFBD>霈啣<E99C88>摰峕㟲
<EFBFBD><EFBFBD> <20>餌<EFBFBD>
ASL璅∪<EFBFBD>Week 1撘<31><E69298>睲遙<E79DB2>?*<2A>券<EFBFBD>摰峕<E691B0>**嚗峕<E59A97><E5B395>?憭拙<E686AD><E68B99>𣂼<EFBFBD>摰?憭拍<E686AD>撘<EFBFBD><E69298>𤏸恣<F0A48FB8>鉝<EFBFBD>?
<EFBFBD>詨<EFBFBD><EFBFBD>鞉<EFBFBD>:
- <EFBFBD>?摰峕㟲<E5B395><E39FB2>㺭<EFBFBD>桀<EFBFBD>霈曇恣<E69B87>諹”蝏𤘪<E89D8F>
- <EFBFBD>?10銝析ESTful API蝡舐<E89DA1>
- <EFBFBD>?LLM蝑偦<E89D91>㗇<EFBFBD><E39787>⊥<EFBFBD><E28AA5>?
- <EFBFBD>?100%瘚贝<E7989A><E8B49D>朞<EFBFBD><E69C9E>?
- <EFBFBD>?摰<><E691B0><EFBFBD><EFBFBD>誨<EFBFBD><E8AAA8><EFBFBD>獢?
**<2A><><EFBFBD>臭漁<E887AD>?*:
- Schema<EFBFBD>𠉛氖<EFBFBD>嗆<EFBFBD>
- <EFBFBD>峕芋<EFBFBD>钅<EFBFBD>霂<EFBFBD><EFBFBD><EFBFBD>?
- 鈭穃<EFBFBD><EFBFBD>蠘挽霈?
- 璅∪<EFBFBD><EFBFBD>𣇉<EFBFBD><EFBFBD>?
銝箏<EFBFBD>蝏胎LM蝑偦<EFBFBD>匧<EFBFBD><EFBFBD>賢<EFBFBD><EFBFBD>滨垢撘<EFBFBD><EFBFBD>穃<EFBFBD>摰帋<EFBFBD><EFBFBD>𡁜<EFBFBD><EFBFBD><EFBFBD>抅蝖<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>