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

44 KiB
Raw Blame History

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锛?

*宸插紑鍙戞櫤鑳戒綋锛?

  1. *閫夐<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>枃妗
  • 鉁?鏂囦欢鏍煎紡鍜屽ぇ灏忛檺鍒讹紙鏈€澶?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. 瑙瀽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绔<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>瓒呭鏉傚織锛?
  • 鉁?**瀹屾暣娴佺▼**锛氫笂浼燱ord 鈫?鎻愬彇鏂囨湰 鈫?AI璇勪及 鈫?鐢熸垚鎶ュ憡 鈫?瀵煎嚭PDF
  • 鉁?鐢ㄦ埛浣撻獙锛氭笎鍙樺崱鐗囥€佹嫋鎷戒笂浼犮€佸疄鏃惰繘搴︺€侀<EFBFBD>鑹茬紪鐮?

*璇勪及鏍囧噯锛?

*绋跨害瑙勮寖鎬ц瘎浼帮紙11椤癸級锛?

  1. 鏂囬<EFBFBD>锛圱itle锛?
  2. 浣滆€咃紙Authors锛?
  3. <EFBFBD>枃鎽樿<EFBFBD>锛圕hinese Abstract锛?
  4. 鑻辨枃鎽樿<EFBFBD>锛圗nglish Abstract锛?
  5. <EFBFBD>枃鍏抽敭璇嶏紙Chinese Keywords锛?
  6. 鑻辨枃鍏抽敭璇嶏紙English Keywords锛?
  7. 枃锛圡ain Text锛?
  8. 鍙傝€冩枃鐚<EFBFBD>紙References锛?
  9. 鍥捐〃锛團igures and Tables锛?
  10. 鍒╃泭鍐茬獊锛圕onflict of Interest锛?
  11. 浼︾悊瀹℃煡锛圗thics Approval锛?

鏂规硶瀛﹁瘎浼帮紙3閮ㄥ垎锛夛細

  1. 绉戠爺璁捐<EFBFBD>锛圧esearch Design锛?
  2. 缁熻<EFBFBD>鏂规硶锛圫tatistical Methods锛?
  3. 缁熻<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瑙)
- 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>爜缁撴瀯

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

鎬昏<E98EAC>锛殈12,000琛屼唬鐮?

鍓嶇<EFBFBD>爜缁撴瀯

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
  鈹溾啋 瑙瀽寮曠敤鏍囪<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
  鈹溾啋 瑙瀽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>鐞嗭級

  1. 鏃ュ織绯荤粺

    • 鐜扮姸锛氬ぇ閲廲onsole.log鐢ㄤ簬璋冭瘯
    • 寤鸿<EFBFBD>锛氬紩鍏ユ棩蹇楃骇鍒<EFBFBD>帶鍒讹紙winston/pino锛?
    • 褰卞搷锛氱敓浜х幆澧冩棩蹇楃<EFBFBD>鐞?
  2. *閿欒<EFBFBD>鐮佷綋绯?

    • 鐜扮姸锛氶儴鍒咥PI缂哄皯璇︾粏閿欒<EFBFBD>淇℃伅
    • 寤鸿<EFBFBD>锛氱粺涓€閿欒<EFBFBD>鐮佸拰閿欒<EFBFBD>娑堟伅
    • 褰卞搷锛氬墠绔<EFBFBD>敊璇<EFBFBD><EFBFBD>鐞嗗拰鐢ㄦ埛浣撻獙
  3. 绫诲瀷瀹氫箟瀹屽杽

    • 鐜扮姸锛氶儴鍒嗕娇鐢ㄤ簡any绫诲瀷
    • 寤鸿<EFBFBD>锛氳ˉ鍏呭畬鏁寸殑TypeScript绫诲瀷瀹氫箟
    • 褰卞搷锛氫唬鐮佸彲缁存姢鎬?
  4. Redis缂撳瓨闆嗘垚

    • 鐜扮姸锛氬凡閰嶇疆浣嗘湭浣跨敤
    • 寤鸿<EFBFBD>锛氱紦瀛樼儹鐐规暟鎹<EFBFBD>紙鏅鸿兘浣撻厤缃<EFBFBD>€佺煡璇嗗簱鍒楄〃锛?
    • 褰卞搷锛氭€ц兘浼樺寲

