Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/05-开发记录/2025-11-23_Day4_数据库设计与批处理服务开发.md
HaHafeng 1b53ab9d52 feat(aia): Complete AIA V2.0 with universal streaming capabilities
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%)
2026-01-14 19:15:01 +08:00

17 KiB
Raw Blame History

Day 4寮€鍙戣<E98D99>褰曪細鏁版嵁搴撹<E690B4>笌鎵瑰<E98EB5>鐞嗘湇鍔″紑鍙?

鏃ユ湡锛?025-11-23
**寮€鍙戣€?*锛欰SL寮€鍙戝洟闃? **闃舵<E99783>**锛氬叏鏂囧<E98F82>绛汳VP - Day 4
**鐘舵€?*锛氣渽 宸插畬鎴?


馃搵 寮€鍙戠洰鏍?

Day 4涓婂崍锛氬畬鎴愭暟鎹<EFBFBD>簱璁捐<EFBFBD>涓庤縼绉? Day 4涓嬪崍锛氬紑鍙戞壒澶勭悊鏈嶅姟锛團ulltextScreeningService锛?


鉁?Day 4涓婂崍锛氭暟鎹<E69A9F>簱璁捐<E79281>涓庤縼绉?

1. Schema璁捐<E79281>

1.1 淇<>敼 AslLiterature 琛?

鏂板<EFBFBD>13涓<EFBFBD>叏鏂囧<EFBFBD>绛涚浉鍏冲瓧娈碉細

鏂囩尞鐢熷懡鍛ㄦ湡锛?

  • stage - 闃舵<E99783>鏍囪<E98F8D>锛坕mported/title_screened/fulltext_pending/fulltext_screened锛?

PDF绠锛?

  • has_pdf - 鏄<>惁鏈塒DF
  • pdf_storage_type - 瀛樺偍绫诲瀷锛坥ss/dify/local锛?
  • pdf_storage_ref - 瀛樺偍寮曠敤
  • pdf_status - 鐘舵€侊紙pending/extracting/completed/failed锛?
  • pdf_uploaded_at - 涓婁紶鏃堕棿

**鍏ㄦ枃绠$悊锛堜簯鍘熺敓锛?*锛?

  • full_text_storage_type - 瀛樺偍绫诲瀷锛坥ss/dify锛?
  • full_text_storage_ref - 瀛樺偍寮曠敤
  • full_text_url - 璁块棶URL

**鍏ㄦ枃鍏冩暟鎹?*锛?

  • full_text_format - 鏍煎紡锛坢arkdown/plaintext锛?
  • full_text_source - 鎻愬彇鏂瑰紡锛坣ougat/pymupdf锛?
  • full_text_token_count - Token鏁伴噺
  • full_text_extracted_at - 鎻愬彇鏃堕棿

璁捐<EFBFBD><EFBFBD>锛?

  • 鉁?**浜戝師鐢熸灦鏋?*锛氬叏鏂囧瓨鍌ㄥ湪OSS/Dify锛屾暟鎹<E69A9F>簱鍙<E7B0B1>瓨寮曠敤
  • 鉁?绗﹀悎瑙勮寖锛氶伒寰<EFBFBD>€婁簯鍘熺敓寮€鍙戣<EFBFBD>鑼冦€嬶紝涓嶅湪鏁版嵁搴撳瓨鍌ㄥぇ鏂囨湰
  • 鉁?**鍙<>墿灞曟€?*锛氭敮鎸佸<E98EB8>绉嶅瓨鍌ㄦ柟寮忕殑閫傞厤鍣ㄦā寮?

1.2 鏂板缓 AslFulltextScreeningTask 琛?

