Files
AIclinicalresearch/docs/00-项目概述/现有系统技术摸底报告.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

1617 lines
44 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AIclinicalresearch 鐜版湁绯荤粺鎶€鏈<E282AC>懜搴曟姤鍛?
> **鎶ュ憡鏃ユ湡锛?* 2025-11-06
> **鎶ュ憡浜猴細** 鎶€鏈<E282AC>洟闃?
> **鎶ュ憡鐩<E686A1>殑锛?* 鍏ㄩ潰姊崇悊鐜版湁绯荤粺宸插畬鎴愮殑鍔熻兘銆佹妧鏈<E5A6A7>灦鏋勩€佹暟鎹<E69A9F>簱璁捐<E79281>鍜屼唬鐮佸疄鐜帮紝涓哄悗缁<E68297>灦鏋勮<E98F8B>璁烘彁渚涘熀纭€
---
## 馃搳 鎵ц<E98EB5>鎽樿<E98EBD>
### 椤圭洰鍩烘湰淇℃伅
| 椤圭洰 | 淇℃伅 |
|------|------|
| **椤圭洰鍚嶇О** | AI绉戠爺鍔╂墜锛圓Iclinicalresearch锛?|
| **寮€鍙戝懆鏈?* | 2025-10-10 鑷充粖锛堢害1涓<31>湀锛?|
| **寮€鍙戞ā寮?* | 鏁忔嵎杩<E5B58E>唬锛孧VP浼樺厛 |
| **褰撳墠闃舵<E99783>** | 閲岀▼纰?-1.5瀹屾垚锛孭hase2/3瀹屾垚锛岀ǹ浠跺<E6B5A0>鏌ュ畬鎴?|
| **浠g爜閲?* | 鍚庣<E98D9A>~12,000琛岋紝鍓嶇<E98D93>~10,000琛岋紝Python寰<6E>湇鍔<E6B987>2,100琛?|
| **瀹屾垚搴?* | 鏍稿績鍔熻兘85%锛屽熀纭€鏋舵瀯100% |
### 鏍稿績鎴愭灉
鉁?**宸插畬鎴?澶ф牳蹇冨姛鑳芥ā鍧?*
鉁?**瀹屾暣鐨勬妧鏈<E5A6A7>灦鏋勪綋绯?*
鉁?**鎴愮啛鐨凙I闆嗘垚鑳藉姏**
鉁?**瀹屽杽鐨勬枃妗d綋绯?*
---
## 馃幆 宸插畬鎴愬姛鑳芥竻鍗?
### 1. **AI鏅鸿兘闂<E58598>瓟绯荤粺**锛堥噷绋嬬<E7BB8B>1鏍稿績锛?
#### 1.1 鏅鸿兘浣撻厤缃<E58EA4>郴缁?
**瀹屾垚鏃堕棿锛?* Day 10-11
**鏍稿績鑳藉姏锛?*
- 鉁?12涓<32>櫤鑳戒綋鐨刌AML閰嶇疆妗嗘灦
- 鉁?鍔ㄦ€丳rompt妯℃澘鍔犺浇锛圫ystem + User锛?
- 鉁?鍙橀噺鏇挎崲鍜屾潯浠舵覆鏌?
- 鉁?鐑<>洿鏂版敮鎸?
- 鉁?妯″瀷鍙傛暟閰嶇疆锛坱emperature, maxTokens, topP锛?
**宸插紑鍙戞櫤鑳戒綋锛?*
1. **閫夐<E996AB>璇勪环鏅鸿兘浣?* - 鍥涚淮搴﹁瘎浠锋<E6B5A0>鏋讹紙鍒涙柊鎬с€佷复搴婁环鍊笺€佺<E282AC>瀛︽€с€佸彲琛屾€э級
**閰嶇疆鏂囦欢锛?*
- `backend/config/agents.yaml` (348琛?
- `backend/prompts/topic_evaluation_system.txt` (143琛?
- `backend/prompts/topic_evaluation_user.txt` (12琛?
**鎶€鏈<E282AC>灦鏋勶細**
```typescript
// 鏅鸿兘浣撴湇鍔″眰
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>€氭ā寮忥級
**鎶€鏈<E282AC>疄鐜帮細**
```typescript
// 瀵硅瘽鏈嶅姟灞?
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绔<49>偣锛?*
- `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>
- 鉁?宸ュ巶妯″紡瀹炵幇锛屾槗浜庢墿灞?
**鎶€鏈<E282AC>灦鏋勶細**
```typescript
// 閫傞厤鍣ㄦ帴鍙?
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** | 澶囩敤 | 涓<>枃鐞嗚В濂?| 128K | 楼4/鐧句竾 |
| **Qwen-Long** | 鍏ㄦ枃 | 1M瓒呴暱涓婁笅鏂?| 1M | 楼5/鐧句竾 |
---
#### 1.4 椤圭洰绠$悊绯荤粺
**瀹屾垚鏃堕棿锛?* Day 8-9
**鏍稿績鑳藉姏锛?*
- 鉁?椤圭洰CRUD锛堝垱寤恒€佽<E282AC>鍙栥€佹洿鏂般€佸垹闄わ級
- 鉁?椤圭洰鑳屾櫙绠悊锛堝姩鎬佹敞鍏ュ埌AI瀵硅瘽锛?
- 鉁?杞<>垹闄ゆ満鍒?
- 鉁?鐢ㄦ埛椤圭洰鍏宠仈
**鏁版嵁妯″瀷锛?*
```prisma
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绔<49>偣锛?*
- `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>枃妗
- 鉁?鏂囦欢鏍煎紡鍜屽ぇ灏忛檺鍒讹紙鏈€澶?0MB锛?
**鎶€鏈<E282AC>泦鎴愶細**
- **Dify骞冲彴** - RAG鐭ヨ瘑搴撶<E690B4>鐞?
- **Qdrant鍚戦噺鏁版嵁搴?* - Dify鍐呯疆
- **澶氱<E6BEB6>鎴锋灦鏋?* - 姣忎釜鐭ヨ瘑搴撶嫭绔婦ataset
**鏁版嵁妯″瀷锛?*
```prisma
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绔<49>偣锛?*
- `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锛?
- 鉁?澶氱煡璇嗗簱鑱斿悎妫€绱?
- 鉁?@鐭ヨ瘑搴撳姛鑳斤紙鍓嶇<EFBFBD>涓嬫媺閫夋嫨锛?
- 鉁?妫€绱㈢粨鏋滄敞鍏ュ埌LLM涓婁笅鏂?
- 鉁?**鏅鸿兘寮曠敤绯荤粺**锛?00%鍑嗙<E28098>簮锛?
**浼樺寲鎴愭灉锛?*
| 鎸囨爣 | 浼樺寲鍓?| 浼樺寲鍚?| 鎻愬崌 |
|------|--------|--------|------|
| 妫€绱㈡暟閲?| 3 chunks | 15 chunks | **5鍊?* |
| Chunk澶у皬 | 500 tokens | 1500 tokens | **3鍊?* |
| **鎬昏<E98EAC>鐩?* | **1,500 tokens** | **22,500 tokens** | **15鍊?* |
| 瑕嗙洊椤垫暟 | ~1椤?| ~15-20椤?| **15-20鍊?* |
| 瑕嗙洊鐜?| ~5% | ~40-50% | **8-10鍊?* |
**鏅鸿兘寮曠敤绯荤粺锛?*
```typescript
// 鍚庣<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>缁忛€€琛屾€х柧鐥?.."
```
**鍓嶇<E98D93>瑙嗚<E79199>浼樺寲锛?*
- `[鏉ユ簮N]`锛氳摑鑹查珮浜産adge锛?1890ff锛?
- 榧犳爣鎮<E788A3>仠锛氳儗鏅<E58497>彉娣憋紙#bae7ff锛?
- 鐐瑰嚮璺宠浆锛氬钩婊戞粴鍔ㄥ埌寮曠敤璇︽儏
- 璇︽儏闂<E5848F>儊锛氶粍鑹查珮浜?绉掞紙#fffbe6锛?
---
#### 2.3 鍏ㄦ枃闃呰<E99783>妯″紡锛圥hase2锛?
**瀹屾垚鏃堕棿锛?* Day 28-32
**鏍稿績鑳藉姏锛?*
- 鉁?**Python寰<6E>湇鍔?*锛氭枃妗f彁鍙栨湇鍔?
- 鉁?**澶氭牸寮忔敮鎸?*锛歅DF銆丏ocx銆乀xt
- 鉁?**鏅鸿兘鎻愬彇**锛歂ougat锛堣嫳鏂囧<E98F82><EFBFBD>級 + PyMuPDF锛堝厹搴?涓<>枃锛?+ Mammoth锛圖ocx锛?
- 鉁?**璇<>█妫€娴?*锛氳嚜鍔ㄨ瘑鍒<E79891>腑鑻辨枃锛屼紭鍖栨彁鍙栫瓥鐣?
- 鉁?**Token绠悊**锛氱簿纭<E7B0BF><E7BAAD>鏁帮紝鍙岄噸闄愬埗锛?0鏂囦欢 + 980K tokens锛?
- 鉁?**鍏ㄦ枃瀛樺偍**锛氭暟鎹<E69A9F>簱淇濆瓨瀹屾暣鏂囨湰
- 鉁?**鏅鸿兘鏂囨。閫夋嫨**锛氬熀浜嶵oken瀹归噺鐨勬櫤鑳芥帹鑽?
**鎶€鏈<E282AC>灦鏋勶細**
```
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Frontend (React) 鈹?
鈹? - 鏂囨。涓婁紶 鈹?
鈹? - 瀹归噺鏄剧ず锛堝弻杩涘害鏉★級 鈹?
鈹? - 瀹炴椂杩涘害 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?REST API
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Backend (Node.js + Fastify) 鈹?
鈹? - ExtractionClient 鈹?
鈹? - TokenService 鈹?
鈹? - 鏅鸿兘鏂囨。閫夋嫨 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?HTTP
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈻尖攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹? Python Microservice (FastAPI) 鈹?
鈹? 鈹溾攢鈹€ PyMuPDF (蹇<>€燂紝涓<E7B49D>枃鍙嬪ソ) 鈹?
鈹? 鈹溾攢鈹€ Nougat (瀛︽湳璁烘枃锛岄珮璐ㄩ噺) 鈹?
鈹? 鈹溾攢鈹€ Mammoth (Docx 鈫?Markdown) 鈹?
鈹? 鈹溾攢鈹€ Language Detector 鈹?
鈹? 鈹斺攢鈹€ Quality Evaluator 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
```
**鎻愬彇绛栫暐锛?*
```typescript
// 璇<>█妫€娴?鈫?閫夋嫨鎻愬彇鏂规硶
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寰<6E>湇鍔℃枃浠剁粨鏋勶細**
```
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闆嗘垚锛?*
```typescript
// 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绔<49>偣锛?*
- `POST /api/v1/knowledge-bases/:id/document-selection` - 鏅鸿兘鏂囨。閫夋嫨
- `GET /api/v1/knowledge-bases/:id/capacity` - 鑾峰彇瀹归噺淇℃伅
---
### 3. **鎵瑰<E98EB5>鐞嗘ā寮?*锛圥hase3锛?
#### 3.1 鏍稿績鑳藉姏
**瀹屾垚鏃堕棿锛?* Day 29锛?灏忔椂锛?
**瀹氫綅锛?* 浠诲姟寮忎氦浜掞紙闈炲<E99788>璇濓級锛岀粨鏋勫寲鏁版嵁鎻愬彇鍣?
**鏍稿績鍔熻兘锛?*
- 鉁?**棰勮<E6A3B0>妯℃澘**锛氫复搴婄爺绌朵俊鎭<E4BF8A>彁鍙栵紙8瀛楁<E7809B>锛?
- 鉁?**鑷<>畾涔夋ā鏉?*锛氱敤鎴锋彁绀鸿瘝 鈫?鏂囨湰鍧楁樉绀?
- 鉁?**鎵归噺澶勭悊**锛?-50绡囨枃鐚?
- 鉁?**鍥哄畾3骞跺彂**锛坧-queue锛?
- 鉁?**澶辫触閲嶈瘯鏈哄埗**
- 鉁?**Excel瀵煎嚭**锛堝弻Sheet璁捐<E79281>锛?
**鏁版嵁妯″瀷锛?*
```prisma
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])
}
```
**棰勮<E6A3B0>妯℃澘锛堜复搴婄爺绌朵俊鎭<E4BF8A>彁鍙栵級锛?*
| 瀛楁<E7809B> | 绫诲瀷 | 璇存槑 |
|------|------|------|
| research_purpose | text | 鐮旂┒鐩<E29492>殑 |
| research_design | text | 鐮旂┒璁捐<E79281>锛圧CT/闃熷垪鐮旂┒绛夛級 |
| research_subjects | text | 鐮旂┒瀵硅薄锛堢撼鍏?鎺掗櫎鏍囧噯锛?|
| sample_size | **text** | 鏍锋湰閲忥紙淇濈暀鍘熸枃鎻忚堪锛?|
| intervention_group | text | 骞查<E9AA9E>缁?|
| control_group | text | 瀵圭収缁?|
| results_data | longtext | 缁撴灉鍙婃暟鎹?|
| oxford_level | text | 鐗涙触璇勭骇锛?a/1b/2a/2b/3a/3b/4/5锛?|
**鎶€鏈<E282AC>疄鐜帮細**
```typescript
// 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. 瑙瀽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瑙
export function extractJSON(text: string): object {
// 鏀<>寔澶氱<E6BEB6>鏍煎紡
// 1. 绾疛SON锛歿 "key": "value" }
// 2. 甯﹀墠瑷€锛氳繖鏄<E7B996>粨鏋滐細\n{ ... }
// 3. 浠g爜鍧楋細```json\n{ ... }\n```
// 4. 甯﹀悗缂€锛歿 ... }\n\n浠ヤ笂鏄<E7AC82>粨鏋?
}
```
**API绔<49>偣锛?*
- `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鍒嗛挓
- 鎵瑰<E98EB5>鐞嗘ā寮忥細10绡?脳 骞冲潎20绉?= ~7鍒嗛挓
- **鎻愬崌绾?4鍊嶆晥鐜?* 馃殌
---
### 4. **绋夸欢瀹℃煡鍔熻兘**锛圖ay 30鐙<30>珛寮€鍙戯級
#### 4.1 鏍稿績鑳藉姏
**瀹屾垚鏃堕棿锛?* Day 30锛?澶╋級
**瀹氫綅锛?* 鐙<>珛鐨勭ǹ浠舵櫤鑳藉<E991B3>鏌ョ郴缁?
**鏍稿績鍔熻兘锛?*
- 鉁?**鍙岀淮搴﹁瘎浼?*锛氱ǹ绾﹁<E7BBBE>鑼冩€э紙11椤癸級 + 鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛?
- 鉁?**鏅鸿兘鍒嗘瀽**锛氬熀浜庣湡瀹炴湡鍒婃爣鍑嗭紙涓<E7B499>崕鍖诲<E98D96>瓒呭鏉傚織锛?
- 鉁?**瀹屾暣娴佺▼**锛氫笂浼燱ord 鈫?鎻愬彇鏂囨湰 鈫?AI璇勪及 鈫?鐢熸垚鎶ュ憡 鈫?瀵煎嚭PDF
- 鉁?**鐢ㄦ埛浣撻獙**锛氭笎鍙樺崱鐗囥€佹嫋鎷戒笂浼犮€佸疄鏃惰繘搴︺€侀<E282AC>鑹茬紪鐮?
**璇勪及鏍囧噯锛?*
**绋跨害瑙勮寖鎬ц瘎浼帮紙11椤癸級锛?*
1. 鏂囬<E98F82>锛圱itle锛?
2. 浣滆€咃紙Authors锛?
3.<>枃鎽樿<E98EBD>锛圕hinese Abstract锛?
4. 鑻辨枃鎽樿<E98EBD>锛圗nglish Abstract锛?
5.<>枃鍏抽敭璇嶏紙Chinese Keywords锛?
6. 鑻辨枃鍏抽敭璇嶏紙English Keywords锛?
7.枃锛圡ain Text锛?
8. 鍙傝€冩枃鐚<E69E83>紙References锛?
9. 鍥捐〃锛團igures and Tables锛?
10. 鍒╃泭鍐茬獊锛圕onflict of Interest锛?
11. 浼︾悊瀹℃煡锛圗thics Approval锛?
**鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛夛細**
1. 绉戠爺璁捐<E79281>锛圧esearch Design锛?
2. 缁熻<E7BC81>鏂规硶锛圫tatistical Methods锛?
3. 缁熻<E7BC81>鍒嗘瀽锛圫tatistical Analysis锛?
**鏁版嵁妯″瀷锛?*
```prisma
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璁捐<E79281>锛?*
```typescript
// 绋跨害瑙勮寖鎬ц瘎浼癙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": []
},
...
]
}
```
```typescript
// 鏂规硶瀛﹁瘎浼癙rompt (231琛?
// prompts/methodology_review_system.txt
<EFBFBD><EFBFBD>︿<EFBFBD>ǹ?
?
1. <EFBFBD>
-
- <EFBFBD>?
- <EFBFBD>?
2. <EFBFBD>
-
-
- <EFBFBD>?
3. <EFBFBD>
-
-
- <EFBFBD>?
```
**鎶€鏈<E282AC>疄鐜帮細**
```typescript
// 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绔<49>偣锛?*
- `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` - 鍒犻櫎浠诲姟
**鍓嶇<E98D93>缁勪欢锛?*
```tsx
// ReviewPage.tsx (625琛? - 涓婚〉闈?
// 鍖呭惈锛氫笂浼犲尯 + 杩涘害鏉?+ 鎶ュ憡灞曠ず + PDF瀵煎嚭
// ScoreCard.tsx - 鍒嗘暟鍗墖锛堥<E9949B>鑹茬紪鐮侊級
// EditorialReview.tsx - 绋跨害瑙勮寖鎬ц瘎浼拌<E6B5BC>鎯?
// MethodologyReview.tsx - 鏂规硶瀛﹁瘎浼拌<E6B5BC>鎯?
```
---
## 馃彈锔?鎶€鏈<E282AC>灦鏋勬€昏<E282AC>
### 1. **鎶€鏈<E282AC>爤**
#### 鍚庣<E98D9A>鎶€鏈<E282AC>
```typescript
稿?
- 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瑙)
- dotenv (<EFBFBD><EFBFBD>)
```
#### 鍓嶇<E98D93>鎶€鏈<E282AC>
```typescript
稿?
- 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寰<6E>湇鍔?
```python
鏍稿績妗嗘灦锛?
- 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. **鏁版嵁搴撹<E690B4>璁?*
#### 鏍稿績琛ㄧ粨鏋勶紙13涓<33>〃锛?
**鐢ㄦ埛鐩稿叧锛?涓<>〃锛夛細**
```prisma
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
}
```
**椤圭洰绠$悊锛?涓<>〃锛夛細**
```prisma
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])
}
```
**瀵硅瘽绯荤粺锛?涓<>〃锛夛細**
```prisma
// 椤圭洰瀵硅瘽
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涓<32>〃锛夛細**
```prisma
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])
}
```
**鎵瑰<E98EB5>鐞嗙郴缁燂紙2涓<32>〃锛夛細**
```prisma
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])
}
```
**绋夸欢瀹℃煡锛?涓<>〃锛夛細**
```prisma
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])
}
```
**杩愯惀绠$悊锛?涓<>〃锛夛細**
```prisma
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涓<33>〃锛寏80涓<30>瓧娈?*
---
### 3. **浠g爜缁撴瀯**
#### 鍚庣<E98D9A>爜缁撴瀯
```
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瑙
鈹? 鈹溾攢鈹€ 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
鎬昏<EFBFBD>锛殈12,000琛屼唬鐮?
```
#### 鍓嶇<E98D93>爜缁撴瀯
```
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
鎬昏<EFBFBD>锛殈10,000琛屼唬鐮?
```
#### Python寰<6E>湇鍔粨鏋?
```
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
鎬昏<EFBFBD>锛殈2,100琛屼唬鐮?
```
---
## 馃搳 鏁版嵁娴佹灦鏋?
### 1. **AI瀵硅瘽娴佺▼**
```
鐢ㄦ埛杈撳叆
鈫?
鍓嶇<EFBFBD> ChatPage/AgentChatPage
鈫?POST /api/v1/conversations/:id/messages/stream
鍚庣<EFBFBD> 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
鈫?(娴佸紡杩斿洖)
鍚庣<EFBFBD> conversationService
鈹溾啋 瀹炴椂鍐欏叆鏁版嵁搴擄紙messages琛<73>
鈹斺啋 SSE娴佸紡杩斿洖鍓嶇<E98D93>
鈫?
鍓嶇<EFBFBD> MessageList
鈹斺啋 瀹炴椂娓叉煋锛堟墦瀛楁満鏁堟灉锛?
```
---
### 2. **鐭ヨ瘑搴揜AG娴佺▼**
```
鐢ㄦ埛涓婁紶鏂囨。
鈫?
鍓嶇<EFBFBD> DocumentUpload
鈫?POST /api/v1/knowledge-bases/:id/documents
鍚庣<EFBFBD> documentController
鈫?
documentService.uploadDocument()
鈹溾啋 淇濆瓨鏂囦欢鍒颁复鏃剁洰褰?
鈹溾啋 璋冪敤Python寰<6E>湇鍔℃彁鍙栨枃鏈?(Phase2)
鈹溾啋 璁畻Token鏁?(Phase2)
鈹溾啋 妫€鏌ュ<E98F8C>閲忛檺鍒?(Phase2)
鈹溾啋 涓婁紶鍒癉ify (RAG绱㈠紩)
鈹溾啋 淇濆瓨鍏ㄦ枃鍒版暟鎹<E69A9F>簱 (Phase2)
鈹斺啋 鏇存柊鐭ヨ瘑搴撶粺璁?
鈫?
鍚庡彴杞<EFBFBD><EFBFBD>Dify澶勭悊鐘舵€?
鈹斺啋 鏇存柊document.status
---
鐢ㄦ埛@鐭ヨ瘑搴撴彁闂?
鈫?
鍓嶇<EFBFBD> MessageInput (閫夋嫨鐭ヨ瘑搴?
鈫?POST /api/v1/conversations/:id/messages/stream
鍚庣<EFBFBD> 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鏍煎紡锛?
鈫?
鍓嶇<EFBFBD> MessageList
鈹溾啋 瑙瀽寮曠敤鏍囪<E98F8D>
鈹溾啋 楂樹寒鏄剧ず[鏉ユ簮N]
鈹溾啋 鐐瑰嚮璺宠浆鍒板紩鐢ㄨ<E990A2>鎯?
鈹斺啋 璇︽儏鍖哄煙楂樹寒闂<E5AF92>
```
---
### 3. **鎵瑰<E98EB5>鐞嗘祦绋?*
```
鐢ㄦ埛閫夋嫨鏂囩尞 + 閰嶇疆浠诲姟
鈫?
鍓嶇<EFBFBD> BatchMode
鈫?POST /api/v1/batch/execute
鍚庣<EFBFBD> batchController
鈫?
batchService.executeBatchTask()
鈹溾啋 鍒涘缓BatchTask璁板綍
鈹溾啋 鍔犺浇棰勮<E6A3B0>妯℃澘鎴栬嚜瀹氫箟Prompt
鈹斺啋 寮傛<E5AFAE>鎵ц<E98EB5>鎵瑰<E98EB5>鐞?
鈫?
骞跺彂闃熷垪锛坧-queue锛屽浐瀹?骞跺彂锛?
鈹溾啋 processDocument(doc1)
鈹溾啋 processDocument(doc2)
鈹斺啋 processDocument(doc3)
鈫?姣忎釜鏂囨。澶勭悊
鈹溾啋 鑾峰彇鏂囨。鍏ㄦ枃锛坉atabase锛?
鈹溾啋 鏋勯€燣LM娑堟伅锛圫ystem + User + 鏂囨。鍏ㄦ枃锛?
鈹溾啋 璋冪敤LLM API
鈹溾啋 瑙瀽JSON锛堥<E9949B>璁撅級鎴栦繚瀛樻枃鏈<E69E83>紙鑷<E7B499>畾涔夛級
鈹斺啋 淇濆瓨BatchResult璁板綍
鈫?
鍚庡彴鏇存柊浠诲姟缁熻<EFBFBD>
鈹斺啋 completedCount, failedCount, status
---
鍓嶇<EFBFBD><EFBFBD><EFBFBD>浠诲姟鐘舵€?
鈫?GET /api/v1/batch/tasks/:taskId (姣?绉?
鍚庣<EFBFBD>杩斿洖浠诲姟杩涘害
鈹溾啋 status, totalCount, completedCount, failedCount
鈹斺啋 棰勪及鍓╀綑鏃堕棿
鈫?
浠诲姟瀹屾垚鍚?
鈫?GET /api/v1/batch/tasks/:taskId/results
鍚庣<EFBFBD>杩斿洖瀹屾暣缁撴灉
鈹溾啋 棰勮<E6A3B0>妯℃澘锛?鍒楄〃鏍?
鈹溾啋 鑷<>畾涔夋ā鏉匡細3鍒楁枃鏈<E69E83>
鈹斺啋 澶辫触椤瑰垪琛?
鈫?
鍓嶇<EFBFBD> BatchResults
鈹溾啋 娓叉煋缁撴灉琛ㄦ牸
鈹溾啋 瀵煎嚭Excel锛堝弻Sheet锛?
鈹斺啋 閲嶈瘯澶辫触椤?
```
---
## 馃捑 鏁版嵁缁熻<E7BC81>
### 浠g爜閲忕粺璁?
| 妯″潡 | 鏂囦欢鏁?| 浠g爜琛屾暟 | 鍗犳瘮 |
|------|-------|---------|------|
| **鍚庣<E98D9A>涓讳唬鐮?* | 38 | ~12,000 | 50% |
| **鍓嶇<E98D93>涓讳唬鐮?* | 75 | ~10,000 | 42% |
| **Python寰<6E>湇鍔?* | 8 | ~2,100 | 8% |
| **鎬昏<E98EAC>** | **121** | **~24,100** | **100%** |
### 鏁版嵁搴撶粺璁?
| 绫诲埆 | 鏁伴噺 |
|------|------|
| **琛?* | 13 |
| **瀛楁<E7809B>** | ~80 |
| **绱㈠紩** | ~20 |
| **鍏崇郴** | 15 |
### API绔<49>偣缁熻<E7BC81>
| 妯″潡 | 绔<>偣鏁?|
|------|-------|
| 椤圭洰绠$悊 | 5 |
| 鏅鸿兘浣撶<E6B5A3>鐞?| 4 |
| 瀵硅瘽绯荤粺 | 8 |
| 鐭ヨ瘑搴撶<E690B4>鐞?| 12 |
| 鎵瑰<E98EB5>鐞嗙郴缁?| 5 |
| 绋夸欢瀹℃煡 | 5 |
| **鎬昏<E98EAC>** | **39** |
---
## 馃幆 宸查獙璇佺殑鎶€鏈<E282AC>兘鍔?
### 1. AI闆嗘垚鑳藉姏 鉁?
- 鉁?**澶氭ā鍨嬫敮鎸?*锛欴eepSeek-V3銆丵wen3-72B銆丵wen-Long
- 鉁?**娴佸紡杈撳嚭**锛歋SE瀹炴椂浼犺緭锛屾墦瀛楁満鏁堟灉
- 鉁?**涓婁笅鏂囩<E98F82>鐞?*锛氭櫤鑳界粍瑁咃紝鍘嗗彶瀵硅瘽锛岄」鐩<E3808D>儗鏅?
- 鉁?**閿欒<E996BF>澶勭悊**锛氬畬鏁寸殑閲嶈瘯鏈哄埗鍜岄檷绾х瓥鐣?
- 鉁?**Token浼樺寲**锛氱簿纭<E7B0BF><E7BAAD>鏁帮紝鎴愭湰鎺у
### 2. RAG鑳藉姏 鉁?
- 鉁?**鍚戦噺妫€绱?*锛欴ify + Qdrant锛岃<E9949B>涔夋悳绱?
- 鉁?**澶氱煡璇嗗簱**锛氳仈鍚堟<E98D9A><EFBFBD>紝缁撴灉鍚堝苟
- 鉁?**鏅鸿兘寮曠敤**锛?00%鍑嗙<E28098>簮锛屽彲鐐瑰嚮璺宠浆
- 鉁?**瑕嗙洊鐜囦紭鍖?*锛氫粠5%鎻愬崌鍒?0-50%锛?5鍊嶆彁鍗囷級
### 3. 鏂囨。澶勭悊鑳藉姏 鉁?
- 鉁?**澶氭牸寮忔敮鎸?*锛歅DF銆丏ocx銆乀xt
- 鉁?**鏅鸿兘鎻愬彇**锛歂ougat锛堝<E9949B><EFBFBD><E98F88>鏂囷級 + PyMuPDF锛堝厹搴曪級 + Mammoth锛圖ocx锛?
- 鉁?**璇<>█妫€娴?*锛氫腑鑻辨枃鑷<E69E83>姩璇嗗埆锛屼紭鍖栨彁鍙栫瓥鐣?
- 鉁?**璐ㄩ噺璇勪及**锛氭彁鍙栬川閲忚瘎鍒嗭紝鑷<E7B49D>姩闄嶇骇
- 鉁?**澶ф枃浠跺<E6B5A0>鐞?*锛氭敮鎸?0MB+鏂囨。
### 4. 骞跺彂鎺у埗鑳藉姏 鉁?
- 鉁?**闃熷垪绠$悊**锛歱-queue锛屽浐瀹?骞跺彂
- 鉁?**瀹归敊鏈哄埗**锛歅romise.allSettled锛屽崟涓<E5B49F>け璐ヤ笉褰卞搷鍏朵粬
- 鉁?**杩涘害杩借釜**锛氬疄鏃剁粺璁★紝棰勪及鍓╀綑鏃堕棿
- 鉁?**澶辫触閲嶈瘯**锛氬け璐ラ」鍙<E3808D>崟鐙<E5B49F>噸璇?
### 5. 鏁版嵁绠$悊鑳藉姏 鉁?
- 鉁?**鍏崇郴鏁版嵁搴?*锛歅ostgreSQL + Prisma ORM
- 鉁?**鏁版嵁闅旂<E99785>**锛氱敤鎴风骇銆侀」鐩<E3808D>骇闅旂<E99785>
- 鉁?**杞<>垹闄?*锛氬叧閿<E58FA7>暟鎹<E69A9F>彲鎭㈠<E98EAD>
- 鉁?**浜嬪姟绠$悊**锛欰CID淇濊瘉
- 鉁?**绱㈠紩浼樺寲**锛氭煡璇㈡€ц兘浼樺寲
---
## 馃搱 鎬ц兘鎸囨爣
### 宸叉祴璇曠殑鎬ц兘鏁版嵁
| 鎸囨爣 | 鏁板€?| 璇存槑 |
|------|------|------|
| API鍝嶅簲鏃堕棿 | < 500ms | 鏅<>€欰PI绔<49>偣 |
| 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 |
| 鎵瑰<E98EB5>鐞嗛€熷害 | ~20绉?鏂囨。 | 3骞跺彂骞冲潎 |
| RAG妫€绱㈠欢杩?| < 1s | Dify妫€绱?|
### 鎴愭湰鎸囨爣
| 椤圭洰 | 鎴愭湰 | 璇存槑 |
|------|------|------|
| LLM API鎴愭湰锛圖eepSeek-V3锛?| 楼1/鐧句竾tokens | 涓诲姏妯″瀷 |
| LLM API鎴愭湰锛圦wen3锛?| 楼4/鐧句竾tokens | 澶囩敤妯″瀷 |
| LLM API鎴愭湰锛圦wen-Long锛?| 楼5/鐧句竾tokens | 鍏ㄦ枃妯″紡 |
| 鍗曟<E98D97>瀵硅瘽鎴愭湰 | 楼0.001-0.01 | 500-5000 tokens |
| 鍏ㄦ枃绮捐<E7BBAE>鎴愭湰锛?0绡囷級 | 楼0.5-1 | 100K-200K tokens |
| 鎵瑰<E98EB5>鐞嗘垚鏈<E59E9A>紙50绡囷級 | 楼0.3-0.5 | 60K-100K tokens |
| 绋夸欢瀹℃煡鎴愭湰 | 楼0.05-0.1 | 10K-20K tokens |
---
## 馃毀 鎶€鏈<E282AC>€哄姟娓呭崟
### 楂樹紭鍏堢骇锛堝缓璁<E7BC93>紭鍏堝<E98D8F>鐞嗭級
1. **鏃ュ織绯荤粺**
- 鐜扮姸锛氬ぇ閲廲onsole.log鐢ㄤ簬璋冭瘯
- 寤鸿<E5AFA4>锛氬紩鍏ユ棩蹇楃骇鍒<E9AA87>帶鍒讹紙winston/pino锛?
- 褰卞搷锛氱敓浜х幆澧冩棩蹇楃<E8B987>鐞?
2. **閿欒<E996BF>鐮佷綋绯?*
- 鐜扮姸锛氶儴鍒咥PI缂哄皯璇︾粏閿欒<E996BF>淇℃伅
- 寤鸿<E5AFA4>锛氱粺涓€閿欒<E996BF>鐮佸拰閿欒<E996BF>娑堟伅
- 褰卞搷锛氬墠绔<E5A2A0>敊璇<E6958A><E79287>鐞嗗拰鐢ㄦ埛浣撻獙
3. **绫诲瀷瀹氫箟瀹屽杽**
- 鐜扮姸锛氶儴鍒嗕娇鐢ㄤ簡`any`绫诲瀷
- 寤鸿<E5AFA4>锛氳ˉ鍏呭畬鏁寸殑TypeScript绫诲瀷瀹氫箟
- 褰卞搷锛氫唬鐮佸彲缁存姢鎬?
4. **Redis缂撳瓨闆嗘垚**
- 鐜扮姸锛氬凡閰嶇疆浣嗘湭浣跨敤
- 寤鸿<E5AFA4>锛氱紦瀛樼儹鐐规暟鎹<E69A9F>紙鏅鸿兘浣撻厤缃<E58EA4>€佺煡璇嗗簱鍒楄〃锛?
- 褰卞搷锛氭€ц兘浼樺寲
### 涓<>紭鍏堢骇锛堝彲鍦ㄩ噷绋嬬<E7BB8B>2-3澶勭悊锛?
5. **鍗曞厓娴嬭瘯**
- 鐜扮姸锛氱己灏戠郴缁熸€ф祴璇?
- 寤鸿<E5AFA4>锛氭牳蹇冧笟鍔¢€昏緫娣诲姞鍗曞厓娴嬭瘯
- 褰卞搷锛氫唬鐮佽川閲忓拰閲嶆瀯淇″績
6. **WebSocket瀹炴椂鎺ㄩ€?*
- 鐜扮姸锛氭壒澶勭悊杩涘害浣跨敤HTTP杞<50><E69D9E>
- 寤鸿<E5AFA4>锛氭敼涓篧ebSocket瀹炴椂鎺ㄩ€?
- 褰卞搷锛氱敤鎴蜂綋楠屼紭鍖?
7. **鏂囨。澶勭悊骞惰<E9AA9E>鍖?*
- 鐜扮姸锛氭枃妗彁鍙栦覆琛屽<E7909B>鐞?
- 寤鸿<E5AFA4>锛氬苟琛屾彁鍙栧<E98D99><EFBFBD>枃妗?
- 褰卞搷锛氭壒閲忎笂浼犳€ц兘
8. **API闄愭祦**
- 鐜扮姸锛氭棤闄愭祦鏈哄埗
- 寤鸿<E5AFA4>锛氭坊鍔犻檺娴佷腑闂翠欢
- 褰卞搷锛氶槻姝<E6A7BB>PI婊ョ敤
---
## 馃帀 鏍稿績鎴愬氨
### 1. **蹇<>€熻凯浠兘鍔?*
- 鉁?1涓<31>湀鍐呭畬鎴?澶ф牳蹇冨姛鑳芥ā鍧?
- 鉁?姣忓懆閮芥湁鍙<E6B981><E98D99>鎴愭灉
- 鉁?鎶€鏈<E282AC>獙璇佸叏閮ㄩ€氳繃
### 2. **AI闆嗘垚娣卞害**
- 鉁?3涓狶LM妯″瀷瀹屾暣闆嗘垚
- 鉁?娴佸紡杈撳嚭浣撻獙浼樼<E6B5BC>
- 鉁?RAG妫€绱㈡晥鏋滄樉钁?
### 3. **鏂囨。澶勭悊鑳藉姏**
- 鉁?Python寰<6E>湇鍔¢珮璐ㄩ噺鎻愬彇
- 鉁?澶氭牸寮忓叏闈㈡敮鎸?
- 鉁?鏅鸿兘闄嶇骇绛栫暐鍙<E69A90>
### 4. **浠g爜璐ㄩ噺**
- 鉁?TypeScript鍏ㄨ<E98D8F>鐩?
- 鉁?娓呮櫚鐨勪笁灞傛灦鏋?
- 鉁?鑹<>ソ鐨勬ā鍧楄В鑰?
### 5. **鏂囨。瀹屽杽**
- 鉁?璇︾粏鐨凱RD鏂囨。
- 鉁?瀹屾暣鐨勬妧鏈<E5A6A7>枃妗?
- 鉁?涓板瘜鐨勫紑鍙戞棩蹇楋紙60+绡囷級
---
## 馃摑 鎬荤粨
### 鐜版湁绯荤粺鐨勪紭鍔?
1. **鎶€鏈<E282AC>灦鏋勬垚鐔?*
- 娓呮櫚鐨勪笁灞傛灦鏋勶紙Controller 鈫?Service 鈫?Database锛?
-<>ソ鐨勬ā鍧楀寲璁捐<E79281>
- 瀹屾暣鐨凩LM閫傞厤鍣ㄦ娊璞?
2. **鍔熻兘瀹屾暣鎬ч珮**
- AI瀵硅瘽绯荤粺锛氣渽 瀹屾暣鍙<E69AA3>
- 鐭ヨ瘑搴撶郴缁燂細鉁?瀹屾暣鍙<E69AA3>敤锛圧AG + 鍏ㄦ枃锛?
- 鎵瑰<E98EB5>鐞嗙郴缁燂細鉁?瀹屾暣鍙<E69AA3>
- 绋夸欢瀹℃煡锛氣渽 瀹屾暣鍙<E69AA3>
3. **AI鑳藉姏绐佸嚭**
- 澶氭ā鍨嬫敮鎸侊紝鐏垫椿鍒囨崲
- RAG妫€绱㈠噯纭<E599AF>紝婧<E7B49D>簮娓呮櫚
- 鏅鸿兘寮曠敤100%鍑嗙‘
4. **宸ョ▼璐ㄩ噺鑹<E599BA>**
- TypeScript鍏ㄨ<E98D8F>鐩?
- Prisma ORM锛岀被鍨嬪畨鍏?
- 娓呮櫚鐨勪唬鐮佺粨鏋?
### 鐜版湁绯荤粺鐨勫眬闄?
1. **鏋舵瀯灞傞潰**
- 鉂?缂哄皯SSA銆丼T銆丏C妯″潡锛堟渶鏂伴渶姹傦級
- 鉂?鏈<>€冭檻绉佹湁鍖栭儴缃插拰鍗曟満鐗?
- 鉂?鏈<>€冭檻寰<E6AABB>湇鍔℃灦鏋勫拰K8s
- 鉂?鏈<>€冭檻妯″潡鍖栧敭鍗?
2. **鎶€鏈<E282AC>爤灞傞潰**
- 鉂?缂哄皯R璇<52>█闆嗘垚锛圫SA闇€瑕侊級
- 鉂?缂哄皯API缃戝叧
- 鉂?缂哄皯Electron鍗曟満鐗?
3. **鏁版嵁搴撳眰闈?*
- 鉂?鍗曚竴鏁版嵁搴擄紝鏈<E7B49D>€冭檻Schema闅旂<E99785>
- 鉂?鏈<>€冭檻澶氱<E6BEB6>鎴锋灦鏋?
4. **閮ㄧ讲灞傞潰**
- 鉂?浠呮敮鎸佷簯绔疭aaS锛屾湭鑰冭檻鍏朵粬3绉嶉儴缃叉ā寮?
- 鉂?鏈<>€冭檻瀹瑰櫒鍖栭儴缃诧紙K8s锛?
---
## 馃敭 涓嬩竴姝ュ缓璁?
鍩轰簬鐜版湁绯荤粺鐨勬妧鏈<EFBFBD>懜搴曪紝寤鸿<EFBFBD>锛?
1. **鏄庣‘寮€鍙戦樁娈?*
- 褰撳墠澶勪簬"闃舵<E99783>涓€锛氭ā鍧楀寲鍗曚綋"
-<>惁绔嬪嵆瑙勫垝"闃舵<E99783>浜岋細寰<E7B4B0>湇鍔℃媶鍒?锛?
-<>惁绔嬪嵆瑙勫垝Electron鍗曟満鐗堬紵
2. **鏄庣‘妯″潡浼樺厛绾?*
- DC妯″潡锛堟暟鎹<E69A9F>竻娲楋級锛氭牳蹇冨樊寮傚寲
- ASL妯″潡锛圓I鏅鸿兘鏂囩尞锛夛細宸叉湁閮ㄥ垎PRD
- SSA妯″潡锛堟櫤鑳界粺璁″垎鏋愶級锛氶渶瑕丷璇<E4B8B7>
- ST妯″潡锛堢粺璁″垎鏋愬伐鍏凤級锛氱浉瀵圭畝鍗?
3. **鏄庣鏋舵瀯婕旇繘璺<E7B998>**
-<>惁閬靛惊鐧界毊涔︾殑鍒嗛樁娈靛疄鏂斤紵
-<>惁绔嬪嵆寮曞叆K8s鍜孉PI缃戝叧锛?
-<>惁绔嬪嵆寮曞叆R璇<52>█鍜孭ython寰<6E>湇鍔★紵
4. **鏄庣‘鏂囨。鏇存柊绛栫暐**
- 绔嬪嵆鏇存柊鍝<E69F8A>簺P0绾ф枃妗
- 濡備綍鏁村悎鐜版湁鏂囨。鍜屾渶鏂伴渶姹傦紵
---
**鎶ュ憡瀹屾垚鏃ユ湡锛?* 2025-11-06
**鎶ュ憡缁存姢鑰咃細** 鎶€鏈<E282AC>洟闃?
**涓嬩竴姝ワ細** 璁ㄨ<E79281>鎬讳綋鎶€鏈<E282AC>灦鏋勩€佹枃妗綋绯绘瀯寤恒€佸垎姝ラ<E5A79D>瀹炴柦