<EFBFBD>紭鍏堢骇锛堝彲鍦ㄩ噷绋嬬<EFBFBD>2-3澶勭悊锛?

  1. 鍗曞厓娴嬭瘯

    • 鐜扮姸锛氱己灏戠郴缁熸€ф祴璇?
    • 寤鸿<EFBFBD>锛氭牳蹇冧笟鍔¢€昏緫娣诲姞鍗曞厓娴嬭瘯
    • 褰卞搷锛氫唬鐮佽川閲忓拰閲嶆瀯淇″績
  2. *WebSocket瀹炴椂鎺ㄩ€?

    • 鐜扮姸锛氭壒澶勭悊杩涘害浣跨敤HTTP杞<EFBFBD><EFBFBD>
    • 寤鸿<EFBFBD>锛氭敼涓篧ebSocket瀹炴椂鎺ㄩ€?
    • 褰卞搷锛氱敤鎴蜂綋楠屼紭鍖?
  3. *鏂囨。澶勭悊骞惰<EFBFBD>鍖?

    • 鐜扮姸锛氭枃妗彁鍙栦覆琛屽<EFBFBD>鐞?
    • 寤鸿<EFBFBD>锛氬苟琛屾彁鍙栧<EFBFBD><EFBFBD>枃妗?
    • 褰卞搷锛氭壒閲忎笂浼犳€ц兘
  4. API闄愭祦

    • 鐜扮姸锛氭棤闄愭祦鏈哄埗
    • 寤鸿<EFBFBD>锛氭坊鍔犻檺娴佷腑闂翠欢
    • 褰卞搷锛氶槻姝<EFBFBD>PI婊ョ敤

馃帀 鏍稿績鎴愬氨

1. *<EFBFBD>€熻凯浠兘鍔?

  • 鉁?1涓<31>湀鍐呭畬鎴?澶ф牳蹇冨姛鑳芥ā鍧?
  • 鉁?姣忓懆閮芥湁鍙<E6B981><E98D99>鎴愭灉
  • 鉁?鎶€鏈<E282AC>獙璇佸叏閮ㄩ€氳繃

2. AI闆嗘垚娣卞害

  • 鉁?3涓狶LM妯″瀷瀹屾暣闆嗘垚
  • 鉁?娴佸紡杈撳嚭浣撻獙浼樼<E6B5BC>
  • 鉁?RAG妫€绱㈡晥鏋滄樉钁?

3. 鏂囨。澶勭悊鑳藉姏

  • 鉁?Python寰<6E>湇鍔¢珮璐ㄩ噺鎻愬彇
  • 鉁?澶氭牸寮忓叏闈㈡敮鎸?
  • 鉁?鏅鸿兘闄嶇骇绛栫暐鍙<E69A90>

4. 浠g爜璐ㄩ噺

  • 鉁?TypeScript鍏ㄨ<E98D8F>鐩?
  • 鉁?娓呮櫚鐨勪笁灞傛灦鏋?
  • 鉁?鑹<>ソ鐨勬ā鍧楄В鑰?

5. 鏂囨。瀹屽杽

  • 鉁?璇︾粏鐨凱RD鏂囨。
  • 鉁?瀹屾暣鐨勬妧鏈<E5A6A7>枃妗?
  • 鉁?涓板瘜鐨勫紑鍙戞棩蹇楋紙60+绡囷級

馃摑 鎬荤粨

鐜版湁绯荤粺鐨勪紭鍔?

  1. *鎶€鏈<EFBFBD>灦鏋勬垚鐔?

    • 娓呮櫚鐨勪笁灞傛灦鏋勶紙Controller 鈫?Service 鈫?Database锛?
    • <EFBFBD>ソ鐨勬ā鍧楀寲璁捐<EFBFBD>
    • 瀹屾暣鐨凩LM閫傞厤鍣ㄦ娊璞?
  2. 鍔熻兘瀹屾暣鎬ч珮

    • AI瀵硅瘽绯荤粺锛氣渽 瀹屾暣鍙<E69AA3>
    • 鐭ヨ瘑搴撶郴缁燂細鉁?瀹屾暣鍙<E69AA3>敤锛圧AG + 鍏ㄦ枃锛?
    • 鎵瑰<EFBFBD>鐞嗙郴缁燂細鉁?瀹屾暣鍙<E69AA3>
    • 绋夸欢瀹℃煡锛氣渽 瀹屾暣鍙<E69AA3>
  3. AI鑳藉姏绐佸嚭

    • 澶氭ā鍨嬫敮鎸侊紝鐏垫椿鍒囨崲
    • RAG妫€绱㈠噯纭<EFBFBD>紝婧<EFBFBD>簮娓呮櫚
    • 鏅鸿兘寮曠敤100%鍑嗙‘
  4. 宸ョ▼璐ㄩ噺鑹<EFBFBD>

    • TypeScript鍏ㄨ<EFBFBD>鐩?
    • Prisma ORM锛岀被鍨嬪畨鍏?
    • 娓呮櫚鐨勪唬鐮佺粨鏋?