浠诲姟绠悊琛<EFBFBD>紝瀛楁<EFBFBD>鍖呮嫭锛?

  • 鍩虹<EFBFBD>淇℃伅锛歚id, project_id`
  • 妯″瀷閰嶇疆锛歚model_a, model_b, prompt_version`
  • 杩涘害璺熻釜锛歚total_count, processed_count, success_count, failed_count, degraded_count`
  • 鎴愭湰缁熻<EFBFBD>锛歚total_tokens, total_cost`
  • 鐘舵€佺<EFBFBD>鐞嗭細status, started_at, completed_at, estimated_end_at
  • 閿欒<EFBFBD>璁板綍锛歚error_message, error_stack`

璁捐<EFBFBD><EFBFBD>锛?

  • 鉁?瀹炴椂杩涘害锛氭敮鎸佸墠绔<EFBFBD>疆璇<EFBFBD>换鍔¤繘搴?
  • 鉁?鎴愭湰璺熻釜锛氱疮璁<EFBFBD>oken鍜岃垂鐢?
  • 鉁?棰勪及鏃堕棿锛氬姩鎬佽<EFBFBD>绠楀墿浣欐椂闂?

1.3 鏂板缓 AslFulltextScreeningResult 琛?

缁撴灉瀛樺偍琛<EFBFBD>紙12瀛楁<EFBFBD>妯℃澘锛夛紝瀛楁<EFBFBD>鍖呮嫭锛?

  • **鍙屾ā鍨嬬粨鏋?*锛歁odel A (DeepSeek-V3) 鍜?Model B (Qwen-Max) 鐨勫畬鏁磋緭鍑?
  • 楠岃瘉缁撴灉锛氬尰瀛﹂€昏緫楠岃瘉銆佽瘉鎹<EFBFBD>摼楠岃瘉
  • **鍐茬獊妫€娴?*锛氬瓧娈电骇鍐茬獊瀵规瘮銆佷紭鍏堢骇鎺掑簭
  • 浜哄伐澶嶆牳锛氭渶缁堝喅绛栥€佹帓闄ゅ師鍥犮€佸<EFBFBD>鏍哥瑪璁?
  • **鍙<>拷婧<E68BB7>€?*锛氬師濮嬭緭鍑恒€丳rompt鐗堟湰銆佸<E98A86>鐞嗘椂闂?

璁捐<EFBFBD><EFBFBD>锛?

  • 鉁?JSONB瀛樺偍锛?2瀛楁<E7809B>鐏垫椿瀛樺偍锛屾敮鎸侀珮鏁堟煡璇?
  • 鉁?**鍙屾ā鍨嬪<E98DA8>姣?*锛氬畬鏁翠繚瀛樹袱涓<E8A2B1>ā鍨嬬殑杈撳嚭
  • 鉁?**鍐茬獊浼樺厛绾?*锛氳嚜鍔ㄨ<E98D94>绠梤eview_priority锛?-100锛?
  • 鉁?**鍙<><E98D99>璁?*锛氫繚鐣檙aw_output锛屽彲杩芥函LLM鍘熷<E98D98>鍝嶅簲

2. 杩佺Щ绛栫暐

2.1 闂<><E99782>璇嗗埆

鍦ㄨ縼绉昏繃绋嬩腑鍙戠幇锛?

  • 鈿狅笍 鍘嗗彶閬楃暀闂<E69A80><E99782>锛氶儴鍒嗘ā鍧楃殑琛ㄥ垱寤哄湪 public schema
  • 鉁?ASL妯″潡鏁版嵁瀹屽叏姝锛氭墍鏈夎〃閮藉湪 asl_schema
  • 鈿狅笍 Prisma Migrate浼氬皾璇曞垹闄?public<>殑閲嶅<E996B2>琛?

2.2 瑙喅鏂规<E98F82>锛氭墜鍔⊿QL杩佺Щ

绛栫暐锛氫娇鐢ㄦ墜鍔⊿QL鑴氭湰锛屽彧鎿嶄綔 asl_schema锛屼笉褰卞搷鍏朵粬妯″潡

-- 鍙<>搷浣渁sl_schema锛屼笉褰卞搷鍏朵粬schema
ALTER TABLE asl_schema.literatures ADD COLUMN IF NOT EXISTS ...;
CREATE TABLE IF NOT EXISTS asl_schema.fulltext_screening_tasks (...);
CREATE TABLE IF NOT EXISTS asl_schema.fulltext_screening_results (...);

**鎵ц<E98EB5>**锛?

Get-Content manual_fulltext_screening.sql | docker exec -i ai-clinical-postgres psql ...

楠岃瘉锛?

\dt asl_schema.*
-- 缁撴灉锛?涓<>-- 鉁?literatures (宸叉洿鏂?
-- 鉁?screening_projects
-- 鉁?screening_tasks
-- 鉁?screening_results
-- 鉁?fulltext_screening_tasks (鏂板缓)
-- 鉁?fulltext_screening_results (鏂板缓)

2.3 Schema闅旂<E99785>楠岃瘉

**妫€鏌ョ粨鏋?*锛?

  • 鉁?ASL妯″潡鎵€鏈?涓<>〃閮藉湪 asl_schema
  • 鉁?鏃犳暟鎹<E69A9F>硠婕忓埌 public schema
  • 鉁?澶栭敭绾︽潫鍏ㄩ儴鎸囧悜 asl_schema 鍐呴儴
  • 鉁?Prisma Model姝鏄犲皠锛坄@@schema("asl_schema")`锛?

