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%)
44 KiB
AIclinicalresearch 鐜版湁绯荤粺鎶€鏈<E282AC>懜搴曟姤鍛?
*鎶ュ憡鏃ユ湡锛? 2025-11-06
鎶ュ憡浜猴細 鎶€鏈<E282AC>洟闃? *鎶ュ憡鐩<EFBFBD>殑锛? 鍏ㄩ潰姊崇悊鐜版湁绯荤粺宸插畬鎴愮殑鍔熻兘銆佹妧鏈<E5A6A7>灦鏋勩€佹暟鎹<E69A9F>簱璁捐<E79281>鍜屼唬鐮佸疄鐜帮紝涓哄悗缁<E68297>灦鏋勮<E98F8B>璁烘彁渚涘熀纭€
馃搳 鎵ц<E98EB5>鎽樿<E98EBD>
椤圭洰鍩烘湰淇℃伅
| 椤圭洰 | 淇℃伅 |
|---|---|
| 椤圭洰鍚嶇О | AI绉戠爺鍔╂墜锛圓Iclinicalresearch锛? |
| *寮€鍙戝懆鏈? | 2025-10-10 鑷充粖锛堢害1涓<31>湀锛? |
| *寮€鍙戞ā寮? | 鏁忔嵎杩<EFBFBD>唬锛孧VP浼樺厛 |
| 褰撳墠闃舵<EFBFBD> | 閲岀▼纰?-1.5瀹屾垚锛孭hase2/3瀹屾垚锛岀ǹ浠跺<E6B5A0>鏌ュ畬鎴? |
| *浠g爜閲? | 鍚庣<EFBFBD>~12,000琛岋紝鍓嶇<E98D93>~10,000琛岋紝Python寰<6E>湇鍔<E6B987>2,100琛? |
| *瀹屾垚搴? | 鏍稿績鍔熻兘85%锛屽熀纭€鏋舵瀯100% |
鏍稿績鎴愭灉
鉁?*宸插畬鎴?澶ф牳蹇冨姛鑳芥ā鍧? 鉁?*瀹屾暣鐨勬妧鏈<EFBFBD>灦鏋勪綋绯? 鉁?鎴愮啛鐨凙I闆嗘垚鑳藉姏 鉁?*瀹屽杽鐨勬枃妗d綋绯?
馃幆 宸插畬鎴愬姛鑳芥竻鍗?
1. AI鏅鸿兘闂<EFBFBD>瓟绯荤粺锛堥噷绋嬬<EFBFBD>1鏍稿績锛?
1.1 鏅鸿兘浣撻厤缃<E58EA4>郴缁?
*瀹屾垚鏃堕棿锛? Day 10-11
*鏍稿績鑳藉姏锛?
- 鉁?12涓<32>櫤鑳戒綋鐨刌AML閰嶇疆妗嗘灦
- 鉁?鍔ㄦ€丳rompt妯℃澘鍔犺浇锛圫ystem + User锛?
- 鉁?鍙橀噺鏇挎崲鍜屾潯浠舵覆鏌?
- 鉁?鐑<>洿鏂版敮鎸?
- 鉁?妯″瀷鍙傛暟閰嶇疆锛坱emperature, maxTokens, topP锛?
*宸插紑鍙戞櫤鑳戒綋锛?
- *閫夐<EFBFBD>璇勪环鏅鸿兘浣? - 鍥涚淮搴﹁瘎浠锋<E6B5A0>鏋讹紙鍒涙柊鎬с€佷复搴婁环鍊笺€佺<E282AC>瀛︽€с€佸彲琛屾€э級
*閰嶇疆鏂囦欢锛?
backend/config/agents.yaml(348琛?backend/prompts/topic_evaluation_system.txt(143琛?backend/prompts/topic_evaluation_user.txt(12琛?
鎶€鏈<EFBFBD>灦鏋勶細
// 鏅鸿兘浣撴湇鍔″眰
backend/src/services/agentService.ts
- loadAgentConfig() // 鍔犺浇鏅鸿兘浣撻厤缃?
- getAgentById() // 鑾峰彇鏅鸿兘浣撹<E6B5A3>鎯?
- renderPrompt() // 娓叉煋Prompt妯℃澘
- 鏀<EFBFBD>寔鍙橀噺鏇挎崲锛歿{projectBackground}}, {{userInput}}
- 鏀<EFBFBD>寔鏉′欢娓叉煋锛歿{#if}}...{{/if}}
1.2 澶氳疆瀵硅瘽绯荤粺
*瀹屾垚鏃堕棿锛? Day 12-14
*鏍稿績鑳藉姏锛?
- 鉁?涓婁笅鏂囩粍瑁咃紙System + 鍘嗗彶 + 鐢ㄦ埛杈撳叆锛?
- 鉁?鏀<>寔鏈€杩?00鏉″巻鍙叉秷鎭?
- 鉁?鏅鸿兘鐨勪笂涓嬫枃娉ㄥ叆绛栫暐
- 鉁?娴佸紡杈撳嚭锛圫SE锛屾墦瀛楁満鏁堟灉锛?
- 鉁?闈炴祦寮忚緭鍑猴紙鏅<E7B499>€氭ā寮忥級
鎶€鏈<EFBFBD>疄鐜帮細
// 瀵硅瘽鏈嶅姟灞?
backend/src/services/conversationService.ts (381琛?
// 涓婁笅鏂囩粍瑁呯瓥鐣?
if (isFirstMessage) {
// 棣栨<E6A3A3>娑堟伅锛氬畬鏁存ā鏉匡紙椤圭洰鑳屾櫙 + 鐢ㄦ埛闂<E59F9B><E99782> + 鐭ヨ瘑搴擄級
userPrompt = renderTemplate({
projectBackground,
userInput,
knowledgeBaseContext
});
} else {
// 鍚庣画娑堟伅锛氬彧鍙戦€佹柊鍐呭<E98D90>
userPrompt = knowledgeBaseContext
? `${userInput}\n\n## 鍙傝€冩枃鐚甛n${knowledgeBaseContext}`
: userInput;
}
// 娴佸紡杈撳嚭
for await (const chunk of adapter.chatStream(messages)) {
reply.raw.write(`data: ${JSON.stringify(chunk)}\n\n`);
}
*API绔<EFBFBD>偣锛?
POST /api/v1/conversations/:id/messages/stream- 鍙戦€佹秷鎭<E7A7B7>紙娴佸紡锛?POST /api/v1/conversations/:id/messages- 鍙戦€佹秷鎭<E7A7B7>紙闈炴祦寮忥級GET /api/v1/conversations/:id- 鑾峰彇瀵硅瘽璇︽儏
1.3 LLM閫傞厤鍣ㄧ郴缁?
*瀹屾垚鏃堕棿锛? Day 12-13
*鏍稿績鑳藉姏锛?
- 鉁?缁熶竴鐨凩LM鎺ュ彛鎶借薄锛圛LLMAdapter锛?
- 鉁?3涓狶LM妯″瀷鏀<E780B7>寔锛欴eepSeek-V3銆丵wen3-72B銆丵wen-Long
- 鉁?娴佸紡鍜岄潪娴佸紡涓ょ<E6B693>妯″紡
- 鉁?瀹屾暣閿欒<E996BF>澶勭悊鍜孴oken缁熻<E7BC81>
- 鉁?宸ュ巶妯″紡瀹炵幇锛屾槗浜庢墿灞?
鎶€鏈<EFBFBD>灦鏋勶細
// 閫傞厤鍣ㄦ帴鍙?
backend/src/adapters/types.ts
interface ILLMAdapter {
chat(messages, options): Promise<Response>
chatStream(messages, options): AsyncGenerator<Chunk>
}
// 鍏蜂綋瀹炵幇
backend/src/adapters/
鈹溾攢鈹€ DeepSeekAdapter.ts (150琛? - DeepSeek-V3
鈹溾攢鈹€ QwenAdapter.ts (162琛? - Qwen3-72B + Qwen-Long
鈹斺攢鈹€ LLMFactory.ts (75琛? - 宸ュ巶绫?
*妯″瀷瀵规瘮锛?
| 妯″瀷 | 瀹氫綅 | 浼樺娍 | Token闄愬埗 | 鎴愭湰 |
|---|---|---|---|---|
| DeepSeek-V3 | 涓诲姏 | 鎬т环姣旀瀬楂? | 64K | 楼1/鐧句竾 |
| Qwen3-72B | 澶囩敤 | 涓<EFBFBD>枃鐞嗚В濂? | 128K | 楼4/鐧句竾 |
| Qwen-Long | 鍏ㄦ枃 | 1M瓒呴暱涓婁笅鏂? | 1M | 楼5/鐧句竾 |
1.4 椤圭洰绠$悊绯荤粺
*瀹屾垚鏃堕棿锛? Day 8-9
*鏍稿績鑳藉姏锛?
- 鉁?椤圭洰CRUD锛堝垱寤恒€佽<E282AC>鍙栥€佹洿鏂般€佸垹闄わ級
- 鉁?椤圭洰鑳屾櫙绠$悊锛堝姩鎬佹敞鍏ュ埌AI瀵硅瘽锛?
- 鉁?杞<>垹闄ゆ満鍒?
- 鉁?鐢ㄦ埛椤圭洰鍏宠仈
*鏁版嵁妯″瀷锛?
model Project {
id String @id @default(uuid())
userId String
name String
description String? @db.Text // 椤圭洰鑳屾櫙
background String? @db.Text // 璇︾粏鑳屾櫙
researchType String? // 鐮旂┒绫诲瀷
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime? // 杞<>垹闄?
user User @relation(fields: [userId], references: [id])
conversations Conversation[]
@@index([userId, deletedAt])
}
*API绔<EFBFBD>偣锛?
POST /api/v1/projects- 鍒涘缓椤圭洰GET /api/v1/projects- 鑾峰彇椤圭洰鍒楄〃GET /api/v1/projects/:id- 鑾峰彇椤圭洰璇︽儏PUT /api/v1/projects/:id- 鏇存柊椤圭洰DELETE /api/v1/projects/:id- 鍒犻櫎椤圭洰
2. **涓<>汉鐭ヨ瘑搴撶郴缁?*锛堥噷绋嬬<E7BB8B>1鏍稿績锛?
2.1 鐭ヨ瘑搴撶<E690B4>鐞?
*瀹屾垚鏃堕棿锛? Day 18-22
*鏍稿績鑳藉姏锛?
- 鉁?鐭ヨ瘑搴揅RUD
- 鉁?鏂囨。涓婁紶锛圥DF銆乄ord銆乀XT銆丮arkdown锛?
- 鉁?鏂囨。鐘舵€佽拷韪<E68BB7>紙uploading 鈫?parsing 鈫?indexing 鈫?completed/error锛?
- 鉁?閰嶉<E996B0>绠$悊锛堟瘡鐢ㄦ埛3涓<33>煡璇嗗簱锛屾瘡搴?0涓<30>枃妗o級
- 鉁?鏂囦欢鏍煎紡鍜屽ぇ灏忛檺鍒讹紙鏈€澶?0MB锛?
鎶€鏈<EFBFBD>泦鎴愶細
- Dify骞冲彴 - RAG鐭ヨ瘑搴撶<E690B4>鐞?
- *Qdrant鍚戦噺鏁版嵁搴? - Dify鍐呯疆
- *澶氱<EFBFBD>鎴锋灦鏋? - 姣忎釜鐭ヨ瘑搴撶嫭绔婦ataset
*鏁版嵁妯″瀷锛?
model KnowledgeBase {
id String @id @default(uuid())
userId String
name String
description String? @db.Text
difyDatasetId String @unique // 鏄犲皠鍒癉ify Dataset
documentCount Int @default(0)
totalSize BigInt @default(0)
totalTokens BigInt @default(0) // Phase2鏂板<E98F82>
tokenLimit BigInt @default(980000) // Phase2鏂板<E98F82>
documentLimit Int @default(50) // Phase2鏂板<E98F82>
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
documents Document[]
@@index([userId])
}
model Document {
id String @id @default(uuid())
knowledgeBaseId String
name String
originalName String
fileType String
fileSize BigInt
difyDocumentId String @unique // 鏄犲皠鍒癉ify Document
status String // uploading/parsing/indexing/completed/error
errorMessage String? @db.Text
// Phase2鏂板<E98F82>锛氬叏鏂囧瓨鍌?
fullText String? @db.Text
tokenCount Int?
charCount Int?
extractionMethod String? // nougat/pymupdf/mammoth
extractionQuality Float?
detectedLanguage String? // chinese/english
uploadedAt DateTime @default(now())
processedAt DateTime?
knowledgeBase KnowledgeBase @relation(fields: [knowledgeBaseId], references: [id])
@@index([knowledgeBaseId, status])
}
*API绔<EFBFBD>偣锛?
POST /api/v1/knowledge-bases- 鍒涘缓鐭ヨ瘑搴?GET /api/v1/knowledge-bases- 鑾峰彇鐭ヨ瘑搴撳垪琛?GET /api/v1/knowledge-bases/:id- 鑾峰彇璇︽儏PUT /api/v1/knowledge-bases/:id- 鏇存柊鐭ヨ瘑搴?DELETE /api/v1/knowledge-bases/:id- 鍒犻櫎鐭ヨ瘑搴?POST /api/v1/knowledge-bases/:kbId/documents- 涓婁紶鏂囨。GET /api/v1/knowledge-bases/:kbId/documents- 鑾峰彇鏂囨。鍒楄〃DELETE /api/v1/documents/:id- 鍒犻櫎鏂囨。POST /api/v1/documents/:id/reprocess- 閲嶆柊澶勭悊鏂囨。
2.2 RAG妫€绱㈢郴缁燂紙閲岀▼纰?.5浼樺寲锛?
*瀹屾垚鏃堕棿锛? Day 23-27
*鏍稿績鑳藉姏锛?
- 鉁?璇<>箟妫€绱<E282AC>紙Dify API锛?
- 鉁?澶氱煡璇嗗簱鑱斿悎妫€绱?
- 鉁?@鐭ヨ瘑搴撳姛鑳斤紙鍓嶇<E98D93>涓嬫媺閫夋嫨锛?
- 鉁?妫€绱㈢粨鏋滄敞鍏ュ埌LLM涓婁笅鏂?
- 鉁?鏅鸿兘寮曠敤绯荤粺锛?00%鍑嗙‘婧<E28098>簮锛?
*浼樺寲鎴愭灉锛?
| 鎸囨爣 | 浼樺寲鍓? | 浼樺寲鍚? | 鎻愬崌 |
|---|---|---|---|
| 妫€绱㈡暟閲? | 3 chunks | 15 chunks | *5鍊? |
| Chunk澶у皬 | 500 tokens | 1500 tokens | *3鍊? |
| *鎬昏<EFBFBD>鐩? | 1,500 tokens | 22,500 tokens | *15鍊? |
| 瑕嗙洊椤垫暟 | ~1椤? | ~15-20椤? | *15-20鍊? |
| 瑕嗙洊鐜? | ~5% | ~40-50% | *8-10鍊? |
*鏅鸿兘寮曠敤绯荤粺锛?
// 鍚庣<E98D9A>鑷<EFBFBD>姩鏀堕泦寮曠敤淇℃伅
interface Citation {
index: number;
documentName: string;
segmentIndex: number;
score: number;
content: string;
}
// AI鍥炵瓟鏍煎紡
鏍规嵁[鏉ユ簮1]鍜孾鏉ユ簮5]鐨勭爺绌讹紝闃垮皵鍏规捣榛樼梾涓昏<EFBFBD>鐗瑰緛鍖呮嫭锛?
1. 璁板繂鍔涘噺閫€[鏉ユ簮1][鏉ユ簮3]
2. 璁ょ煡鍔熻兘涓嬮檷[鏉ユ簮5]
---
馃摎 **鍙傝€冩枃鐚?*
[1] 馃搫 **闃垮皵鍏规捣榛樼患杩?023.pdf** - 绗?娈?(鐩稿叧搴?5%)
"闃垮皵鍏规捣榛樼梾鏄<E6A2BE>竴绉嶇<E7BB89>缁忛€€琛屾€х柧鐥?.."
*鍓嶇<EFBFBD>瑙嗚<EFBFBD>浼樺寲锛?
[鏉ユ簮N]锛氳摑鑹查珮浜産adge锛?1890ff锛?- 榧犳爣鎮<EFBFBD>仠锛氳儗鏅<EFBFBD>彉娣憋紙#bae7ff锛?
- 鐐瑰嚮璺宠浆锛氬钩婊戞粴鍔ㄥ埌寮曠敤璇︽儏
- 璇︽儏闂<EFBFBD>儊锛氶粍鑹查珮浜?绉掞紙#fffbe6锛?
2.3 鍏ㄦ枃闃呰<E99783>妯″紡锛圥hase2锛?
*瀹屾垚鏃堕棿锛? Day 28-32
*鏍稿績鑳藉姏锛?
- 鉁?**Python寰<6E>湇鍔?*锛氭枃妗f彁鍙栨湇鍔?
- 鉁?**澶氭牸寮忔敮鎸?*锛歅DF銆丏ocx銆乀xt
- 鉁?鏅鸿兘鎻愬彇锛歂ougat锛堣嫳鏂囧<EFBFBD>鏈<EFBFBD>級 + PyMuPDF锛堝厹搴?涓<>枃锛?+ Mammoth锛圖ocx锛?
- 鉁?**璇<>█妫€娴?*锛氳嚜鍔ㄨ瘑鍒<E79891>腑鑻辨枃锛屼紭鍖栨彁鍙栫瓥鐣?
- 鉁?Token绠$悊锛氱簿纭<EFBFBD><EFBFBD>鏁帮紝鍙岄噸闄愬埗锛?0鏂囦欢 + 980K tokens锛?
- 鉁?鍏ㄦ枃瀛樺偍锛氭暟鎹<EFBFBD>簱淇濆瓨瀹屾暣鏂囨湰
- 鉁?鏅鸿兘鏂囨。閫夋嫨锛氬熀浜嶵oken瀹归噺鐨勬櫤鑳芥帹鑽?
鎶€鏈<EFBFBD>灦鏋勶細
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Frontend (React) 鈹?
鈹? - 鏂囨。涓婁紶 鈹?
鈹? - 瀹归噺鏄剧ず锛堝弻杩涘害鏉★級 鈹?
鈹? - 瀹炴椂杩涘害 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<E282AC>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?REST API
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Backend (Node.js + Fastify) 鈹?
鈹? - ExtractionClient 鈹?
鈹? - TokenService 鈹?
鈹? - 鏅鸿兘鏂囨。閫夋嫨 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<E282AC>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?HTTP
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Python Microservice (FastAPI) 鈹?
鈹? 鈹溾攢鈹€ PyMuPDF (蹇<>€燂紝涓<E7B49D>枃鍙嬪ソ) 鈹?
鈹? 鈹溾攢鈹€ Nougat (瀛︽湳璁烘枃锛岄珮璐ㄩ噺) 鈹?
鈹? 鈹溾攢鈹€ Mammoth (Docx 鈫?Markdown) 鈹?
鈹? 鈹溾攢鈹€ Language Detector 鈹?
鈹? 鈹斺攢鈹€ Quality Evaluator 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
*鎻愬彇绛栫暐锛?
// 璇<>█妫€娴?鈫?閫夋嫨鎻愬彇鏂规硶
if (language === 'chinese') {
// 涓<>枃PDF锛歅yMuPDF锛堝揩閫燂級
text = await pymupdf.extract(pdf);
} else {
// 鑻辨枃PDF锛歂ougat锛堥珮璐ㄩ噺锛?+ 闄嶇骇PyMuPDF
try {
text = await nougat.extract(pdf);
if (quality < 0.7) throw new Error('Quality too low');
} catch {
// 鑷<>姩闄嶇骇
text = await pymupdf.extract(pdf);
}
}
Python寰<EFBFBD>湇鍔℃枃浠剁粨鏋勶細
extraction_service/
鈹溾攢鈹€ main.py (509琛? - FastAPI涓绘湇鍔?
鈹溾攢鈹€ services/
鈹? 鈹溾攢鈹€ pdf_extractor.py (242琛? - PDF鎻愬彇鎬诲崗璋?
鈹? 鈹溾攢鈹€ pdf_processor.py (280琛? - PyMuPDF瀹炵幇
鈹? 鈹溾攢鈹€ language_detector.py (120琛? - 璇<>█妫€娴?
鈹? 鈹溾攢鈹€ nougat_extractor.py (242琛? - Nougat瀹炵幇
鈹? 鈹溾攢鈹€ docx_extractor.py (253琛? - Docx鎻愬彇
鈹? 鈹斺攢鈹€ txt_extractor.py (316琛? - Txt鎻愬彇锛堝<E9949B>缂栫爜锛?
鈹溾攢鈹€ requirements.txt
鈹斺攢鈹€ README.md
*Backend闆嗘垚锛?
// ExtractionClient.ts (268琛?
export class ExtractionClient {
async extractDocument(
filePath: string,
fileType: string
): Promise<ExtractionResult> {
// 璋冪敤Python寰<6E>湇鍔?
const response = await axios.post(
`${this.baseUrl}/api/extract/${fileType}`,
formData
);
return response.data;
}
}
// TokenService.ts (243琛?
export class TokenService {
calculateTokens(text: string): number {
const encoder = encoding_for_model("gpt-4");
const tokens = encoder.encode(text);
return tokens.length;
}
canUploadDocument(
kbId: string,
newDocTokens: number
): Promise<boolean> {
// 妫€鏌ユ枃妗f暟閲忥紙鈮?0锛?
// 妫€鏌<E282AC>oken瀹归噺锛堚墹980K锛?
}
}
*API绔<EFBFBD>偣锛?
POST /api/v1/knowledge-bases/:id/document-selection- 鏅鸿兘鏂囨。閫夋嫨GET /api/v1/knowledge-bases/:id/capacity- 鑾峰彇瀹归噺淇℃伅
3. **鎵瑰<E98EB5>鐞嗘ā寮?*锛圥hase3锛?
3.1 鏍稿績鑳藉姏
*瀹屾垚鏃堕棿锛? Day 29锛?灏忔椂锛?
*瀹氫綅锛? 浠诲姟寮忎氦浜掞紙闈炲<E99788>璇濓級锛岀粨鏋勫寲鏁版嵁鎻愬彇鍣?
*鏍稿績鍔熻兘锛?
- 鉁?棰勮<EFBFBD>妯℃澘锛氫复搴婄爺绌朵俊鎭<EFBFBD>彁鍙栵紙8瀛楁<EFBFBD>锛?
- 鉁?**鑷<>畾涔夋ā鏉?*锛氱敤鎴锋彁绀鸿瘝 鈫?鏂囨湰鍧楁樉绀?
- 鉁?鎵归噺澶勭悊锛?-50绡囨枃鐚?
- 鉁?鍥哄畾3骞跺彂锛坧-queue锛?
- 鉁?澶辫触閲嶈瘯鏈哄埗
- 鉁?Excel瀵煎嚭锛堝弻Sheet璁捐<EFBFBD>锛?
*鏁版嵁妯″瀷锛?
model BatchTask {
id String @id @default(uuid())
userId String
name String
templateType String // preset/custom
templateId String? // 棰勮<E6A3B0>妯℃澘ID
customPrompt String? @db.Text
modelType String // deepseek-v3/qwen3/qwen-long
concurrency Int @default(3)
status String // processing/completed/failed
totalCount Int
completedCount Int @default(0)
failedCount Int @default(0)
startedAt DateTime?
completedAt DateTime?
duration Int? // 绉?
user User @relation(fields: [userId], references: [id])
results BatchResult[]
@@index([userId, status])
}
model BatchResult {
id String @id @default(uuid())
taskId String
documentId String // 鍏宠仈Document
documentName String
status String // success/failed
extractedData Json? // 鎻愬彇鐨勭粨鏋勫寲鏁版嵁
rawOutput String? @db.Text
errorMessage String? @db.Text
processingTime Int? // 姣<><E5A7A3>
tokenUsage Int?
task BatchTask @relation(fields: [taskId], references: [id])
@@index([taskId, status])
}
*棰勮<EFBFBD>妯℃澘锛堜复搴婄爺绌朵俊鎭<EFBFBD>彁鍙栵級锛?
| 瀛楁<EFBFBD> | 绫诲瀷 | 璇存槑 |
|---|---|---|
| research_purpose | text | 鐮旂┒鐩<EFBFBD>殑 |
| research_design | text | 鐮旂┒璁捐<EFBFBD>锛圧CT/闃熷垪鐮旂┒绛夛級 |
| research_subjects | text | 鐮旂┒瀵硅薄锛堢撼鍏?鎺掗櫎鏍囧噯锛? |
| sample_size | text | 鏍锋湰閲忥紙淇濈暀鍘熸枃鎻忚堪锛? |
| intervention_group | text | 骞查<EFBFBD>缁? |
| control_group | text | 瀵圭収缁? |
| results_data | longtext | 缁撴灉鍙婃暟鎹? |
| oxford_level | text | 鐗涙触璇勭骇锛?a/1b/2a/2b/3a/3b/4/5锛? |
鎶€鏈<EFBFBD>疄鐜帮細
// batchService.ts (421琛?
export class BatchService {
async executeBatchTask(
taskId: string,
documentIds: string[],
templateType: 'preset' | 'custom',
options: BatchOptions
): Promise<void> {
// 1. 鍔犺浇妯℃澘鎴栬嚜瀹氫箟Prompt
const template = await this.loadTemplate(templateType, options);
// 2. 骞跺彂鎵ц<E98EB5>锛堝浐瀹?骞跺彂锛?
const queue = new PQueue({ concurrency: 3 });
const promises = documentIds.map(docId =>
queue.add(() => this.processDocument(docId, template))
);
// 3. 绛夊緟鎵€鏈変换鍔″畬鎴?
const results = await Promise.allSettled(promises);
// 4. 缁熻<E7BC81>鍜屼繚瀛?
await this.updateTaskStatistics(taskId, results);
}
async processDocument(
docId: string,
template: Template
): Promise<BatchResult> {
// 1. 鑾峰彇鏂囨。鍏ㄦ枃
const document = await this.getDocument(docId);
// 2. 鏋勯€燣LM娑堟伅
const messages = [
{ role: 'system', content: template.systemPrompt },
{ role: 'user', content: `${template.userPrompt}\n\n${document.fullText}` }
];
// 3. 璋冪敤LLM
const response = await llm.chat(messages);
// 4. 瑙f瀽JSON锛堥<E9949B>璁炬ā鏉匡級鎴栦繚瀛樻枃鏈<E69E83>紙鑷<E7B499>畾涔夛級
const extractedData = template.type === 'preset'
? this.parseJSON(response.content)
: response.content;
return {
documentId: docId,
status: 'success',
extractedData,
rawOutput: response.content
};
}
}
// jsonParser.ts (145琛? - 瀹归敊鐨凧SON瑙f瀽
export function extractJSON(text: string): object {
// 鏀<>寔澶氱<E6BEB6>鏍煎紡
// 1. 绾疛SON锛歿 "key": "value" }
// 2. 甯﹀墠瑷€锛氳繖鏄<E7B996>粨鏋滐細\n{ ... }
// 3. 浠g爜鍧楋細```json\n{ ... }\n```
// 4. 甯﹀悗缂€锛歿 ... }\n\n浠ヤ笂鏄<E7AC82>粨鏋?
}
*API绔<EFBFBD>偣锛?
POST /api/v1/batch/execute- 鎵ц<E98EB5>鎵瑰<E98EB5>鐞嗕换鍔?GET /api/v1/batch/tasks/:taskId- 鑾峰彇浠诲姟鐘舵€?GET /api/v1/batch/tasks/:taskId/results- 鑾峰彇浠诲姟缁撴灉POST /api/v1/batch/tasks/:taskId/retry-failed- 閲嶈瘯澶辫触椤?GET /api/v1/batch/templates- 鑾峰彇鎵€鏈夋ā鏉?
*鏁堢巼鎻愬崌锛?
- 鎵嬪姩澶勭悊锛?0绡?脳 10鍒嗛挓 = 100鍒嗛挓
- 鎵瑰<EFBFBD>鐞嗘ā寮忥細10绡?脳 骞冲潎20绉?= ~7鍒嗛挓
- *鎻愬崌绾?4鍊嶆晥鐜? 馃殌
4. 绋夸欢瀹℃煡鍔熻兘锛圖ay 30鐙<30>珛寮€鍙戯級
4.1 鏍稿績鑳藉姏
*瀹屾垚鏃堕棿锛? Day 30锛?澶╋級
*瀹氫綅锛? 鐙<>珛鐨勭ǹ浠舵櫤鑳藉<E991B3>鏌ョ郴缁?
*鏍稿績鍔熻兘锛?
- 鉁?**鍙岀淮搴﹁瘎浼?*锛氱ǹ绾﹁<E7BBBE>鑼冩€э紙11椤癸級 + 鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛?
- 鉁?鏅鸿兘鍒嗘瀽锛氬熀浜庣湡瀹炴湡鍒婃爣鍑嗭紙涓<EFBFBD>崕鍖诲<EFBFBD>瓒呭0鏉傚織锛?
- 鉁?**瀹屾暣娴佺▼**锛氫笂浼燱ord 鈫?鎻愬彇鏂囨湰 鈫?AI璇勪及 鈫?鐢熸垚鎶ュ憡 鈫?瀵煎嚭PDF
- 鉁?鐢ㄦ埛浣撻獙锛氭笎鍙樺崱鐗囥€佹嫋鎷戒笂浼犮€佸疄鏃惰繘搴︺€侀<EFBFBD>鑹茬紪鐮?
*璇勪及鏍囧噯锛?
*绋跨害瑙勮寖鎬ц瘎浼帮紙11椤癸級锛?
- 鏂囬<EFBFBD>锛圱itle锛?
- 浣滆€咃紙Authors锛?
- 涓<EFBFBD>枃鎽樿<EFBFBD>锛圕hinese Abstract锛?
- 鑻辨枃鎽樿<EFBFBD>锛圗nglish Abstract锛?
- 涓<EFBFBD>枃鍏抽敭璇嶏紙Chinese Keywords锛?
- 鑻辨枃鍏抽敭璇嶏紙English Keywords锛?
- 姝f枃锛圡ain Text锛?
- 鍙傝€冩枃鐚<EFBFBD>紙References锛?
- 鍥捐〃锛團igures and Tables锛?
- 鍒╃泭鍐茬獊锛圕onflict of Interest锛?
- 浼︾悊瀹℃煡锛圗thics Approval锛?
鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛夛細
- 绉戠爺璁捐<EFBFBD>锛圧esearch Design锛?
- 缁熻<EFBFBD>鏂规硶锛圫tatistical Methods锛?
- 缁熻<EFBFBD>鍒嗘瀽锛圫tatistical Analysis锛?
*鏁版嵁妯″瀷锛?
model ReviewTask {
id String @id @default(uuid())
userId String
fileName String
fileType String
fileSize BigInt
status String // processing/completed/failed
modelType String // deepseek-v3/qwen3/qwen-long
// 璇勪及缁撴灉
editorialScore Float? // 绋跨害瑙勮寖鎬ф€诲垎
editorialResult Json? // 璇︾粏璇勪及缁撴灉
methodologyScore Float? // 鏂规硶瀛︽€诲垎
methodologyResult Json? // 璇︾粏璇勪及缁撴灉
errorMessage String? @db.Text
processingTime Int? // 姣<><E5A7A3>
createdAt DateTime @default(now())
completedAt DateTime?
user User @relation(fields: [userId], references: [id])
@@index([userId, status])
}
*Prompt璁捐<EFBFBD>锛?
// 绋跨害瑙勮寖鎬ц瘎浼癙rompt (210琛?
// prompts/editorial_review_system.txt
鎮ㄦ槸涓€浣嶄笓涓氱殑鍖诲<EFBFBD>鏈熷垔缂栬緫锛屾偍鐨勪换鍔℃槸鎸夌収銆婁腑鍗庡尰瀛﹁秴澹版潅蹇椼€嬬殑绋跨害瑕佹眰锛屽<EFBFBD>鎻愪氦鐨勭ǹ浠惰繘琛岃<EFBFBD>鑼冩€ц瘎浼般€?
璇勪及缁村害锛?
1. 鏂囬<EFBFBD>
- 妫€鏌ョ偣锛氬噯纭<EFBFBD>€с€佺畝鏄庢€с€佽<EFBFBD>鑼冩€?
- 璇勫垎鏍囧噯锛?-10鍒?
2. 浣滆€?
- 妫€鏌ョ偣锛氫綔鑰呬俊鎭<EFBFBD>畬鏁存€с€佹帓搴忋€佸崟浣嶆爣娉?
- 璇勫垎鏍囧噯锛?-10鍒?
...锛堝叡11涓<EFBFBD>淮搴︼級
杈撳嚭鏍煎紡锛圝SON锛夛細
{
"overall_score": 85.5,
"items": [
{
"dimension": "鏂囬<E98F82>",
"score": 9.0,
"status": "绗﹀悎",
"issues": [],
"suggestions": []
},
...
]
}
// 鏂规硶瀛﹁瘎浼癙rompt (231琛?
// prompts/methodology_review_system.txt
鎮ㄦ槸涓€浣嶄笓涓氱殑鍖诲<EFBFBD>缁熻<EFBFBD>瀛︿笓瀹讹紝鎮ㄧ殑浠诲姟鏄<EFBFBD>瘎浼板尰瀛︾爺绌剁ǹ浠剁殑鏂规硶瀛﹁川閲忋€?
璇勪及缁村害锛?
1. 绉戠爺璁捐<EFBFBD>
- 鐮旂┒绫诲瀷璇嗗埆
- 璁捐<EFBFBD>鍚堢悊鎬?
- 鏍锋湰閲忚<EFBFBD>绠?
2. 缁熻<EFBFBD>鏂规硶
- 鏂规硶閫夋嫨
- 鍙傛暟璁剧疆
- 鍋囪<EFBFBD>妫€楠?
3. 缁熻<EFBFBD>鍒嗘瀽
- 缁撴灉鍛堢幇
- 鍥捐〃瑙勮寖
- 缁撹<EFBFBD>鍚堢悊鎬?
鎶€鏈<EFBFBD>疄鐜帮細
// reviewService.ts (437琛?
export class ReviewService {
async reviewManuscript(
userId: string,
file: File,
modelType: ModelType
): Promise<ReviewTask> {
// 1. 涓婁紶鏂囦欢骞跺垱寤轰换鍔?
const task = await this.createTask(userId, file);
// 2. 鎻愬彇鏂囨。鍏ㄦ枃锛堣皟鐢≒ython寰<6E>湇鍔★級
const fullText = await extractionClient.extractDocument(file);
// 3. 绋跨害瑙勮寖鎬ц瘎浼?
const editorialResult = await this.evaluateEditorial(fullText, modelType);
// 4. 鏂规硶瀛﹁瘎浼?
const methodologyResult = await this.evaluateMethodology(fullText, modelType);
// 5. 淇濆瓨缁撴灉
await this.updateTaskResult(task.id, {
editorialScore: editorialResult.overall_score,
editorialResult: editorialResult,
methodologyScore: methodologyResult.overall_score,
methodologyResult: methodologyResult
});
return task;
}
}
*API绔<EFBFBD>偣锛?
POST /api/v1/review/upload- 涓婁紶绋夸欢骞跺紑濮嬪<E6BFAE>鏌?GET /api/v1/review/tasks/:taskId- 鏌ヨ<E98F8C>浠诲姟鐘舵€?GET /api/v1/review/tasks/:taskId/report- 鑾峰彇瀹屾暣鎶ュ憡GET /api/v1/review/tasks- 鑾峰彇浠诲姟鍒楄〃锛堝垎椤碉級DELETE /api/v1/review/tasks/:taskId- 鍒犻櫎浠诲姟
*鍓嶇<EFBFBD>缁勪欢锛?
// ReviewPage.tsx (625琛? - 涓婚〉闈?
// 鍖呭惈锛氫笂浼犲尯 + 杩涘害鏉?+ 鎶ュ憡灞曠ず + PDF瀵煎嚭
// ScoreCard.tsx - 鍒嗘暟鍗$墖锛堥<E9949B>鑹茬紪鐮侊級
// EditorialReview.tsx - 绋跨害瑙勮寖鎬ц瘎浼拌<E6B5BC>鎯?
// MethodologyReview.tsx - 鏂规硶瀛﹁瘎浼拌<E6B5BC>鎯?
馃彈锔?鎶€鏈<E282AC>灦鏋勬€昏<E282AC>
1. 鎶€鏈<EFBFBD>爤
鍚庣<EFBFBD>鎶€鏈<EFBFBD>爤
鏍稿績妗嗘灦锛?
- Node.js 18+
- TypeScript 5.x
- Fastify 4.x (楂樻€ц兘HTTP妗嗘灦)
鏁版嵁灞傦細
- PostgreSQL 15+ (鍏崇郴鏁版嵁搴?
- Prisma 5.x (ORM)
- Redis (缂撳瓨锛屽緟闆嗘垚)
AI闆嗘垚锛?
- DeepSeek-V3 (涓诲姏LLM锛屄?/鐧句竾tokens)
- Qwen3-72B (澶囩敤LLM锛屄?/鐧句竾tokens)
- Qwen-Long (瓒呴暱涓婁笅鏂囷紝1M tokens)
- Dify (RAG骞冲彴锛屽悜閲忔<EFBFBD>绱?
鏂囦欢澶勭悊锛?
- @fastify/multipart (鏂囦欢涓婁紶)
- @dqbd/tiktoken (Token璁℃暟)
- axios (HTTP瀹㈡埛绔?
骞跺彂鎺у埗锛?
- p-queue (闃熷垪绠$悊)
閰嶇疆绠$悊锛?
- js-yaml (YAML瑙f瀽)
- dotenv (鐜<EFBFBD><EFBFBD>鍙橀噺)
鍓嶇<EFBFBD>鎶€鏈<EFBFBD>爤
鏍稿績妗嗘灦锛?
- React 18
- TypeScript 5.x
- Vite 5.x (鏋勫缓宸ュ叿)
UI缁勪欢锛?
- Ant Design 5.x (涓昏<EFBFBD>UI搴?
- TailwindCSS (宸ュ叿绫籆SS)
- React Router 6 (璺<EFBFBD>敱)
鐘舵€佺<EFBFBD>鐞嗭細
- Zustand (杞婚噺绾х姸鎬佺<EFBFBD>鐞?
鏁版嵁璇锋眰锛?
- Axios (HTTP瀹㈡埛绔?
- EventSource (SSE娴佸紡杈撳嚭)
杈呭姪宸ュ叿锛?
- react-markdown (Markdown娓叉煋)
- rehype-raw (HTML娓叉煋)
- html2canvas + jsPDF (PDF瀵煎嚭)
- xlsx (Excel瀵煎嚭)
Python寰<EFBFBD>湇鍔?
鏍稿績妗嗘灦锛?
- FastAPI (楂樻€ц兘寮傛<EFBFBD>妗嗘灦)
- uvicorn (ASGI鏈嶅姟鍣?
PDF澶勭悊锛?
- PyMuPDF (fitz) - 蹇<EFBFBD>€熼€氱敤
- pdfplumber - 琛ㄦ牸鎻愬彇
- nougat-ocr - 瀛︽湳璁烘枃楂樿川閲忔彁鍙?
Docx澶勭悊锛?
- mammoth - 杞琈arkdown
- python-docx - 缁撴瀯鍖栬<EFBFBD>鍙?
鏂囨湰澶勭悊锛?
- chardet - 缂栫爜妫€娴?
- langdetect - 璇<EFBFBD>█妫€娴?
宸ュ叿锛?
- python-multipart - 鏂囦欢涓婁紶
- python-dotenv - 閰嶇疆绠$悊
2. *鏁版嵁搴撹<EFBFBD>璁?
鏍稿績琛ㄧ粨鏋勶紙13涓<EFBFBD>〃锛?
鐢ㄦ埛鐩稿叧锛?涓<>〃锛夛細
model User {
id String @id @default(uuid())
email String @unique
password String // bcrypt鍔犲瘑
name String?
avatarUrl String?
role String @default("user")
status String @default("active")
kbQuota Int @default(3)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
椤圭洰绠$悊锛?涓<>〃锛夛細
model Project {
id String @id @default(uuid())
userId String
name String
description String? @db.Text
background String? @db.Text
researchType String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
@@index([userId, deletedAt])
}
瀵硅瘽绯荤粺锛?涓<>〃锛夛細
// 椤圭洰瀵硅瘽
model Conversation {
id String @id @default(uuid())
projectId String
agentId String
title String?
metadata Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
}
model Message {
id String @id @default(uuid())
conversationId String
role String // user/assistant
content String @db.Text
model String? // deepseek-v3/qwen3/qwen-long
metadata Json? // 鐭ヨ瘑搴撳紩鐢ㄧ瓑
createdAt DateTime @default(now())
}
// 閫氱敤瀵硅瘽锛堟櫤鑳介棶绛旓級
model GeneralConversation {
id String @id @default(uuid())
userId String
title String?
metadata Json?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
deletedAt DateTime?
}
model GeneralMessage {
id String @id @default(uuid())
conversationId String
role String
content String @db.Text
model String?
metadata Json?
createdAt DateTime @default(now())
}
鐭ヨ瘑搴撶郴缁燂紙2涓<EFBFBD>〃锛夛細
model KnowledgeBase {
id String @id @default(uuid())
userId String
name String
description String? @db.Text
difyDatasetId String @unique
documentCount Int @default(0)
totalSize BigInt @default(0)
totalTokens BigInt @default(0)
tokenLimit BigInt @default(980000)
documentLimit Int @default(50)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
}
model Document {
id String @id @default(uuid())
knowledgeBaseId String
name String
originalName String
fileType String
fileSize BigInt
difyDocumentId String @unique
status String
errorMessage String? @db.Text
// 鍏ㄦ枃瀛樺偍
fullText String? @db.Text
tokenCount Int?
charCount Int?
extractionMethod String?
extractionQuality Float?
detectedLanguage String?
uploadedAt DateTime @default(now())
processedAt DateTime?
@@index([knowledgeBaseId, status])
}
鎵瑰<EFBFBD>鐞嗙郴缁燂紙2涓<EFBFBD>〃锛夛細
model BatchTask {
id String @id @default(uuid())
userId String
name String
templateType String
templateId String?
customPrompt String? @db.Text
modelType String
concurrency Int @default(3)
status String
totalCount Int
completedCount Int @default(0)
failedCount Int @default(0)
startedAt DateTime?
completedAt DateTime?
duration Int?
@@index([userId, status])
}
model BatchResult {
id String @id @default(uuid())
taskId String
documentId String
documentName String
status String
extractedData Json?
rawOutput String? @db.Text
errorMessage String? @db.Text
processingTime Int?
tokenUsage Int?
@@index([taskId, status])
}
绋夸欢瀹℃煡锛?涓<>〃锛夛細
model ReviewTask {
id String @id @default(uuid())
userId String
fileName String
fileType String
fileSize BigInt
status String
modelType String
editorialScore Float?
editorialResult Json?
methodologyScore Float?
methodologyResult Json?
errorMessage String? @db.Text
processingTime Int?
createdAt DateTime @default(now())
completedAt DateTime?
@@index([userId, status])
}
杩愯惀绠$悊锛?涓<>〃锛夛細
model AdminLog {
id String @id @default(uuid())
adminId String
action String
targetType String?
targetId String?
details Json?
ipAddress String?
userAgent String?
createdAt DateTime @default(now())
@@index([adminId, createdAt])
@@index([action, createdAt])
}
*鎬荤粺璁★細13涓<EFBFBD>〃锛寏80涓<EFBFBD>瓧娈?
3. 浠g爜缁撴瀯
鍚庣<EFBFBD>浠g爜缁撴瀯
backend/
鈹溾攢鈹€ config/
鈹? 鈹斺攢鈹€ agents.yaml (348琛? - 鏅鸿兘浣撻厤缃?
鈹溾攢鈹€ prompts/ (441琛?
鈹? 鈹溾攢鈹€ topic_evaluation_system.txt (143琛?
鈹? 鈹溾攢鈹€ topic_evaluation_user.txt (12琛?
鈹? 鈹溾攢鈹€ editorial_review_system.txt (210琛?
鈹? 鈹斺攢鈹€ methodology_review_system.txt (231琛?
鈹溾攢鈹€ src/
鈹? 鈹溾攢鈹€ adapters/ (387琛? - LLM閫傞厤鍣?
鈹? 鈹? 鈹溾攢鈹€ types.ts (57琛?
鈹? 鈹? 鈹溾攢鈹€ DeepSeekAdapter.ts (150琛?
鈹? 鈹? 鈹溾攢鈹€ QwenAdapter.ts (162琛?
鈹? 鈹? 鈹斺攢鈹€ LLMFactory.ts (18琛?
鈹? 鈹溾攢鈹€ clients/ (~550琛? - 澶栭儴鏈嶅姟瀹㈡埛绔?
鈹? 鈹? 鈹溾攢鈹€ DifyClient.ts (282琛?
鈹? 鈹? 鈹斺攢鈹€ ExtractionClient.ts (268琛?
鈹? 鈹溾攢鈹€ config/ (56琛?
鈹? 鈹? 鈹斺攢鈹€ env.ts - 鐜<><E9909C>閰嶇疆
鈹? 鈹溾攢鈹€ controllers/ (~2,700琛? - 鎺у埗鍣?
鈹? 鈹? 鈹溾攢鈹€ projectController.ts
鈹? 鈹? 鈹溾攢鈹€ agentController.ts (197琛?
鈹? 鈹? 鈹溾攢鈹€ conversationController.ts (247琛?
鈹? 鈹? 鈹溾攢鈹€ chatController.ts
鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseController.ts
鈹? 鈹? 鈹溾攢鈹€ documentController.ts
鈹? 鈹? 鈹溾攢鈹€ batchController.ts (429琛?
鈹? 鈹? 鈹斺攢鈹€ reviewController.ts (265琛?
鈹? 鈹溾攢鈹€ services/ (~3,000琛? - 涓氬姟閫昏緫
鈹? 鈹? 鈹溾攢鈹€ projectService.ts
鈹? 鈹? 鈹溾攢鈹€ agentService.ts (232琛?
鈹? 鈹? 鈹溾攢鈹€ conversationService.ts (381琛?
鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseService.ts
鈹? 鈹? 鈹溾攢鈹€ documentService.ts
鈹? 鈹? 鈹溾攢鈹€ batchService.ts (421琛?
鈹? 鈹? 鈹溾攢鈹€ reviewService.ts (437琛?
鈹? 鈹? 鈹斺攢鈹€ tokenService.ts (243琛?
鈹? 鈹溾攢鈹€ templates/ (145琛?
鈹? 鈹? 鈹斺攢鈹€ clinicalResearch.ts - 鎵瑰<E98EB5>鐞嗛<E9909E>璁炬ā鏉?
鈹? 鈹溾攢鈹€ utils/ (145琛?
鈹? 鈹? 鈹斺攢鈹€ jsonParser.ts - 瀹归敊JSON瑙f瀽
鈹? 鈹溾攢鈹€ routes/ (~250琛? - 璺<>敱
鈹? 鈹? 鈹溾攢鈹€ projects.ts
鈹? 鈹? 鈹溾攢鈹€ agents.ts
鈹? 鈹? 鈹溾攢鈹€ conversations.ts
鈹? 鈹? 鈹溾攢鈹€ chatRoutes.ts
鈹? 鈹? 鈹溾攢鈹€ knowledgeBases.ts
鈹? 鈹? 鈹溾攢鈹€ batchRoutes.ts
鈹? 鈹? 鈹斺攢鈹€ reviewRoutes.ts
鈹? 鈹溾攢鈹€ middleware/ (~50琛?
鈹? 鈹? 鈹斺攢鈹€ validateProject.ts
鈹? 鈹斺攢鈹€ index.ts (涓诲叆鍙?
鈹溾攢鈹€ prisma/
鈹? 鈹溾攢鈹€ schema.prisma (~600琛?
鈹? 鈹斺攢鈹€ migrations/
鈹溾攢鈹€ package.json
鈹斺攢鈹€ tsconfig.json
鎬昏<E98EAC>锛殈12,000琛屼唬鐮?
鍓嶇<EFBFBD>浠g爜缁撴瀯
frontend/
鈹溾攢鈹€ src/
鈹? 鈹溾攢鈹€ api/ (~1,500琛? - API灏佽<E7818F>
鈹? 鈹? 鈹溾攢鈹€ projectApi.ts
鈹? 鈹? 鈹溾攢鈹€ agentApi.ts (76琛?
鈹? 鈹? 鈹溾攢鈹€ conversationApi.ts
鈹? 鈹? 鈹溾攢鈹€ chatApi.ts
鈹? 鈹? 鈹溾攢鈹€ knowledgeBaseApi.ts
鈹? 鈹? 鈹溾攢鈹€ batchApi.ts (147琛?
鈹? 鈹? 鈹溾攢鈹€ reviewApi.ts (319琛?
鈹? 鈹? 鈹斺攢鈹€ request.ts (axios閰嶇疆)
鈹? 鈹溾攢鈹€ components/ (~5,000琛?
鈹? 鈹? 鈹溾攢鈹€ chat/ (~3,000琛?
鈹? 鈹? 鈹? 鈹溾攢鈹€ MessageList.tsx (鍚<>櫤鑳藉紩鐢?
鈹? 鈹? 鈹? 鈹溾攢鈹€ MessageInput.tsx (鍚獲鐭ヨ瘑搴?
鈹? 鈹? 鈹? 鈹溾攢鈹€ ModelSelector.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ ModeSelector.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ FullTextMode.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ DeepReadMode.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ BatchMode.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ TaskDefinition.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ DocumentSelection.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ BatchProgress.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ PresetTable.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ CustomTable.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ BatchResults.tsx
鈹? 鈹? 鈹? 鈹斺攢鈹€ CapacityIndicator.tsx
鈹? 鈹? 鈹溾攢鈹€ knowledge/ (~800琛?
鈹? 鈹? 鈹? 鈹溾攢鈹€ KnowledgeBaseList.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ DocumentList.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ DocumentUpload.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ CreateKBDialog.tsx
鈹? 鈹? 鈹? 鈹斺攢鈹€ EditKBDialog.tsx
鈹? 鈹? 鈹溾攢鈹€ review/ (~500琛?
鈹? 鈹? 鈹? 鈹溾攢鈹€ ScoreCard.tsx
鈹? 鈹? 鈹? 鈹溾攢鈹€ EditorialReview.tsx
鈹? 鈹? 鈹? 鈹斺攢鈹€ MethodologyReview.tsx
鈹? 鈹? 鈹溾攢鈹€ ProjectSelector.tsx
鈹? 鈹? 鈹溾攢鈹€ CreateProjectDialog.tsx
鈹? 鈹? 鈹斺攢鈹€ EditProjectDialog.tsx
鈹? 鈹溾攢鈹€ pages/ (~2,500琛?
鈹? 鈹? 鈹溾攢鈹€ HomePage.tsx
鈹? 鈹? 鈹溾攢鈹€ AgentChatPage.tsx
鈹? 鈹? 鈹溾攢鈹€ ChatPage.tsx
鈹? 鈹? 鈹溾攢鈹€ KnowledgePage.tsx
鈹? 鈹? 鈹溾攢鈹€ ReviewPage.tsx (625琛?
鈹? 鈹? 鈹斺攢鈹€ HistoryPage.tsx
鈹? 鈹溾攢鈹€ stores/ (~400琛?
鈹? 鈹? 鈹溾攢鈹€ useProjectStore.ts
鈹? 鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts
鈹? 鈹溾攢鈹€ hooks/ (~400琛?
鈹? 鈹? 鈹溾攢鈹€ useChatMode.ts
鈹? 鈹? 鈹溾攢鈹€ useDeepReadState.ts
鈹? 鈹? 鈹斺攢鈹€ useBatchTask.ts (198琛?
鈹? 鈹溾攢鈹€ layouts/ (~200琛?
鈹? 鈹? 鈹斺攢鈹€ MainLayout.tsx
鈹? 鈹溾攢鈹€ types/ (~300琛?
鈹? 鈹? 鈹溾攢鈹€ chat.ts
鈹? 鈹? 鈹斺攢鈹€ index.ts
鈹? 鈹斺攢鈹€ App.tsx
鈹溾攢鈹€ package.json
鈹斺攢鈹€ vite.config.ts
鎬昏<E98EAC>锛殈10,000琛屼唬鐮?
Python寰<EFBFBD>湇鍔$粨鏋?
extraction_service/
鈹溾攢鈹€ services/
鈹? 鈹溾攢鈹€ pdf_extractor.py (242琛?
鈹? 鈹溾攢鈹€ pdf_processor.py (280琛?
鈹? 鈹溾攢鈹€ language_detector.py (120琛?
鈹? 鈹溾攢鈹€ nougat_extractor.py (242琛?
鈹? 鈹溾攢鈹€ docx_extractor.py (253琛?
鈹? 鈹斺攢鈹€ txt_extractor.py (316琛?
鈹溾攢鈹€ main.py (509琛?
鈹溾攢鈹€ requirements.txt
鈹斺攢鈹€ README.md
鎬昏<E98EAC>锛殈2,100琛屼唬鐮?
馃搳 鏁版嵁娴佹灦鏋?
1. AI瀵硅瘽娴佺▼
鐢ㄦ埛杈撳叆
鈫?
鍓嶇<E98D93> ChatPage/AgentChatPage
鈫?POST /api/v1/conversations/:id/messages/stream
鍚庣<E98D9A> conversationController
鈫?
conversationService
鈹溾啋 agentService.getAgent() - 鑾峰彇鏅鸿兘浣撻厤缃?
鈹溾啋 projectService.getProject() - 鑾峰彇椤圭洰鑳屾櫙
鈹溾啋 conversationService.getHistory() - 鑾峰彇鍘嗗彶瀵硅瘽
鈹溾啋 knowledgeBaseService.search() - 鐭ヨ瘑搴撴<E690B4>绱<EFBFBD>紙鍙<E7B499>€夛級
鈹斺啋 缁勮<E7BC81>涓婁笅鏂囷紙System + 鍘嗗彶 + 椤圭洰鑳屾櫙 + 鐭ヨ瘑搴?+ 鐢ㄦ埛杈撳叆锛?
鈫?
LLMFactory.getAdapter(modelType)
鈫?
DeepSeekAdapter / QwenAdapter
鈫?HTTP (SSE Stream)
OpenAI API / DashScope API
鈫?(娴佸紡杩斿洖)
鍚庣<E98D9A> conversationService
鈹溾啋 瀹炴椂鍐欏叆鏁版嵁搴擄紙messages琛<73>級
鈹斺啋 SSE娴佸紡杩斿洖鍓嶇<E98D93>
鈫?
鍓嶇<E98D93> MessageList
鈹斺啋 瀹炴椂娓叉煋锛堟墦瀛楁満鏁堟灉锛?
2. 鐭ヨ瘑搴揜AG娴佺▼
鐢ㄦ埛涓婁紶鏂囨。
鈫?
鍓嶇<E98D93> DocumentUpload
鈫?POST /api/v1/knowledge-bases/:id/documents
鍚庣<E98D9A> documentController
鈫?
documentService.uploadDocument()
鈹溾啋 淇濆瓨鏂囦欢鍒颁复鏃剁洰褰?
鈹溾啋 璋冪敤Python寰<6E>湇鍔℃彁鍙栨枃鏈?(Phase2)
鈹溾啋 璁$畻Token鏁?(Phase2)
鈹溾啋 妫€鏌ュ<E98F8C>閲忛檺鍒?(Phase2)
鈹溾啋 涓婁紶鍒癉ify (RAG绱㈠紩)
鈹溾啋 淇濆瓨鍏ㄦ枃鍒版暟鎹<E69A9F>簱 (Phase2)
鈹斺啋 鏇存柊鐭ヨ瘑搴撶粺璁?
鈫?
鍚庡彴杞<E5BDB4><E69D9E>Dify澶勭悊鐘舵€?
鈹斺啋 鏇存柊document.status
---
鐢ㄦ埛@鐭ヨ瘑搴撴彁闂?
鈫?
鍓嶇<E98D93> MessageInput (閫夋嫨鐭ヨ瘑搴?
鈫?POST /api/v1/conversations/:id/messages/stream
鍚庣<E98D9A> conversationService
鈫?
knowledgeBaseService.search(kbIds, query)
鈹溾啋 瀵规瘡涓<E798A1>煡璇嗗簱璋冪敤Dify妫€绱<E282AC>PI
鈹溾啋 杩斿洖Top 15鐩稿叧鏂囨。鐗囨<E99097>
鈹溾啋 鏍煎紡鍖栵細銆愮煡璇嗗簱锛歺xx銆慭n1. [鐩稿叧搴<E58FA7>X%] 鍐呭<E98D90>...
鈹斺啋 鏀堕泦寮曠敤淇℃伅 (Phase 1.5)
鈫?
娉ㄥ叆鍒癓LM涓婁笅鏂?
鈹溾啋 鎸囧<E98EB8>AI浣跨敤[鏉ユ簮N]鏍囧噯缂栧彿
鈹斺啋 杩藉姞寮曠敤娓呭崟锛圚TML鏍煎紡锛?
鈫?
鍓嶇<E98D93> MessageList
鈹溾啋 瑙f瀽寮曠敤鏍囪<E98F8D>
鈹溾啋 楂樹寒鏄剧ず[鏉ユ簮N]
鈹溾啋 鐐瑰嚮璺宠浆鍒板紩鐢ㄨ<E990A2>鎯?
鈹斺啋 璇︽儏鍖哄煙楂樹寒闂<E5AF92>儊
3. *鎵瑰<EFBFBD>鐞嗘祦绋?
鐢ㄦ埛閫夋嫨鏂囩尞 + 閰嶇疆浠诲姟
鈫?
鍓嶇<E98D93> BatchMode
鈫?POST /api/v1/batch/execute
鍚庣<E98D9A> batchController
鈫?
batchService.executeBatchTask()
鈹溾啋 鍒涘缓BatchTask璁板綍
鈹溾啋 鍔犺浇棰勮<E6A3B0>妯℃澘鎴栬嚜瀹氫箟Prompt
鈹斺啋 寮傛<E5AFAE>鎵ц<E98EB5>鎵瑰<E98EB5>鐞?
鈫?
骞跺彂闃熷垪锛坧-queue锛屽浐瀹?骞跺彂锛?
鈹溾啋 processDocument(doc1)
鈹溾啋 processDocument(doc2)
鈹斺啋 processDocument(doc3)
鈫?姣忎釜鏂囨。澶勭悊
鈹溾啋 鑾峰彇鏂囨。鍏ㄦ枃锛坉atabase锛?
鈹溾啋 鏋勯€燣LM娑堟伅锛圫ystem + User + 鏂囨。鍏ㄦ枃锛?
鈹溾啋 璋冪敤LLM API
鈹溾啋 瑙f瀽JSON锛堥<E9949B>璁撅級鎴栦繚瀛樻枃鏈<E69E83>紙鑷<E7B499>畾涔夛級
鈹斺啋 淇濆瓨BatchResult璁板綍
鈫?
鍚庡彴鏇存柊浠诲姟缁熻<E7BC81>
鈹斺啋 completedCount, failedCount, status
---
鍓嶇<E98D93>杞<EFBFBD><E69D9E>浠诲姟鐘舵€?
鈫?GET /api/v1/batch/tasks/:taskId (姣?绉?
鍚庣<E98D9A>杩斿洖浠诲姟杩涘害
鈹溾啋 status, totalCount, completedCount, failedCount
鈹斺啋 棰勪及鍓╀綑鏃堕棿
鈫?
浠诲姟瀹屾垚鍚?
鈫?GET /api/v1/batch/tasks/:taskId/results
鍚庣<E98D9A>杩斿洖瀹屾暣缁撴灉
鈹溾啋 棰勮<E6A3B0>妯℃澘锛?鍒楄〃鏍?
鈹溾啋 鑷<>畾涔夋ā鏉匡細3鍒楁枃鏈<E69E83>潡
鈹斺啋 澶辫触椤瑰垪琛?
鈫?
鍓嶇<E98D93> BatchResults
鈹溾啋 娓叉煋缁撴灉琛ㄦ牸
鈹溾啋 瀵煎嚭Excel锛堝弻Sheet锛?
鈹斺啋 閲嶈瘯澶辫触椤?
馃捑 鏁版嵁缁熻<E7BC81>
浠g爜閲忕粺璁?
| 妯″潡 | 鏂囦欢鏁? | 浠g爜琛屾暟 | 鍗犳瘮 |
|---|---|---|---|
| *鍚庣<EFBFBD>涓讳唬鐮? | 38 | ~12,000 | 50% |
| *鍓嶇<EFBFBD>涓讳唬鐮? | 75 | ~10,000 | 42% |
| *Python寰<EFBFBD>湇鍔? | 8 | ~2,100 | 8% |
| 鎬昏<EFBFBD> | 121 | ~24,100 | 100% |
鏁版嵁搴撶粺璁?
| 绫诲埆 | 鏁伴噺 |
|---|---|
| *琛? | 13 |
| 瀛楁<EFBFBD> | ~80 |
| 绱㈠紩 | ~20 |
| 鍏崇郴 | 15 |
API绔<EFBFBD>偣缁熻<EFBFBD>
| 妯″潡 | 绔<EFBFBD>偣鏁? |
|---|---|
| 椤圭洰绠$悊 | 5 |
| 鏅鸿兘浣撶<EFBFBD>鐞? | 4 |
| 瀵硅瘽绯荤粺 | 8 |
| 鐭ヨ瘑搴撶<EFBFBD>鐞? | 12 |
| 鎵瑰<EFBFBD>鐞嗙郴缁? | 5 |
| 绋夸欢瀹℃煡 | 5 |
| 鎬昏<EFBFBD> | 39 |
馃幆 宸查獙璇佺殑鎶€鏈<E282AC>兘鍔?
1. AI闆嗘垚鑳藉姏 鉁?
- 鉁?**澶氭ā鍨嬫敮鎸?*锛欴eepSeek-V3銆丵wen3-72B銆丵wen-Long
- 鉁?娴佸紡杈撳嚭锛歋SE瀹炴椂浼犺緭锛屾墦瀛楁満鏁堟灉
- 鉁?**涓婁笅鏂囩<E98F82>鐞?*锛氭櫤鑳界粍瑁咃紝鍘嗗彶瀵硅瘽锛岄」鐩<E3808D>儗鏅?
- 鉁?閿欒<EFBFBD>澶勭悊锛氬畬鏁寸殑閲嶈瘯鏈哄埗鍜岄檷绾х瓥鐣?
- 鉁?Token浼樺寲锛氱簿纭<EFBFBD><EFBFBD>鏁帮紝鎴愭湰鎺у埗
2. RAG鑳藉姏 鉁?
- 鉁?**鍚戦噺妫€绱?*锛欴ify + Qdrant锛岃<E9949B>涔夋悳绱?
- 鉁?澶氱煡璇嗗簱锛氳仈鍚堟<EFBFBD>绱<EFBFBD>紝缁撴灉鍚堝苟
- 鉁?鏅鸿兘寮曠敤锛?00%鍑嗙‘婧<E28098>簮锛屽彲鐐瑰嚮璺宠浆
- 鉁?**瑕嗙洊鐜囦紭鍖?*锛氫粠5%鎻愬崌鍒?0-50%锛?5鍊嶆彁鍗囷級
3. 鏂囨。澶勭悊鑳藉姏 鉁?
- 鉁?**澶氭牸寮忔敮鎸?*锛歅DF銆丏ocx銆乀xt
- 鉁?鏅鸿兘鎻愬彇锛歂ougat锛堝<EFBFBD>鏈<EFBFBD><EFBFBD>鏂囷級 + PyMuPDF锛堝厹搴曪級 + Mammoth锛圖ocx锛?
- 鉁?**璇<>█妫€娴?*锛氫腑鑻辨枃鑷<E69E83>姩璇嗗埆锛屼紭鍖栨彁鍙栫瓥鐣?
- 鉁?璐ㄩ噺璇勪及锛氭彁鍙栬川閲忚瘎鍒嗭紝鑷<EFBFBD>姩闄嶇骇
- 鉁?**澶ф枃浠跺<E6B5A0>鐞?*锛氭敮鎸?0MB+鏂囨。
4. 骞跺彂鎺у埗鑳藉姏 鉁?
- 鉁?闃熷垪绠$悊锛歱-queue锛屽浐瀹?骞跺彂
- 鉁?瀹归敊鏈哄埗锛歅romise.allSettled锛屽崟涓<E5B49F>け璐ヤ笉褰卞搷鍏朵粬
- 鉁?杩涘害杩借釜锛氬疄鏃剁粺璁★紝棰勪及鍓╀綑鏃堕棿
- 鉁?澶辫触閲嶈瘯锛氬け璐ラ」鍙<EFBFBD>崟鐙<EFBFBD>噸璇?
5. 鏁版嵁绠$悊鑳藉姏 鉁?
- 鉁?**鍏崇郴鏁版嵁搴?*锛歅ostgreSQL + Prisma ORM
- 鉁?**鏁版嵁闅旂<E99785>**锛氱敤鎴风骇銆侀」鐩<E3808D>骇闅旂<E99785>
- 鉁?**杞<>垹闄?*锛氬叧閿<E58FA7>暟鎹<E69A9F>彲鎭㈠<E98EAD>
- 鉁?浜嬪姟绠$悊锛欰CID淇濊瘉
- 鉁?绱㈠紩浼樺寲锛氭煡璇㈡€ц兘浼樺寲
馃搱 鎬ц兘鎸囨爣
宸叉祴璇曠殑鎬ц兘鏁版嵁
| 鎸囨爣 | 鏁板€? | 璇存槑 |
|---|---|---|
| API鍝嶅簲鏃堕棿 | < 500ms | 鏅<EFBFBD>€欰PI绔<EFBFBD>偣 |
| LLM棣栧瓧鍝嶅簲 | < 3s | DeepSeek-V3 |
| 娴佸紡杈撳嚭寤惰繜 | < 100ms | SSE chunk寤惰繜 |
| 鏂囨。涓婁紶閫熷害 | ~5MB/s | 10MB鏂囨。绾?绉? |
| PDF鎻愬彇閫熷害锛圥yMuPDF锛? | ~2椤?绉? | 20椤礟DF绾?0绉? |
| PDF鎻愬彇閫熷害锛圢ougat锛? | ~0.5椤?绉? | 20椤礟DF绾?0绉? |
| Docx鎻愬彇閫熷害 | ~1绉?MB | 10MB Docx绾?0绉? |
| Token璁℃暟閫熷害 | ~10ms/1000瀛? | Tiktoken |
| 鎵瑰<EFBFBD>鐞嗛€熷害 | ~20绉?鏂囨。 | 3骞跺彂骞冲潎 |
| RAG妫€绱㈠欢杩? | < 1s | Dify妫€绱? |
鎴愭湰鎸囨爣
| 椤圭洰 | 鎴愭湰 | 璇存槑 |
|---|---|---|
| LLM API鎴愭湰锛圖eepSeek-V3锛? | 楼1/鐧句竾tokens | 涓诲姏妯″瀷 |
| LLM API鎴愭湰锛圦wen3锛? | 楼4/鐧句竾tokens | 澶囩敤妯″瀷 |
| LLM API鎴愭湰锛圦wen-Long锛? | 楼5/鐧句竾tokens | 鍏ㄦ枃妯″紡 |
| 鍗曟<EFBFBD>瀵硅瘽鎴愭湰 | 楼0.001-0.01 | 500-5000 tokens |
| 鍏ㄦ枃绮捐<EFBFBD>鎴愭湰锛?0绡囷級 | 楼0.5-1 | 100K-200K tokens |
| 鎵瑰<EFBFBD>鐞嗘垚鏈<EFBFBD>紙50绡囷級 | 楼0.3-0.5 | 60K-100K tokens |
| 绋夸欢瀹℃煡鎴愭湰 | 楼0.05-0.1 | 10K-20K tokens |
馃毀 鎶€鏈<E282AC>€哄姟娓呭崟
楂樹紭鍏堢骇锛堝缓璁<EFBFBD>紭鍏堝<EFBFBD>鐞嗭級
-
鏃ュ織绯荤粺
- 鐜扮姸锛氬ぇ閲廲onsole.log鐢ㄤ簬璋冭瘯
- 寤鸿<EFBFBD>锛氬紩鍏ユ棩蹇楃骇鍒<EFBFBD>帶鍒讹紙winston/pino锛?
- 褰卞搷锛氱敓浜х幆澧冩棩蹇楃<EFBFBD>鐞?
-
*閿欒<EFBFBD>鐮佷綋绯?
- 鐜扮姸锛氶儴鍒咥PI缂哄皯璇︾粏閿欒<EFBFBD>淇℃伅
- 寤鸿<EFBFBD>锛氱粺涓€閿欒<EFBFBD>鐮佸拰閿欒<EFBFBD>娑堟伅
- 褰卞搷锛氬墠绔<EFBFBD>敊璇<EFBFBD><EFBFBD>鐞嗗拰鐢ㄦ埛浣撻獙
-
绫诲瀷瀹氫箟瀹屽杽
- 鐜扮姸锛氶儴鍒嗕娇鐢ㄤ簡
any绫诲瀷 - 寤鸿<EFBFBD>锛氳ˉ鍏呭畬鏁寸殑TypeScript绫诲瀷瀹氫箟
- 褰卞搷锛氫唬鐮佸彲缁存姢鎬?
- 鐜扮姸锛氶儴鍒嗕娇鐢ㄤ簡
-
Redis缂撳瓨闆嗘垚
- 鐜扮姸锛氬凡閰嶇疆浣嗘湭浣跨敤
- 寤鸿<EFBFBD>锛氱紦瀛樼儹鐐规暟鎹<EFBFBD>紙鏅鸿兘浣撻厤缃<EFBFBD>€佺煡璇嗗簱鍒楄〃锛?
- 褰卞搷锛氭€ц兘浼樺寲
涓<EFBFBD>紭鍏堢骇锛堝彲鍦ㄩ噷绋嬬<EFBFBD>2-3澶勭悊锛?
-
鍗曞厓娴嬭瘯
- 鐜扮姸锛氱己灏戠郴缁熸€ф祴璇?
- 寤鸿<EFBFBD>锛氭牳蹇冧笟鍔¢€昏緫娣诲姞鍗曞厓娴嬭瘯
- 褰卞搷锛氫唬鐮佽川閲忓拰閲嶆瀯淇″績
-
*WebSocket瀹炴椂鎺ㄩ€?
- 鐜扮姸锛氭壒澶勭悊杩涘害浣跨敤HTTP杞<EFBFBD><EFBFBD>
- 寤鸿<EFBFBD>锛氭敼涓篧ebSocket瀹炴椂鎺ㄩ€?
- 褰卞搷锛氱敤鎴蜂綋楠屼紭鍖?
-
*鏂囨。澶勭悊骞惰<EFBFBD>鍖?
- 鐜扮姸锛氭枃妗f彁鍙栦覆琛屽<EFBFBD>鐞?
- 寤鸿<EFBFBD>锛氬苟琛屾彁鍙栧<EFBFBD>涓<EFBFBD>枃妗?
- 褰卞搷锛氭壒閲忎笂浼犳€ц兘
-
API闄愭祦
- 鐜扮姸锛氭棤闄愭祦鏈哄埗
- 寤鸿<EFBFBD>锛氭坊鍔犻檺娴佷腑闂翠欢
- 褰卞搷锛氶槻姝<EFBFBD>PI婊ョ敤
馃帀 鏍稿績鎴愬氨
1. *蹇<EFBFBD>€熻凯浠h兘鍔?
- 鉁?1涓<31>湀鍐呭畬鎴?澶ф牳蹇冨姛鑳芥ā鍧?
- 鉁?姣忓懆閮芥湁鍙<E6B981><E98D99>鎴愭灉
- 鉁?鎶€鏈<E282AC>獙璇佸叏閮ㄩ€氳繃
2. AI闆嗘垚娣卞害
- 鉁?3涓狶LM妯″瀷瀹屾暣闆嗘垚
- 鉁?娴佸紡杈撳嚭浣撻獙浼樼<E6B5BC>
- 鉁?RAG妫€绱㈡晥鏋滄樉钁?
3. 鏂囨。澶勭悊鑳藉姏
- 鉁?Python寰<6E>湇鍔¢珮璐ㄩ噺鎻愬彇
- 鉁?澶氭牸寮忓叏闈㈡敮鎸?
- 鉁?鏅鸿兘闄嶇骇绛栫暐鍙<E69A90>潬
4. 浠g爜璐ㄩ噺
- 鉁?TypeScript鍏ㄨ<E98D8F>鐩?
- 鉁?娓呮櫚鐨勪笁灞傛灦鏋?
- 鉁?鑹<>ソ鐨勬ā鍧楄В鑰?
5. 鏂囨。瀹屽杽
- 鉁?璇︾粏鐨凱RD鏂囨。
- 鉁?瀹屾暣鐨勬妧鏈<E5A6A7>枃妗?
- 鉁?涓板瘜鐨勫紑鍙戞棩蹇楋紙60+绡囷級
馃摑 鎬荤粨
鐜版湁绯荤粺鐨勪紭鍔?
-
*鎶€鏈<EFBFBD>灦鏋勬垚鐔?
- 娓呮櫚鐨勪笁灞傛灦鏋勶紙Controller 鈫?Service 鈫?Database锛?
- 鑹<EFBFBD>ソ鐨勬ā鍧楀寲璁捐<EFBFBD>
- 瀹屾暣鐨凩LM閫傞厤鍣ㄦ娊璞?
-
鍔熻兘瀹屾暣鎬ч珮
- AI瀵硅瘽绯荤粺锛氣渽 瀹屾暣鍙<E69AA3>敤
- 鐭ヨ瘑搴撶郴缁燂細鉁?瀹屾暣鍙<E69AA3>敤锛圧AG + 鍏ㄦ枃锛?
- 鎵瑰<EFBFBD>鐞嗙郴缁燂細鉁?瀹屾暣鍙<E69AA3>敤
- 绋夸欢瀹℃煡锛氣渽 瀹屾暣鍙<E69AA3>敤
-
AI鑳藉姏绐佸嚭
- 澶氭ā鍨嬫敮鎸侊紝鐏垫椿鍒囨崲
- RAG妫€绱㈠噯纭<EFBFBD>紝婧<EFBFBD>簮娓呮櫚
- 鏅鸿兘寮曠敤100%鍑嗙‘
-
宸ョ▼璐ㄩ噺鑹<EFBFBD>ソ
- TypeScript鍏ㄨ<EFBFBD>鐩?
- Prisma ORM锛岀被鍨嬪畨鍏?
- 娓呮櫚鐨勪唬鐮佺粨鏋?
鐜版湁绯荤粺鐨勫眬闄?
-
鏋舵瀯灞傞潰
- 鉂?缂哄皯SSA銆丼T銆丏C妯″潡锛堟渶鏂伴渶姹傦級
- 鉂?鏈<>€冭檻绉佹湁鍖栭儴缃插拰鍗曟満鐗?
- 鉂?鏈<>€冭檻寰<E6AABB>湇鍔℃灦鏋勫拰K8s
- 鉂?鏈<>€冭檻妯″潡鍖栧敭鍗?
-
鎶€鏈<EFBFBD>爤灞傞潰
- 鉂?缂哄皯R璇<52>█闆嗘垚锛圫SA闇€瑕侊級
- 鉂?缂哄皯API缃戝叧
- 鉂?缂哄皯Electron鍗曟満鐗?
-
*鏁版嵁搴撳眰闈?
- 鉂?鍗曚竴鏁版嵁搴擄紝鏈<E7B49D>€冭檻Schema闅旂<E99785>
- 鉂?鏈<>€冭檻澶氱<E6BEB6>鎴锋灦鏋?
-
閮ㄧ讲灞傞潰
- 鉂?浠呮敮鎸佷簯绔疭aaS锛屾湭鑰冭檻鍏朵粬3绉嶉儴缃叉ā寮?
- 鉂?鏈<>€冭檻瀹瑰櫒鍖栭儴缃诧紙K8s锛?
馃敭 涓嬩竴姝ュ缓璁?
鍩轰簬鐜版湁绯荤粺鐨勬妧鏈<EFBFBD>懜搴曪紝寤鸿<EFBFBD>锛?
-
*鏄庣‘寮€鍙戦樁娈?
- 褰撳墠澶勪簬"闃舵<E99783>涓€锛氭ā鍧楀寲鍗曚綋"
- 鏄<EFBFBD>惁绔嬪嵆瑙勫垝"闃舵<E99783>浜岋細寰<E7B4B0>湇鍔℃媶鍒?锛?
- 鏄<EFBFBD>惁绔嬪嵆瑙勫垝Electron鍗曟満鐗堬紵
-
*鏄庣‘妯″潡浼樺厛绾?
- DC妯″潡锛堟暟鎹<EFBFBD>竻娲楋級锛氭牳蹇冨樊寮傚寲
- ASL妯″潡锛圓I鏅鸿兘鏂囩尞锛夛細宸叉湁閮ㄥ垎PRD
- SSA妯″潡锛堟櫤鑳界粺璁″垎鏋愶級锛氶渶瑕丷璇<EFBFBD>█
- ST妯″潡锛堢粺璁″垎鏋愬伐鍏凤級锛氱浉瀵圭畝鍗?
-
鏄庣‘鏋舵瀯婕旇繘璺<EFBFBD>緞
- 鏄<EFBFBD>惁閬靛惊鐧界毊涔︾殑鍒嗛樁娈靛疄鏂斤紵
- 鏄<EFBFBD>惁绔嬪嵆寮曞叆K8s鍜孉PI缃戝叧锛?
- 鏄<EFBFBD>惁绔嬪嵆寮曞叆R璇<EFBFBD>█鍜孭ython寰<EFBFBD>湇鍔★紵
-
鏄庣‘鏂囨。鏇存柊绛栫暐
- 绔嬪嵆鏇存柊鍝<EFBFBD>簺P0绾ф枃妗o紵
- 濡備綍鏁村悎鐜版湁鏂囨。鍜屾渶鏂伴渶姹傦紵
*鎶ュ憡瀹屾垚鏃ユ湡锛? 2025-11-06
鎶ュ憡缁存姢鑰咃細 鎶€鏈<E282AC>洟闃?
涓嬩竴姝ワ細 璁ㄨ<E79281>鎬讳綋鎶€鏈<E282AC>灦鏋勩€佹枃妗d綋绯绘瀯寤恒€佸垎姝ラ<E5A79D>瀹炴柦