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%)
13 KiB
<EFBFBD>唳旿摨栞<EFBFBD>蝘餌𠶖<EFBFBD><EFBFBD>秩<EFBFBD>?
*<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗? v1.0
*<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗? 2025-11-23
蝏湔擪<EFBFBD><EFBFBD><EFBFBD> ASL撘<4C><E69298>穃𣪧<E7A983>? *<EFBFBD><EFBFBD>﹝<EFBFBD>桃<EFBFBD>嚗? 霈啣<E99C88>ASL璅∪<E79285><E288AA>唳旿摨栞<E691A8>蝘餌𠶖<E9A48C><F0A0B696><EFBFBD>銝箸𧊋<E7AEB8>亙<EFBFBD><E4BA99>睲犖<E79DB2>䀹<EFBFBD>靘𥟇<E99D98><F0A59F87>啁<EFBFBD>銝𠹺<E98A9D><F0A0B9BA>?
<EFBFBD><EFBFBD> 敶枏<E695B6><E69E8F>唳旿摨梶𠶖<E6A2B6><F0A0B696><EFBFBD>餉<EFBFBD>
<EFBFBD>?ASL璅∪<E79285>嚗Òsl_schema嚗? 摰<><E691B0>甇<EFBFBD>&
| 銵典<EFBFBD> | <EFBFBD>嗆<EFBFBD>? | <EFBFBD>券<EFBFBD>? | 霈啣<EFBFBD><EFBFBD>? |
|---|---|---|---|
literatures |
<EFBFBD>?撌脫凒<E884AB>? | <EFBFBD><EFBFBD>讃<EFBFBD>箇<EFBFBD>靽⊥<EFBFBD>嚗<EFBFBD>鉄<EFBFBD>冽<EFBFBD>摮埈挾嚗? | - |
screening_projects |
<EFBFBD>?甇<>虜 | 蝑偦<EFBFBD>厰★<EFBFBD>? | - |
screening_tasks |
<EFBFBD>?甇<>虜 | <EFBFBD><EFBFBD><EFBFBD><EFBFBD>䁅<EFBFBD><EFBFBD>萘<EFBFBD>隞餃𦛚 | - |
screening_results |
<EFBFBD>?甇<>虜 | <EFBFBD><EFBFBD><EFBFBD><EFBFBD>䁅<EFBFBD><EFBFBD>萘<EFBFBD>蝏𤘪<EFBFBD> | - |
fulltext_screening_tasks |
<EFBFBD>?<3F>啣遣 | <EFBFBD>冽<EFBFBD>憭滨<EFBFBD>隞餃𦛚 | 0 |
fulltext_screening_results |
<EFBFBD>?<3F>啣遣 | <EFBFBD>冽<EFBFBD>憭滨<EFBFBD>蝏𤘪<EFBFBD> | 0 |
<EFBFBD>詨<EFBFBD>蝏栞捏嚗?
- <EFBFBD>?ASL璅∪<E79285><E288AA><EFBFBD><EFBFBD>㗇㺭<E39787>桀<EFBFBD><E6A180>其<EFBFBD>鈭?
asl_schema - <EFBFBD>?瘝⊥<E7989D><E28AA5>唳旿瘜<E697BF><E7989C><EFBFBD>?
publicschema - <EFBFBD>?Schema<6D>𠉛氖蝑𣇉裦<F0A38789>扯<EFBFBD>甇<EFBFBD>&
- <EFBFBD>?隞<><E99A9E>霈輸䔮頝臬<E9A09D>甇<EFBFBD>&嚗Ǒprisma.aslLiterature
,prisma.aslScreeningProject` 蝑㚁<E89D91>
<EFBFBD>𣞁 Public Schema<6D><61>蟮<EFBFBD>㛖<EFBFBD><E39B96>桅<EFBFBD>嚗<EFBFBD><E59A97>ASL<53>惩<EFBFBD>嚗?
<EFBFBD>桅<EFBFBD><EFBFBD>讛膩
<EFBFBD>券★<EFBFBD>格𡟺<EFBFBD>笔<EFBFBD><EFBFBD>睲葉嚗屸<EFBFBD><EFBFBD><EFBFBD>芋<EFBFBD>㛖<EFBFBD>銵刻◤<EFBFBD>躰秤<EFBFBD>啣<EFBFBD>撱箏銁 public schema 銝哨<E98A9D>餈嘥<E9A488>鈭<EFBFBD>chema<6D>𠉛氖蝑𣇉裦嚗?
| <EFBFBD>躰秤銵典<EFBFBD> | 摨𥪜銁Schema | 敶枏<EFBFBD><EFBFBD>嗆<EFBFBD>? |
|---|---|---|
public.users |
platform_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.projects |
aia_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.conversations |
aia_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.messages |
aia_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.knowledge_bases |
pkb_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.documents |
pkb_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.batch_tasks |
pkb_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
public.batch_results |
pkb_schema |
<EFBFBD>𩤃<EFBFBD> <20>滚<EFBFBD>摮睃銁 |
**<2A>唳旿撖寞<E69296>嚗?025-11-23敹怎<E695B9>嚗?*嚗?
platform_schema.users: 3<>∟扇敶?
public.users: 2<>∟扇敶?
aia_schema.projects: 2<>∟扇敶?
public.projects: 2<>∟扇敶?
pkb_schema.knowledge_bases: 2<>∟扇敶?
public.knowledge_bases: 2<>∟扇敶?
敶勗<EFBFBD><EFBFBD><EFBFBD>凒嚗?
- <EFBFBD>叚 **銝滚蔣<E6BB9A><E894A3>SL璅∪<E79285>**嚗㇁SL摰<4C><E691B0><EFBFBD>𠉛氖<F0A0899B>災sl_schema嚗?
- <EFBFBD>𩤃<EFBFBD> 敶勗<E695B6>AIA璅∪<E79285>嚗㇁I<E38781>拇<EFBFBD>嚗?
- <EFBFBD>𩤃<EFBFBD> 敶勗<E695B6>PKB璅∪<E79285>嚗<EFBFBD>䰻霂<E4B0BB><E99C82>嚗?
- <EFBFBD>𩤃<EFBFBD> 敶勗<E695B6>Platform璅∪<E79285>嚗<EFBFBD>鍂<EFBFBD>瑞頂蝏<E9A082><E89D8F>
**韐<>遙敶鍦<E695B6>**嚗?
- <EFBFBD>㩞 ASL<53>a<EFBFBD>嚗𡁏<E59A97>韐<EFBFBD>遙嚗峕㺭<E5B395>桃恣<E6A183><E681A3><EFBFBD><EFBFBD>冽迤蝖?
- <EFBFBD>椬 <20>嗡<EFBFBD>璅∪<E79285><E288AA>a<EFBFBD>嚗𡁻<E59A97><F0A181BB>芾<EFBFBD>皜<EFBFBD><E79A9C>public schema<6D>唳旿
<EFBFBD><EFBFBD>儭?2025-11-23餈<33>宏<EFBFBD>滢<EFBFBD>霈啣<E99C88>
餈<EFBFBD>宏<EFBFBD>格<EFBFBD>
銝箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑𥕦<EFBFBD><EFBFBD>踝<EFBFBD>Day 4撘<34><E69298>𡢅<EFBFBD>瘛餃<E7989B><E9A483>唳旿摨𤘪𣈲<F0A498AA><F0A388B2><EFBFBD>
- 靽格㺿
literatures銵剁<E98AB5>瘛餃<E7989B><E9A483>冽<EFBFBD><E586BD>詨<EFBFBD>摮埈挾嚗? - <EFBFBD>𥕦遣
fulltext_screening_tasks銵? - <EFBFBD>𥕦遣
fulltext_screening_results銵?
餈<EFBFBD>宏蝑𣇉裦<EFBFBD>㗇𥋘
*<EFBFBD>?<3F>寞<EFBFBD>A嚗䥪risma Migrate嚗<65>◤<EFBFBD>垍<EFBFBD>嚗?
npx prisma migrate dev --name add_fulltext_screening
**<2A>垍<EFBFBD><E59E8D>笔<EFBFBD>**嚗?
- Prisma隡𡁜<EFBFBD>霂訫<EFBFBD><EFBFBD>?
publicschema銝剔<E98A9D><E58994>滚<EFBFBD>銵? - <EFBFBD>航<EFBFBD>敶勗<EFBFBD><EFBFBD>嗡<EFBFBD>璅∪<EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>?
- 餈嘥<EFBFBD>"蝞∪末<E288AA>芸楛"<22><><EFBFBD><EFBFBD>?
*<EFBFBD>?<3F>寞<EFBFBD>B嚗𡁏<E59A97><F0A1818F>沒QL<51>𡁏𧋦嚗<F0A78BA6>歇<EFBFBD><E6AD87>鍂嚗?
# <20>𥕦遣<F0A595A6>见𢆡餈<F0A286A1>宏<EFBFBD>𡁏𧋦
backend/prisma/migrations/manual_fulltext_screening.sql
# <20>扯<EFBFBD>餈<EFBFBD>宏嚗<E5AE8F><E59A97><EFBFBD>滢<EFBFBD>asl_schema嚗?
Get-Content manual_fulltext_screening.sql | docker exec -i ai-clinical-postgres psql ...
隡睃飵嚗?
- <EFBFBD>?<3F>芣<EFBFBD>雿?
asl_schema嚗䔶<EFBFBD><EFBFBD>典<EFBFBD>隞騯chema - <EFBFBD>?銝滚<E98A9D><E6BB9A>支遙雿?
public<20>唳旿 - <EFBFBD>?摰匧<E691B0><E58CA7><EFBFBD>虾<EFBFBD>扼<EFBFBD><E689BC>虾摰∟恣
- <EFBFBD>?蝚血<E89D9A>"蝞∪末<E288AA>芸楛"<22>笔<EFBFBD>
餈<EFBFBD>宏<EFBFBD><EFBFBD>捆霂行<EFBFBD>
1. 靽格㺿 literatures 銵?
<EFBFBD>啣<EFBFBD>摮埈挾嚗?3銝迎<E98A9D>嚗?
<EFBFBD><EFBFBD>讃<EFBFBD>笔𦶢<EFBFBD>冽<EFBFBD>:
stage TEXT DEFAULT 'imported'- <20>嗆挾<E59786><E68CBE>扇嚗ǎmported <20>?title_screened <20>?fulltext_pending <20>?fulltext_screened嚗?
PDF蝞∠<EFBFBD>:
has_pdf BOOLEAN DEFAULT false- <20>臬炏<E887AC>侨DFpdf_storage_type TEXT- 摮睃<E691AE>蝐餃<E89D90>嚗èss/dify/local嚗?pdf_storage_ref TEXT- 摮睃<E691AE>撘閧鍂嚗ɑey<65>𦎾D嚗?pdf_status TEXT DEFAULT 'pending'- <20>嗆<EFBFBD><E59786><EFBFBD>pending/extracting/completed/failed嚗?pdf_uploaded_at TIMESTAMP(3)- 銝𠹺<E98A9D><F0A0B9BA>園𡢿
**<2A>冽<EFBFBD>蝞∠<E89D9E>嚗<EFBFBD><E59A97><EFBFBD>毺<EFBFBD>嚗?*:
full_text_storage_type TEXT- 摮睃<E691AE>蝐餃<E89D90>嚗èss/dify嚗?full_text_storage_ref TEXT- 摮睃<E691AE>撘閧鍂full_text_url TEXT- 霈輸䔮URL
**<2A>冽<EFBFBD><E586BD><EFBFBD>㺭<EFBFBD>?*:
full_text_format TEXT- <20>澆<EFBFBD>嚗éarkdown/plaintext嚗?full_text_source TEXT- <20>𣂼<EFBFBD><F0A382BC>孵<EFBFBD>嚗ěougat/pymupdf嚗?full_text_token_count INTEGER- Token<65>圈<EFBFBD>full_text_extracted_at TIMESTAMP(3)- <20>𣂼<EFBFBD><F0A382BC>園𡢿
<EFBFBD>啣<EFBFBD>蝝W<EFBFBD>:
idx_literatures_stageidx_literatures_has_pdfidx_literatures_pdf_status
2. <20>𥕦遣 fulltext_screening_tasks 銵?
隞餃𦛚蝞∠<EFBFBD>銵剁<EFBFBD>摮埈挾<EFBFBD><EFBFBD>𡠺嚗?
- <EFBFBD>箇<EFBFBD>靽⊥<EFBFBD>嚗䫤id
,project_id` - 璅∪<EFBFBD><EFBFBD>滨蔭嚗䫤model_a
,model_b,prompt_version` - 餈𥕦漲頝蠘葵嚗䫤total_count
,processed_count,success_count,failed_count,degraded_count` - <EFBFBD>鞉𧋦蝏蠘恣嚗䫤total_tokens
,total_cost` - <EFBFBD>嗆<EFBFBD><EFBFBD>恣<EFBFBD><EFBFBD><EFBFBD>
status,started_at,completed_at,estimated_end_at - <EFBFBD>躰秤霈啣<EFBFBD>嚗䫤error_message
,error_stack`
蝝W<EFBFBD>:
idx_fulltext_tasks_project_ididx_fulltext_tasks_statusidx_fulltext_tasks_created_at
憭㚚睸蝥行<EFBFBD>:
project_id<20>?screening_projects(id)ON DELETE CASCADE
3. <20>𥕦遣 fulltext_screening_results 銵?
蝏𤘪<EFBFBD>摮睃<EFBFBD>銵剁<EFBFBD>12摮埈挾璅⊥踎嚗㚁<EFBFBD>摮埈挾<EFBFBD><EFBFBD>𡠺嚗?
- <EFBFBD>唾<EFBFBD>靽⊥<EFBFBD>嚗䫤task_id
,project_id,literature_id` - Model A蝏𤘪<E89D8F>嚗䫤model_a_name
,model_a_fields(JSONB),model_a_tokens,model_a_cost` 蝑? - Model B蝏𤘪<E89D8F>嚗䫤model_b_name
,model_b_fields(JSONB),model_b_tokens,model_b_cost` 蝑? - 撉諹<EFBFBD>蝏𤘪<EFBFBD>嚗䫤medical_logic_issues
(JSONB),evidence_chain_issues` (JSONB) - <EFBFBD>脩<EFBFBD>璉<EFBFBD>瘚页<EFBFBD>
is_conflict,conflict_severity,conflict_fields,review_priority - 鈭箏極憭齿瓲嚗䫤final_decision
,final_decision_by,exclusion_reason,review_notes` - 憭<EFBFBD><EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>
processing_status,is_degraded,degraded_model - <EFBFBD>航蕭皞舀<EFBFBD>改<EFBFBD>
raw_output_a(JSONB),raw_output_b(JSONB),prompt_version
蝝W<EFBFBD>:
idx_fulltext_results_task_ididx_fulltext_results_project_ididx_fulltext_results_literature_ididx_fulltext_results_is_conflictidx_fulltext_results_final_decisionidx_fulltext_results_review_priority
<EFBFBD>臭<EFBFBD>蝥行<EFBFBD>:
unique_project_literature_fulltext (project_id, literature_id)
憭㚚睸蝥行<EFBFBD>:
task_id<20>?fulltext_screening_tasks(id)ON DELETE CASCADEproject_id<20>?screening_projects(id)ON DELETE CASCADEliterature_id<20>?literatures(id)ON DELETE CASCADE
餈<EFBFBD>宏蝏𤘪<EFBFBD>撉諹<EFBFBD>
-- 撉諹<E69289>銵典<E98AB5>撱?
\dt asl_schema.*
-- 蝏𤘪<E89D8F>嚗?銝芾”
-- <20>?literatures (撌脫凒<E884AB>?
-- <20>?screening_projects
-- <20>?screening_tasks
-- <20>?screening_results
-- <20>?fulltext_screening_tasks (<28>啣遣)
-- <20>?fulltext_screening_results (<28>啣遣)
-- 撉諹<E69289><E8ABB9>啣<EFBFBD>畾?
\d asl_schema.literatures
-- 蝏𤘪<E89D8F>嚗?
-- <20>?stage
-- <20>?has_pdf
-- <20>?full_text_storage_type
-- <20>?full_text_storage_ref
-- <20>?full_text_url
-- <20>?full_text_format
-- ... 蝑?3銝芣鰵摮埈挾
Prisma Client<6E><74><EFBFBD>:
cd backend
npx prisma generate
# 蝏𤘪<E89D8F>嚗尠<E59A97> <20><><EFBFBD><EFBFBD>𣂼<EFBFBD>
# 隞<><E99A9E><EFBFBD>航挪<E888AA>殷<EFBFBD>
# - prisma.aslLiterature
# - prisma.aslFulltextScreeningTask
# - prisma.aslFulltextScreeningResult
<EFBFBD><EFBFBD> Schema<6D>𠉛氖蝑𣇉裦<F0A38789>扯<EFBFBD><E689AF><EFBFBD><EFBFBD>
霈曇恣<EFBFBD>笔<EFBFBD>嚗<EFBFBD>䔉<EFBFBD>芰頂蝏<EFBFBD>沲<EFBFBD><EFBFBD><EFBFBD>獢<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>芋<EFBFBD>埈㺭<EFBFBD>桅<EFBFBD>餉<EFBFBD><EFBFBD>𠉛氖嚗?
<0A>鎿<EFBFBD><E98EBF><EFBFBD> admin_schema (蝟餌<E89D9F>蝞∠<E89D9E>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> platform_schema (<28>冽<EFBFBD>蝟餌<E89D9F>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> aia_schema (AI<41>拇<EFBFBD>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> asl_schema (AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃) <20>?<3F>扯<EFBFBD>甇<EFBFBD>&
<0A>鎿<EFBFBD><E98EBF><EFBFBD> pkb_schema (<28>亥<EFBFBD>摨?
<0A>鎿<EFBFBD><E98EBF><EFBFBD> rvw_schema (摰⊿<E691B0><E28ABF>譍<EFBFBD>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> st_schema (蝏蠘恣<E8A098><E681A3><EFBFBD>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> dc_schema (<28>唳旿<E594B3><E697BF><EFBFBD>)
<0A>鎿<EFBFBD><E98EBF><EFBFBD> ssa_schema (<28>瑟𧋦<E7919F>誩<EFBFBD><E8AAA9>?
<0A>婙<EFBFBD><E5A999><EFBFBD> common_schema (<28>砍<EFBFBD><E7A08D>唳旿)
ASL璅∪<EFBFBD><EFBFBD>扯<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>?
| 璉<EFBFBD><EFBFBD>仿★ | <EFBFBD>嗆<EFBFBD>? | 霂湔<EFBFBD> |
|---|---|---|
| Schema<EFBFBD>賢<EFBFBD> | <EFBFBD>?甇<>& | asl_schema |
| <EFBFBD><EFBFBD><EFBFBD>㕑”<EFBFBD>賢銁甇<EFBFBD>&Schema | <EFBFBD>?甇<>& | 6銝芾”<EFBFBD>券<EFBFBD><EFBFBD>?asl_schema |
| 瘝⊥<EFBFBD>銵典銁public | <EFBFBD>?甇<>& | <EFBFBD>䭾<EFBFBD>瞍? |
| Prisma Model<65>惩<EFBFBD>甇<EFBFBD>& | <EFBFBD>?甇<>& | @@schema("asl_schema") |
| 隞<EFBFBD><EFBFBD>霈輸䔮頝臬<EFBFBD>甇<EFBFBD>& | <EFBFBD>?甇<>& | prisma.aslXxx |
| 憭㚚睸蝥行<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? | <EFBFBD>?甇<>& | <EFBFBD><EFBFBD><EFBFBD>丽K<EFBFBD><EFBFBD><EFBFBD><EFBFBD>众chema銵? |
**隞<><E99A9E>蝷箔<E89DB7>**嚗<>迤蝖株挪<E6A0AA>格䲮撘𧶏<E69298>嚗?
// <20>?甇<>&嚗𡁻<E59A97>朞<EFBFBD>Prisma Client霈輸䔮asl_schema
const project = await prisma.aslScreeningProject.findUnique({
where: { id: projectId },
});
const literatures = await prisma.aslLiterature.findMany({
where: { projectId },
});
const task = await prisma.aslFulltextScreeningTask.create({
data: { ... },
});
// <20>?<3F>躰秤嚗𡁶凒<F0A181B6>兄QL霈輸䔮public嚗<63><E59A97>隡𡁜<E99AA1><F0A1819C><EFBFBD><EFBFBD><EFBFBD>牐蛹銵其<E98AB5><E585B6>私ublic嚗?
await prisma.$queryRaw`SELECT * FROM public.literatures`;
<EFBFBD>睸 <20>芣䔉餈<E49489>宏蝑𣇉裦
撖嫣<EFBFBD>ASL璅∪<EFBFBD>
<EFBFBD>刻<EFBFBD>蝑𣇉裦嚗𡁶誧蝏凋蝙<EFBFBD>冽<EFBFBD><EFBFBD>沒QL<EFBFBD>𡁏𧋦
**<2A>笔<EFBFBD>**嚗?
- <EFBFBD>?Public schema<6D><61><EFBFBD><EFBFBD>脤<EFBFBD><E884A4>䠷䔮憸条<E686B8><E69DA1><EFBFBD><EFBFBD>瘜閗圾<E99697>?
- <EFBFBD>?<3F>见𢆡<E8A781>𡁏𧋦<F0A1818F>游<EFBFBD><E6B8B8>具<EFBFBD><E585B7>虾<EFBFBD>?
- <EFBFBD>?<3F>踹<EFBFBD><E8B8B9>誩<EFBFBD>敶勗<E695B6><E58B97>嗡<EFBFBD>璅∪<E79285>
- <EFBFBD>?靘蹂<E99D98>隞<EFBFBD><E99A9E>摰⊥䰻<E28AA5><E4B0BB>恣霈?
**<2A>滢<EFBFBD>瘚<EFBFBD><E7989A>**嚗?
# 1. 靽格㺿 Prisma Schema
# backend/prisma/schema.prisma
# 2. 蝻硋<E89DBB><E7A18B>见𢆡SQL<51>𡁏𧋦
# backend/prisma/migrations/manual_xxx.sql
# 3. <20>扯<EFBFBD><E689AF>𡁏𧋦嚗<F0A78BA6>蘨<EFBFBD>滢<EFBFBD>asl_schema嚗?
Get-Content manual_xxx.sql | docker exec -i ai-clinical-postgres psql ...
# 4. 撉諹<E69289>蝏𤘪<E89D8F>
docker exec ai-clinical-postgres psql ... -c "\dt asl_schema.*"
# 5. <20><><EFBFBD>Prisma Client
npx prisma generate
# 6. <20>𣂷漱Git
git add .
git commit -m "feat(asl): add xxx tables for xxx feature"
SQL<EFBFBD>𡁏𧋦璅⊥踎嚗?
-- <20>芣<EFBFBD>雿𦡞sl_schema嚗䔶<E59A97>敶勗<E695B6><E58B97>嗡<EFBFBD>schema
ALTER TABLE asl_schema.xxx ADD COLUMN IF NOT EXISTS ...;
CREATE TABLE IF NOT EXISTS asl_schema.xxx (...);
CREATE INDEX IF NOT EXISTS idx_xxx ON asl_schema.xxx(...);
撖嫣<EFBFBD><EFBFBD>嗡<EFBFBD>璅∪<EFBFBD>
**<2A>桅<EFBFBD><E6A185><EFBFBD><EFBFBD>㕑<EFBFBD>?*嚗𡁜<E59A97>璅∪<E79285>撘<EFBFBD><E69298>穃𣪧<E7A983>?
**撱箄悅<E7AE84>滢<EFBFBD>**嚗<>眏<EFBFBD><E79C8F>芋<EFBFBD>堒𣪧<E5A092>蠘䌊銵<E48C8A><E98AB5>摰𡄯<E691B0>嚗?
- 璉<EFBFBD><EFBFBD>?
publicschema銝剜糓<E5899C>行<EFBFBD><E8A18C>祆芋<E7A586>㛖<EFBFBD>銵? - 撖寞<EFBFBD><EFBFBD>唳旿撌桀<EFBFBD>嚗Ǒpublic` vs 甇<>&schema嚗?
- <EFBFBD>喟<EFBFBD><EFBFBD>臬炏<EFBFBD><EFBFBD>閬<EFBFBD>㺭<EFBFBD>株<EFBFBD>蝘餅<EFBFBD>皜<EFBFBD><EFBFBD>
- <EFBFBD>扯<EFBFBD>皜<EFBFBD><EFBFBD><EFBFBD>滢<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>抵䌊韐<EFBFBD><EFBFBD>
ASL<EFBFBD>a<EFBFBD>蝡见㦤嚗?
- <EFBFBD>㩞 銝滢蜓<E6BBA2>冽<EFBFBD><E586BD><EFBFBD><EFBFBD>隞𡝗芋<F0A19D97>㛖<EFBFBD>public銵?
- <EFBFBD>㩞 銝滚笆<E6BB9A>嗡<EFBFBD>璅∪<E79285><E288AA>唳旿摰匧<E691B0>韐蠘提
- <EFBFBD>㩞 銝𤘪釣鈭箢sl_schema<6D><61>捶<EFBFBD>誩<EFBFBD>蝔喳<E89D94><E596B3>?
<EFBFBD><EFBFBD> <20>唳旿摰峕㟲<E5B395>折<EFBFBD>霂?
ASL璅∪<EFBFBD><EFBFBD>唳旿<EFBFBD>喟頂<EFBFBD>?
asl_schema.screening_projects (憿寧𤌍)
<20>?1:N
asl_schema.literatures (<28><>讃)
<20>?1:1 <20>?1:1
asl_schema.screening_results asl_schema.fulltext_screening_results
(<28><><EFBFBD><EFBFBD>䁅<EFBFBD><E48185>萘<EFBFBD>蝏𤘪<E89D8F>) (<28>冽<EFBFBD>憭滨<E686AD>蝏𤘪<E89D8F>)
<20>?N:1 <20>?N:1
asl_schema.screening_tasks asl_schema.fulltext_screening_tasks
(<28><><EFBFBD><EFBFBD>䁅<EFBFBD><E48185>萘<EFBFBD>隞餃𦛚) (<28>冽<EFBFBD>憭滨<E686AD>隞餃𦛚)
憭㚚睸蝥行<EFBFBD>撉諹<EFBFBD>
-- 撉諹<E69289><E8ABB9><EFBFBD><EFBFBD>匧<EFBFBD><E58CA7>桅<EFBFBD><E6A185><EFBFBD><EFBFBD>asl_schema<6D><61><EFBFBD>
SELECT
tc.constraint_name,
tc.table_name,
kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE tc.constraint_type = 'FOREIGN KEY'
AND tc.table_schema = 'asl_schema'
ORDER BY tc.table_name;
-- 憸<><E686B8>蝏𤘪<E89D8F>嚗?
-- <20>?<3F><><EFBFBD>丽K<E4B8BD>?foreign_table_name <20>賢銁 asl_schema 銝?
-- <20>?瘝⊥<E7989D>頝究chema撘閧鍂
<EFBFBD>㴓 <20>喲睸蝏栞捏
<EFBFBD>?ASL璅∪<E79285>嚗𡁜<E59A97><F0A1819C>典<EFBFBD>摨?
- Schema<EFBFBD>𠉛氖嚗?00%甇<>&嚗峕<E59A97><E5B395>㕑”<E39591>賢銁
asl_schema - **<2A>唳旿蝞∠<E89D9E>**嚗𡁏<E59A97><F0A1818F>唳旿瘜<E697BF><E7989C><EFBFBD>?
public - **隞<><E99A9E>閫<EFBFBD><E996AB>**嚗𡁏<E59A97><F0A1818F>㕑挪<E39591>株楝敺<E6A59D>迤蝖?
- 餈<EFBFBD>宏蝑𣇉裦嚗𡁏<EFBFBD><EFBFBD>沒QL<EFBFBD>𡁏𧋦嚗<EFBFBD><EFBFBD><EFBFBD>典虾<EFBFBD>?
<EFBFBD>𩤃<EFBFBD> 蝟餌<E89D9F>蝥折䔮憸矋<E686B8>Public Schema瘙⊥<E79899>
- <EFBFBD>桅<EFBFBD><EFBFBD>扯捶嚗𡁜<EFBFBD><EFBFBD>脤<EFBFBD><EFBFBD>辷<EFBFBD>銝垾SL<EFBFBD>惩<EFBFBD>
- 敶勗<EFBFBD><EFBFBD><EFBFBD>凒嚗鋫IA<EFBFBD><EFBFBD>KB<EFBFBD><EFBFBD>latform璅∪<EFBFBD>
- 閫<EFBFBD><EFBFBD>韐<EFBFBD>遙嚗𡁜<EFBFBD>璅∪<EFBFBD><EFBFBD>a<EFBFBD><EFBFBD>芾<EFBFBD>憭<EFBFBD><EFBFBD>
- ASL蝑𣇉裦嚗帋<EFBFBD><EFBFBD>私ublic嚗𣬚恣憟質䌊撌?
<EFBFBD><EFBFBD> 撘<><E69298>睲犖<E79DB2>䀹<EFBFBD><E480B9>?
**憒<><E68692>雿䭾糓ASL璅∪<E79285>撘<EFBFBD><E69298>𤏸<EFBFBD>?*嚗?
- <EFBFBD>?蝏抒賒靽脲<E99DBD>敶枏<E695B6><E69E8F><EFBFBD>chema<6D>𠉛氖摰噼殿
- <EFBFBD>?雿輻鍂<E8BCBB>见𢆡SQL<51>𡁏𧋦餈𥡝<E9A488><F0A5A19D>唳旿摨栞<E691A8>蝘?
- <EFBFBD>?<3F><><EFBFBD>㕑”<E39591>賢<EFBFBD>撱箏銁
asl_schema - <EFBFBD>?銝滩<E98A9D>撠肽<E692A0>皜<EFBFBD><E79A9C>
publicschema
**憒<><E68692>雿䭾糓<E4ADBE>嗡<EFBFBD>璅∪<E79285>撘<EFBFBD><E69298>𤏸<EFBFBD>?*嚗?
- <EFBFBD>椬 璉<><E79289>亥䌊撌望芋<E69C9B>㛖<EFBFBD>Schema<6D>𠉛氖<F0A0899B>嗅<EFBFBD>
- <EFBFBD>椬 <20>喳<EFBFBD><E596B3>臬炏<E887AC><E7828F>閬<EFBFBD><E996AC><EFBFBD>?
public銝剔<E98A9D><E58994>滚<EFBFBD>銵? - <EFBFBD>椬 <20><><EFBFBD><EFBFBD>SL<53><4C><EFBFBD>蝘餌<E89D98><E9A48C>伐<EFBFBD><E4BC90>见𢆡SQL嚗?
- <EFBFBD>椬 銝滩<E98A9D>靘肽<E99D98>ASL<53>a<EFBFBD>皜<EFBFBD><E79A9C>public
<EFBFBD><EFBFBD> <20>詨<EFBFBD><E8A9A8><EFBFBD>﹝
- [蝟餌<E89D9F><E9A48C>颱<EFBFBD>霈曇恣 - <20>唳旿摨𤘪沲<F0A498AA><E6B2B2>秩<EFBFBD>筕(../../../../00-蝟餌<E89D9F><E9A48C>颱<EFBFBD>霈曇恣/03-<2D>唳旿摨𤘪沲<F0A498AA><E6B2B2>秩<EFBFBD>?md)
- [ASL璅∪<E79285> - <20>唳旿摨栞挽霈((../../02-<2D><><EFBFBD>航挽霈?01-<2D>唳旿摨栞挽霈?md)
- [鈭穃<E988AD><E7A983>笔<EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8><EFBFBD>(../../../../04-撘<><E69298>𤏸<EFBFBD><F0A48FB8>?08-鈭穃<E988AD><E7A983>笔<EFBFBD><E7AC94>𤏸<EFBFBD><F0A48FB8>?md)
- [Day 2-3撘<33><E69298>𤏸扇敶騟(./2025-11-22_Day2-Day3_LLM<4C>滚𦛚銝𡡞<E98A9D>霂<EFBFBD>頂蝏笔<E89D8F><E7AC94>?md)
<EFBFBD><EFBFBD>﹝蝏湔擪嚗?
- <EFBFBD>唳旿摨梶<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>湔𧒄<EFBFBD>湔鰵
- <EFBFBD>𤑳緵<EFBFBD>圈䔮憸䀹𧒄霈啣<EFBFBD>
- 摰𡁏<EFBFBD>摰⊥䰻Schema<EFBFBD>𠉛氖<EFBFBD>嗅<EFBFBD>
**<2A><><EFBFBD>擧凒<E693A7>?*嚗?025-11-23
**<2A>湔鰵鈭?*嚗鋫SL撘<4C><E69298>穃𣪧<E7A983>?
銝𧢲活摰⊥䰻嚗帋<EFBFBD>甈⊥㺭<EFBFBD>桀<EFBFBD>餈<EFBFBD>宏<EFBFBD>?