鐜版湁绯荤粺鐨勫眬闄?

  1. 鏋舵瀯灞傞潰

    • 鉂?缂哄皯SSA銆丼T銆丏C妯″潡锛堟渶鏂伴渶姹傦級
    • 鉂?鏈<>€冭檻绉佹湁鍖栭儴缃插拰鍗曟満鐗?
    • 鉂?鏈<>€冭檻寰<E6AABB>湇鍔℃灦鏋勫拰K8s
    • 鉂?鏈<>€冭檻妯″潡鍖栧敭鍗?
  2. 鎶€鏈<EFBFBD>爤灞傞潰

    • 鉂?缂哄皯R璇<52>█闆嗘垚锛圫SA闇€瑕侊級
    • 鉂?缂哄皯API缃戝叧
    • 鉂?缂哄皯Electron鍗曟満鐗?
  3. *鏁版嵁搴撳眰闈?

    • 鉂?鍗曚竴鏁版嵁搴擄紝鏈<E7B49D>€冭檻Schema闅旂<E99785>
    • 鉂?鏈<>€冭檻澶氱<E6BEB6>鎴锋灦鏋?
  4. 閮ㄧ讲灞傞潰

    • 鉂?浠呮敮鎸佷簯绔疭aaS锛屾湭鑰冭檻鍏朵粬3绉嶉儴缃叉ā寮?
    • 鉂?鏈<>€冭檻瀹瑰櫒鍖栭儴缃诧紙K8s锛?

馃敭 涓嬩竴姝ュ缓璁?

鍩轰簬鐜版湁绯荤粺鐨勬妧鏈<EFBFBD>懜搴曪紝寤鸿<EFBFBD>锛?

  1. *鏄庣‘寮€鍙戦樁娈?

    • 褰撳墠澶勪簬"闃舵<E99783>涓€锛氭ā鍧楀寲鍗曚綋"
    • <EFBFBD>惁绔嬪嵆瑙勫垝"闃舵<E99783>浜岋細寰<E7B4B0>湇鍔℃媶鍒?锛?
    • <EFBFBD>惁绔嬪嵆瑙勫垝Electron鍗曟満鐗堬紵
  2. *鏄庣‘妯″潡浼樺厛绾?

    • DC妯″潡锛堟暟鎹<EFBFBD>竻娲楋級锛氭牳蹇冨樊寮傚寲
    • ASL妯″潡锛圓I鏅鸿兘鏂囩尞锛夛細宸叉湁閮ㄥ垎PRD
    • SSA妯″潡锛堟櫤鑳界粺璁″垎鏋愶級锛氶渶瑕丷璇<EFBFBD>
    • ST妯″潡锛堢粺璁″垎鏋愬伐鍏凤級锛氱浉瀵圭畝鍗?
  3. 鏄庣鏋舵瀯婕旇繘璺<EFBFBD>

    • <EFBFBD>惁閬靛惊鐧界毊涔︾殑鍒嗛樁娈靛疄鏂斤紵
    • <EFBFBD>惁绔嬪嵆寮曞叆K8s鍜孉PI缃戝叧锛?
    • <EFBFBD>惁绔嬪嵆寮曞叆R璇<EFBFBD>█鍜孭ython寰<EFBFBD>湇鍔★紵
  4. 鏄庣‘鏂囨。鏇存柊绛栫暐

    • 绔嬪嵆鏇存柊鍝<EFBFBD>簺P0绾ф枃妗
    • 濡備綍鏁村悎鐜版湁鏂囨。鍜屾渶鏂伴渶姹傦紵

*鎶ュ憡瀹屾垚鏃ユ湡锛? 2025-11-06
鎶ュ憡缁存姢鑰咃細 鎶€鏈<E282AC>洟闃? 涓嬩竴姝ワ細 璁ㄨ<E79281>鎬讳綋鎶€鏈<E282AC>灦鏋勩€佹枃妗綋绯绘瀯寤恒€佸垎姝ラ<E5A79D>瀹炴柦