**鐩稿叧鏂囨。**锛?

  • [鏁版嵁搴撹縼绉荤姸鎬佽<E98EAC>鏄嶿(./2025-11-23_鏁版嵁搴撹縼绉荤姸鎬佽<E98EAC>鏄?md)
  • [鏁版嵁搴撹<E690B4>璁℃枃妗<E69E83>(../02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md)

3. 浜у嚭

  • 鉁?Prisma Schema鏇存柊锛?涓<>ā鍨嬶級
  • 鉁?鎵嬪姩SQL杩佺Щ鑴氭湰锛?41琛岋級
  • 鉁?鏁版嵁搴撹縼绉荤姸鎬佽<E98EAC>鏄庢枃妗紙435琛岋級
  • 鉁?鏁版嵁搴撹<E690B4>璁℃枃妗洿鏂帮紙v3.0锛?
  • 鉁?妯″潡鐘舵€佹枃妗洿鏂帮紙v1.2锛?

鉁?Day 4涓嬪崍锛氭壒澶勭悊鏈嶅姟寮€鍙?

1. 鏍稿績鏈嶅姟锛欶ulltextScreeningService

1.1 鏈嶅姟鑱岃矗

鑱岃矗 璇存槑
浠诲姟璋冨害 鎵归噺澶勭悊鏂囩尞锛屽苟鍙戞帶鍒?
鏈嶅姟闆嗘垚 璋冪敤LLM鏈嶅姟銆侀獙璇佸櫒銆佸啿绐佹<EFBFBD>娴?
杩涘害璺熻釜 瀹炴椂鏇存柊浠诲姟杩涘害锛岃<EFBFBD>绠楅<EFBFBD>浼版椂闂?
瀹归敊澶勭悊 閲嶈瘯鏈哄埗銆侀檷绾фā寮忋€侀敊璇<EFBFBD><EFBFBD>褰?
*鏁版嵁鎸佷箙鍖? 淇濆瓨澶勭悊缁撴灉鍒版暟鎹<EFBFBD>

1.2 鏍稿績鏂规硶

1. createAndProcessTask() - 浠诲姟鍒涘缓鍏ュ彛

async createAndProcessTask(
  projectId: string,
  literatureIds: string[],
  config: FulltextScreeningConfig
): Promise<string>

鍔熻兘锛?

  • 楠岃瘉椤圭洰鍜屾枃鐚<EFBFBD>暟鎹?
  • 鍒涘缓浠诲姟璁板綍
  • <EFBFBD>姩鍚庡彴澶勭悊锛堜笉绛夊緟瀹屾垚锛?
  • 杩斿洖浠诲姟ID

2. processTaskInBackground() - 鍚庡彴鎵瑰<E98EB5>鐞嗛€昏緫

private async processTaskInBackground(
  taskId: string,
  literatures: any[],
  project: any,
  config: FulltextScreeningConfig
): Promise<void>

鍔熻兘锛?

  • 鏇存柊浠诲姟鐘舵€佷负"杩愯<E69DA9>涓?
  • 鏋勫缓PICOS涓婁笅鏂?
  • 浣跨敤 p-queue 瀹炵幇骞跺彂鎺у埗锛堥粯璁ゅ苟鍙?锛?
  • 璋冪敤 screenLiteratureWithRetry() 澶勭悊姣忕瘒鏂囩尞
  • <EFBFBD><EFBFBD>缁熻<EFBFBD>锛坰uccess/failed/degraded/tokens/cost锛?
  • 鏍囪<EFBFBD>浠诲姟瀹屾垚

*3. screenLiteratureWithRetry() - 鍗曠瘒澶勭悊锛堝甫閲嶈瘯锛?

private async screenLiteratureWithRetry(
  taskId: string,
  projectId: string,
  literature: any,
  picosContext: any,
  config: FulltextScreeningConfig
): Promise<SingleLiteratureResult>

鍔熻兘锛?

  • 鏈€澶氶噸璇?娆★紙鍙<E7B499>厤缃<E58EA4>
  • 鎸囨暟閫€閬跨瓥鐣ワ紙1s, 2s锛?
  • 鎹曡幏骞惰<EFBFBD>褰曢敊璇?

4. screenLiterature() - 鍗曠瘒澶勭悊鏍稿績閫昏緫

private async screenLiterature(
  taskId: string,
  projectId: string,
  literature: any,
  picosContext: any,
  config: FulltextScreeningConfig
): Promise<SingleLiteratureResult>

鍔熻兘锛?

  1. 鑾峰彇鍏ㄦ枃鍐呭<EFBFBD>锛堟敮鎸佹祴璇曟ā寮忥細璺宠繃PDF鎻愬彇锛?
  2. 璋冪敤 LLM12FieldsService.processDualModels()锛堝弻妯″瀷骞惰<EFBFBD>锛?
  3. 鍖诲<EFBFBD>閫昏緫楠岃瘉锛坄MedicalLogicValidator`锛?
  4. 璇佹嵁閾鹃獙璇侊紙EvidenceChainValidator锛?
  5. 鍐茬獊妫€娴嬶紙ConflictDetectionService锛?
  6. 淇濆瓨缁撴灉鍒版暟鎹<EFBFBD>簱锛坄fulltext_screening_results`琛<>
  7. 杩斿洖澶勭悊缁撴灉锛坱okens銆乧ost銆乮sDegraded锛?

5. updateTaskProgress() - 杩涘害鏇存柊

private async updateTaskProgress(
  taskId: string,
  progress: { ... }
): Promise<void>

鍔熻兘锛?

  • 璁$畻骞冲潎澶勭悊鏃堕棿
  • 棰勪及鍓╀綑鏃堕棿锛坋stimatedEndAt锛?
  • 鏇存柊鏁版嵁搴擄紙processed/success/failed/degraded/tokens/cost锛?

6. completeTask() - 浠诲姟瀹屾垚

private async completeTask(
  taskId: string,
  summary: { ... }
): Promise<void>

鍔熻兘锛?

  • 鏍囪<EFBFBD>浠诲姟鐘舵€侊紙completed/failed锛?
  • 鏇存柊鏈€缁堢粺璁?
  • 璁板綍瀹屾垚鏃堕棿

1.3 鏌ヨ<E98F8C>鎺ュ彛

getTaskProgress() - 鏌ヨ<E98F8C>浠诲姟杩涘害

async getTaskProgress(taskId: string): Promise<ScreeningProgress | null>

杩斿洖锛?

  • 浠诲姟鐘舵€侊紙pending/running/completed/failed锛?
  • 杩涘害缁熻<EFBFBD>锛坧rocessed/success/failed/degraded锛?
  • 鎴愭湰缁熻<EFBFBD>锛坱otalTokens/totalCost锛?
  • 鏃堕棿淇℃伅锛坰tarted/completed/estimatedEnd锛?

getTaskResults() - 鏌ヨ<E98F8C>浠诲姟缁撴灉

async getTaskResults(
  taskId: string,
  filter?: { conflictOnly, page, pageSize }
): Promise<{ results, total }>

鍔熻兘锛?

  • <EFBFBD>寔杩囨护锛堜粎鍐茬獊椤癸級
  • 鍒嗛〉鏌ヨ<EFBFBD>
  • 鎸変紭鍏堢骇鎺掑簭锛堝啿绐佷紭鍏堛€乺eview_priority闄嶅簭锛?

updateReviewDecision() - 鏇存柊浜哄伐澶嶆牳鍐崇瓥

async updateReviewDecision(
  resultId: string,
  decision: { finalDecision, finalDecisionBy, ... }
): Promise<void>

鍔熻兘锛?

  • 鏇存柊鏈€缁堝喅绛栵紙include/exclude锛?
  • 璁板綍澶嶆牳浜哄拰鏃堕棿
  • 璁板綍鎺掗櫎鍘熷洜鍜岀瑪璁?

2. 鎶€鏈<E282AC>寒鐐?

2.1 骞跺彂鎺у埗

浣跨敤 p-queue 瀹炵幇浼橀泤鐨勫苟鍙戞帶鍒讹細

const queue = new PQueue({ concurrency: 3 });

const tasks = literatures.map((literature, index) =>
  queue.add(async () => {
    // 澶勭悊鍗曠瘒鏂囩尞
  })
);

await Promise.all(tasks);

浼樺娍锛?

  • 鉁?鑷<>姩鎺掗槦锛岄伩鍏嶅悓鏃跺彂璧疯繃澶歀LM璇锋眰
  • 鉁?鎺у埗API璋冪敤棰戠巼锛岄槻姝㈣Е鍙戦檺娴?
  • 鉁?鍏呭垎鍒╃敤骞跺彂锛屾彁閫?鍊嶏紙涓茶<E6B693>鈫?骞跺彂锛?

2.2 瀹归敊鏈哄埗

**3灞傚<E7819E>閿?*锛?

  1. **Retry灞?*锛氬崟绡囨枃鐚<E69E83>け璐ヨ嚜鍔ㄩ噸璇曪紙鏈€澶?娆★級
  2. **Degraded灞?*锛歀LM12FieldsService鏀<65>寔闄嶇骇妯″紡锛堝崟妯″瀷鎴愬姛鍗冲彲锛?
  3. **Continue灞?*锛氬崟绡囧け璐ヤ笉褰卞搷鏁翠綋锛岀户缁<E688B7><E7BC81>鐞嗗叾浠栨枃鐚?

鏁堟灉锛?

  • 鉁?闄嶄綆澶辫触鐜?
  • 鉁?鎻愰珮浠诲姟瀹屾垚鐜?
  • 鉁?瀹屾暣璁板綍澶辫触鍘熷洜

2.3 娴嬭瘯妯″紡

<EFBFBD>skipExtraction: true 娴嬭瘯妯″紡锛?

if (config.skipExtraction) {
  // 浣跨敤鏍囬<E98F8D>+鎽樿<E98EBD>浣滀负鍏ㄦ枃
  fullText = `# ${literature.title}\n\n## Abstract\n${literature.abstract}`;
  fullTextFormat = 'markdown';
  fullTextSource = 'test';
}

浼樺娍锛?

  • 鉁?蹇<>€熼獙璇佹湇鍔¢€昏緫
  • 鉁?鏃犻渶鐪熷疄PDF鏂囦欢
  • 鉁?鑺傜渷娴嬭瘯鎴愭湰

2.4 瀹炴椂杩涘害璺熻釜

鍔ㄦ€佽<EFBFBD>绠楅<EFBFBD>浼板墿浣欐椂闂达細

const avgTimePerItem = elapsed / processedCount;
const remainingItems = totalCount - processedCount;
const estimatedRemainingTime = avgTimePerItem * remainingItems;

鐢ㄦ埛浣撻獙锛?

  • 鉁?鍓嶇<E98D93><EFBFBD>疆璇㈡樉绀鸿繘搴?
  • 鉁?鏄剧ず棰勪及瀹屾垚鏃堕棿
  • 鉁?瀹炴椂鏄剧ず鎴愭湰缁熻<E7BC81>

3. 闆嗘垚娴嬭瘯

鍒涘缓浜嗗畬鏁寸殑闆嗘垚娴嬭瘯鑴氭湰锛?

娴嬭瘯鍦烘櫙锛?

  1. 鉁?鍑嗗<E98D91>娴嬭瘯鏁版嵁锛堟煡鎵鹃」鐩<E3808D>拰鏂囩尞锛?
  2. 鉁?鍒涘缓骞跺<E9AA9E>鐞嗕换鍔★紙娴嬭瘯妯″紡锛?绡囨枃鐚<E69E83>紝2骞跺彂锛?
  3. 鉁?杞<><E69D9E>浠诲姟杩涘害锛堟瘡5绉掞級
  4. 鉁?鏌ヨ<E98F8C>浠诲姟缁撴灉锛堝垎椤碉紝鎺掑簭锛?
  5. 鉁?鏇存柊浜哄伐澶嶆牳鍐崇瓥

娴嬭瘯鏂囦欢锛?

  • service-integration-test.ts (绾?00琛?

杩愯<EFBFBD>鏂瑰紡锛?

cd backend
npx ts-node src/modules/asl/fulltext-screening/services/__tests__/service-integration-test.ts

4. 浜у嚭

浠g爜锛?

  • 鉁?FulltextScreeningService.ts (绾?00琛?
  • 鉁?闆嗘垚娴嬭瘯鑴氭湰 (绾?00琛?
  • 鉁?TypeScript绫诲瀷瀹氫箟瀹屾暣
  • 鉁?浠g爜娉ㄩ噴璇︾粏

渚濊禆锛?

  • 鉁?瀹夎<E780B9> p-queue 搴?

璐ㄩ噺锛?

  • 鉁?鏃燣inter閿欒<E996BF>
  • 鉁?瀹屾暣鐨勯敊璇<E6958A><E79287>鐞?
  • 鉁?璇︾粏鐨勬棩蹇楄<E8B987>褰?

馃搳 Day 4 鎬讳綋缁熻<E7BC81>

鏃堕棿鍒嗛厤

闃舵<EFBFBD> 浠诲姟 鑰楁椂 鐘舵€?
涓婂崍 鏁版嵁搴撹<EFBFBD>璁? 1h 鉁?
Schema璁捐<EFBFBD>锛?涓<>ā鍨嬶級 30min 鉁?
鎵嬪姩SQL杩佺Щ 20min 鉁?
Schema闅旂<EFBFBD>楠岃瘉 10min 鉁?
鏂囨。缂栧啓锛堣縼绉荤姸鎬佽<EFBFBD>鏄庯級 30min 鉁?
鏂囨。鏇存柊锛堣<EFBFBD>璁℃枃妗€佺姸鎬佹枃妗 20min 鉁?
涓嬪崍 鎵瑰<EFBFBD>鐞嗘湇鍔″紑鍙? 2h 鉁?
鏈嶅姟鏍稿績閫昏緫 1h 鉁?
闆嗘垚娴嬭瘯鑴氭湰 30min 鉁?
浠g爜瀹℃煡涓庝紭鍖? 30min 鉁?
鍚堣<EFBFBD> 3h 鉁?

浠g爜浜у嚭

绫诲埆 鏂囦欢 琛屾暟 璇存槑
鏍稿績鏈嶅姟 FulltextScreeningService.ts ~700 鎵瑰<EFBFBD>鐞嗘湇鍔?
娴嬭瘯 service-integration-test.ts ~200 闆嗘垚娴嬭瘯
*鏁版嵁搴? manual_fulltext_screening.sql 141 杩佺Щ鑴氭湰
鏂囨。 鏁版嵁搴撹縼绉荤姸鎬佽<EFBFBD>鏄? 435 璇︾粏璁板綍
鏂囨。 Day 4寮€鍙戣<E98D99>褰? ~800 <EFBFBD>枃妗?
鍚堣<EFBFBD> ~2,276

鍔熻兘瀹屾垚搴?

鍔熻兘妯″潡 瀹屾垚搴? 璇存槑
鏁版嵁搴撹<EFBFBD>璁? 100% 鉁? 3涓<EFBFBD>〃锛?3涓<33>柊瀛楁<E7809B>
鏁版嵁搴撹縼绉? 100% 鉁? 鎵嬪姩SQL锛屽畨鍏ㄦ墽琛?
浠诲姟鍒涘缓涓庤皟搴? 100% 鉁? <EFBFBD>寔骞跺彂鎺у
鍗曠瘒鏂囩尞澶勭悊 100% 鉁? 闆嗘垚鎵€鏈夐獙璇佸櫒
杩涘害璺熻釜 100% 鉁? 瀹炴椂鏇存柊锛岄<EFBFBD>浼版椂闂?
瀹归敊澶勭悊 100% 鉁? 閲嶈瘯銆侀檷绾с€佺户缁?
鏌ヨ<EFBFBD>鎺ュ彛 100% 鉁? 杩涘害銆佺粨鏋溿€佸喅绛?
闆嗘垚娴嬭瘯 100% 鉁? <EFBFBD>埌绔<EFBFBD>祴璇曡剼鏈?

馃幆 鍏抽敭鍐崇瓥

1. 浜戝師鐢熷瓨鍌ㄦ柟妗?鉁?

鍐崇瓥锛氬叏鏂囧唴瀹瑰瓨鍌ㄥ湪OSS/Dify锛屾暟鎹<E69A9F>簱鍙<E7B0B1>瓨寮曠敤

鐞嗙敱锛?

  • 绗﹀悎銆婁簯鍘熺敓寮€鍙戣<EFBFBD>鑼冦€?
  • 閬垮厤鏁版嵁搴撹啫鑳€
  • <EFBFBD>寔澶ц<EFBFBD>妯℃墿灞?

瀹炵幇锛?

  • full_text_storage_type - 瀛樺偍绫诲瀷锛坥ss/dify锛?
  • full_text_storage_ref - 瀛樺偍寮曠敤锛坘ey鎴朓D锛?
  • full_text_url - 璁块棶URL

2. 鎵嬪姩SQL杩佺Щ绛栫暐 鉁?

鍐崇瓥锛氫笉浣跨敤 prisma migrate锛岃€屾槸鎵嬪姩缂栧啓SQL鑴氭湰

鐞嗙敱锛?

  • Prisma Migrate浼氬皾璇曞垹闄?public schema涓<61>殑閲嶅<E996B2>琛?
  • <EFBFBD>兘褰卞搷鍏朵粬妯″潡锛圓IA銆丳KB銆丳latform锛?
  • 鎵嬪姩SQL鏇村畨鍏ㄣ€佸彲鎺с€佸彲瀹¤<EFBFBD>

鍘熷垯锛?

  • "绠″ソ鑷<E382BD>繁"锛氬彧鎿嶄綔 asl_schema
  • 涓嶅姩 public schema锛屼笉褰卞搷鍏朵粬妯″潡

3. 娴嬭瘯妯″紡璁捐<E79281> 鉁?

鍐崇瓥锛氭敮鎸?skipExtraction: true 娴嬭瘯妯″紡

鐞嗙敱锛?

  • <EFBFBD>€熼獙璇佹湇鍔¢€昏緫
  • 鏃犻渶鍑嗗<EFBFBD>鐪熷疄PDF鏂囦欢
  • 鑺傜渷娴嬭瘯鎴愭湰鍜屾椂闂?

瀹炵幇锛?

if (config.skipExtraction) {
  fullText = `# ${title}\n\n## Abstract\n${abstract}`;
}

4. 骞跺彂鎺у埗绛栫暐 鉁?

鍐崇瓥锛氫娇鐢?p-queue锛岄粯璁ゅ苟鍙?

鐞嗙敱锛?

  • 鎻愰€?鍊嶏紙鐩告瘮涓茶<E6B693>澶勭悊锛?
  • 閬垮厤瑙﹀彂API闄愭祦
  • <EFBFBD>姩鎺掗槦锛屼紭闆呮帶鍒?

閰嶇疆锛?

const queue = new PQueue({ concurrency: 3 });

馃悰 閬囧埌鐨勯棶棰樹笌瑙e喅

<EFBFBD><EFBFBD>1锛氭暟鎹<EFBFBD>簱杩佺Щ鍐茬獊

**闂<><E99782>**锛歚prisma db push 妫€娴嬪埌浼氬垹闄?public` schema涓<61>殑琛?

鐜拌薄锛?

鈿狅笍  There might be data loss when applying the changes:
  鈥?You are about to drop the `users` table, which is not empty (2 rows).
  鈥?You are about to drop the `projects` table, which is not empty (2 rows).

鏍瑰洜锛?

  • 鍘嗗彶閬楃暀闂<EFBFBD><EFBFBD>锛氶儴鍒嗘ā鍧楃殑琛ㄥ垱寤哄湪 public schema
  • Prisma Migrate浼氬皾璇曞悓姝ユ墍鏈塻chema

**瑙喅鏂规<E98F82>**锛?

  1. 涓嶄娇鐢?prisma migrate 鎴?prisma db push
  2. 缂栧啓鎵嬪姩SQL鑴氭湰锛屽彧鎿嶄綔 asl_schema
  3. 鎵ц<EFBFBD>锛歚Get-Content xxx.sql | docker exec -i postgres psql ...`
  4. 楠岃瘉锛歚\dt asl_schema.*`

棰勯槻鎺<EFBFBD>锛?

  • <EFBFBD>潵缁х画浣跨敤鎵嬪姩SQL杩佺Щ
  • 鏄庣‘璁板綍鍦ㄦ枃妗d腑
  • 鎻愰啋鍏朵粬妯″潡寮€鍙戣€?

<EFBFBD><EFBFBD>2锛歅risma Client绫诲瀷鐢熸垚

**闂<><E99782>**锛氫慨鏀筍chema鍚庯紝Prisma Client绫诲瀷鏈<E780B7>洿鏂?

瑙e喅锛?

npx prisma generate

棰勯槻鎺<EFBFBD>锛?

  • 姣忔<EFBFBD><EFBFBD>敼Schema鍚庣珛鍗虫墽琛?
  • 鍔犲叆杩佺Щ娴佺▼鏂囨。

馃摎 鐩稿叧鏂囨。

**鏈<><E98F88>鏇存柊鐨勬枃妗?*锛?

  1. [鏁版嵁搴撹縼绉荤姸鎬佽<E98EAC>鏄嶿(./2025-11-23_鏁版嵁搴撹縼绉荤姸鎬佽<E98EAC>鏄?md) 鈫?鏂板缓
  2. [鏁版嵁搴撹<E690B4>璁℃枃妗<E69E83>(../02-鎶€鏈<E282AC><E98F88>璁?01-鏁版嵁搴撹<E690B4>璁?md) 鈫?鏇存柊v3.0
  3. [妯″潡褰撳墠鐘舵€佷笌寮€鍙戞寚鍗梋(../00-妯″潡褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?md) 鈫?鏇存柊v1.2
  4. 鎶€鏈<EFBFBD>€哄姟娓呭崟 鈫?鏇存柊鍊哄姟7鐘舵€?
  5. [鍏ㄦ枃澶嶇瓫寮€鍙戣<E98D99>鍒抅(../04-寮€鍙戣<E98D99>鍒?04-鍏ㄦ枃澶嶇瓫寮€鍙戣<E98D99>鍒?md) 鈫?鏇存柊Day 4杩涘害

**鍙傝€冪殑瑙勮寖鏂囨。**锛?

  1. [浜戝師鐢熷紑鍙戣<E98D99>鑼僝(../../../../04-寮€鍙戣<E98D99>鑼?08-浜戝師鐢熷紑鍙戣<E98D99>鑼?md)
  2. [鏁版嵁搴撴灦鏋勮<E98F8B>鏄嶿(../../../../00-绯荤粺鎬讳綋璁捐<E79281>/03-鏁版嵁搴撴灦鏋勮<E98F8B>鏄?md)
  3. [绯荤粺褰撳墠鐘舵€佷笌寮€鍙戞寚鍗梋(../../../../00-绯荤粺鎬讳綋璁捐<E79281>/00-绯荤粺褰撳墠鐘舵€佷笌寮€鍙戞寚鍗?md)

馃殌 涓嬩竴姝ヨ<E5A79D>鍒?

Day 5锛氬悗绔疉PI寮€鍙戯紙棰勮<E6A3B0>1澶╋級

浠诲姟娓呭崟锛?

  1. 鍒涘缓 FulltextScreeningController.ts
    • createTask() - 鍒涘缓浠诲姟
    • getTaskProgress() - 鑾峰彇杩涘害
    • getTaskResults() - 鑾峰彇缁撴灉鍒楄〃
    • getResultDetail() - 鑾峰彇缁撴灉璇︽儏
    • updateDecision() - 浜哄伐瀹℃牳鍐崇瓥
  2. 鍒涘缓 fulltext-screening.ts<>
  3. 闆嗘垚鍒癋astify搴旂敤
  4. API娴嬭瘯锛圥ostman鎴栭泦鎴愭祴璇曪級
  5. 閿欒<EFBFBD>澶勭悊瀹屽杽

棰勮<EFBFBD>у锛?

  • 5涓狝PI鎺ュ彛
  • API鏂囨。
  • 鍚庣<EFBFBD>瀹屾垚鉁?

馃帀 鎬荤粨

Day 4鏍稿績鎴愭灉锛?

  • 鉁?瀹屾垚鏁版嵁搴撹<E690B4>璁★紙浜戝師鐢熸灦鏋勶級
  • 鉁?瀹屾垚鏁版嵁搴撹縼绉伙紙瀹夊叏鎵ц<E98EB5>锛屾棤褰卞搷鍏朵粬妯″潡锛?
  • 鉁?瀹屾垚鎵瑰<E98EB5>鐞嗘湇鍔″紑鍙戯紙700琛屾牳蹇冧唬鐮侊級
  • 鉁?瀹屾垚闆嗘垚娴嬭瘯锛堢<E9949B>鍒扮<E98D92>楠岃瘉锛?
  • 鉁?瀹屾垚璇︾粏鏂囨。锛?绡囨枃妗f洿鏂帮級

**鎶€鏈<E282AC>寒鐐?*锛?

  • 鉁?浜戝師鐢熷瓨鍌ㄦ柟妗堬紙鍏ㄦ枃瀛極SS/Dify锛?
  • 鉁?鎵嬪姩SQL杩佺Щ绛栫暐锛堝畨鍏ㄥ彲鎺э級
  • 鉁?骞跺彂鎺у埗锛坧-queue锛屾彁閫?鍊嶏級
  • 鉁?瀹归敊鏈哄埗锛堥噸璇曘€侀檷绾с€佺户缁<E688B7>
  • 鉁?娴嬭瘯妯″紡锛堝揩閫熼獙璇侊級

璐ㄩ噺淇濋殰锛?

  • 鉁?Schema闅旂<E99785>100%姝锛堟墍鏈夎〃鍦╝sl_schema锛?
  • 鉁?浠爜鏃燣inter閿欒<E996BF>
  • 鉁?瀹屾暣鐨勯敊璇<E6958A><E79287>鐞嗗拰鏃ュ織
  • 鉁?璇︾粏鐨勬枃妗<E5A697>褰?

**寮€鍙戞晥鐜?*锛?

  • 鈴憋笍 涓婂崍1h瀹屾垚鏁版嵁搴撹<E690B4>笌杩佺Щ
  • 鈴憋笍 涓嬪崍2h瀹屾垚鎵瑰<E98EB5>鐞嗘湇鍔″紑鍙?
  • 鈴憋笍 鍚堣<E98D9A>3h瀹屾垚Day 4鍏ㄩ儴浠诲姟

MVP杩涘害锛?

  • Week 1锛?0% 鈫?75% 鉁?
  • Day 1-3锛氶€氱敤鑳藉姏灞傚畬鎴?鉁?
  • Day 4锛氭壒澶勭悊鏈嶅姟瀹屾垚 鉁?
  • Day 5锛欰PI寮€鍙戯紙涓嬩竴姝ワ級

**寮€鍙戜汉鍛?*锛欰SL寮€鍙戝洟闃? 鏂囨。缂栧啓鏃堕棿锛?025-11-23
鏂囨。鐗堟湰锛歷1.0