Files
AIclinicalresearch/docs/03-业务模块/PKB-个人知识库/06-开发记录/2026-01-07-前端迁移与批处理功能完善.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

369 lines
10 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.
# PKB涓<42>汉鐭ヨ瘑搴?- 鍓嶇<E98D93>杩佺Щ涓庢壒澶勭悊鍔熻兘瀹屽杽
**寮€鍙戞棩鏈?*锛?026骞?鏈?鏃?
**寮€鍙戜汉鍛?*锛欰I Assistant
**鐗堟湰**锛歷2.0
---
## 涓€銆佸紑鍙戠洰鏍?
1. **鍓嶇<E98D93>鏋舵瀯杩佺Щ**锛氬皢PKB鍓嶇<E98D93>杩佺Щ鍒?`frontend-v2/modules/pkb` 鏂版灦鏋?
2. **宸ヤ綔妯″紡瀹炵幇**锛氬疄鐜板叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊涓夌<E6B693>宸ヤ綔妯″紡
3. **鎵瑰<E98EB5>鐞嗗姛鑳?*锛氬畬鍠勬壒澶勭悊浠诲姟鐨勬墽琛屻€佽繘搴︽樉绀哄拰缁撴灉瀵煎嚭
4. **UI浼樺寲**锛氫紭鍖栫晫闈㈢粏鑺傦紝鎻愬崌鐢ㄦ埛浣撻獙
---
## 浜屻€佷富瑕佸伐浣滃唴瀹?
### 1. 鍓嶇<E98D93>鏋舵瀯鎼<E780AF>
#### 鐩<>綍缁撴瀯鍒涘缓
```
frontend-v2/src/modules/pkb/
鈹溾攢鈹€ api/ # API瀹㈡埛绔?
鈹? 鈹斺攢鈹€ knowledgeBaseApi.ts
鈹溾攢鈹€ stores/ # 鐘舵€佺<E282AC>鐞?
鈹? 鈹斺攢鈹€ useKnowledgeBaseStore.ts
鈹溾攢鈹€ components/ # 閫氱敤缁勪欢
鈹? 鈹溾攢鈹€ DocumentUpload.tsx
鈹? 鈹斺攢鈹€ Workspace/ # 宸ヤ綔鍙扮粍浠?
鈹? 鈹溾攢鈹€ FullTextMode.tsx
鈹? 鈹溾攢鈹€ DeepReadMode.tsx
鈹? 鈹溾攢鈹€ BatchModeComplete.tsx
鈹? 鈹斺攢鈹€ WorkModeSelector.tsx
鈹溾攢鈹€ pages/ # 椤甸潰缁勪欢
鈹? 鈹溾攢鈹€ DashboardPage.tsx
鈹? 鈹斺攢鈹€ WorkspacePage.tsx
鈹溾攢鈹€ hooks/ # 鑷<>畾涔塇ooks
鈹? 鈹斺攢鈹€ useWorkMode.ts
鈹斺攢鈹€ styles/ # 鏍峰紡鏂囦欢
鈹斺攢鈹€ workspace.css
```
#### 鏍稿績鏂囦欢鍒涘缓
- **DashboardPage.tsx**锛氱煡璇嗗簱鍒楄〃鍜屽垱寤哄叆鍙?
- **WorkspacePage.tsx**锛氱煡璇嗗簱宸ヤ綔鍙颁富椤甸潰
- **涓夌<E6B693>宸ヤ綔妯″紡缁勪欢**锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊
### 2. Chat缁勪欢闆嗘垚
**鎶€鏈<E282AC>€夊瀷**锛欰nt Design X
**鐗圭偣**锛?
- 缁熶竴鐨勫<E990A8>璇濈粍浠讹紝鏀<E7B49D>寔娴佸紡鍝嶅簲
-<>畾涔夋秷鎭<E7A7B7>覆鏌撳櫒
-<>姩婊氬姩鍜岃緭鍏ユ<E98D8F>
**闆嗘垚闂<E59E9A><E99782><EFBFBD><E6B787>**锛?
- 鉁?杈撳叆妗嗘竻闄わ細浣跨敤鍙楁帶妯″紡 `value={inputValue}`
- 鉁?鑷<>姩婊氬姩锛氭坊鍔?`messagesEndRef` 閿氱偣
- 鉁?鍙傝€冩枃鐚<E69E83>牸寮忓寲锛氬疄鐜?`customMessageRenderer`
### 3. 宸ヤ綔妯″紡瀹炵幇
#### 3.1 鍏ㄦ枃闃呰<E99783>妯″紡
**鍔熻兘**锛?
- 鍔犺浇鐭ヨ瘑搴撳叏閮ㄦ枃妗o紙宸插畬鎴愮姸鎬侊級
- 浣跨敤 `fullTextDocumentIds` 鍙傛暟浼犻€掑畬鏁存枃鐚?
- AI鍏峰<E98D8F>鍏ㄧ煡瑙嗚<E79199>锛屽彲杩涜<E69DA9>缁煎悎鍒嗘瀽
**API璋冪敤**锛?
```typescript
body: JSON.stringify({
content: message,
modelType: 'qwen-long',
knowledgeBaseIds: [kbId],
fullTextDocumentIds: completedDocIds, // 鍏ㄦ枃妯″紡
})
```
**淇<><E6B787><EFBFBD><E99782>**锛?
- 鉂?鍒濇<E98D92>鍔犺浇鏄剧ず"0绡囨枃妗?
- 鉁?灏嗘枃妗f暟閲忓姞鍏?`conversationKey`锛屽己鍒堕噸鏂版覆鏌?
#### 3.2 閫愮瘒绮捐<E7BBAE>妯″紡
**鍔熻兘**锛?
- 閫夋嫨1-5绡囨枃妗繘琛屾繁搴﹁В璇?
- 姣忕瘒鏂囨。鐙<E38082>珛瀵硅瘽涓婁笅鏂?
- 鍒囨崲鏂囨。鏃舵竻绌哄<E7BB8C>璇濆巻鍙?
**鎶€鏈<E282AC>疄鐜?*锛?
```typescript
const conversationKey = useMemo(() => {
return `kb-deepread-${kbId}-${selectedDoc.id}`;
}, [kbId, selectedDoc.id]);
```
**淇<><E6B787><EFBFBD><E99782>**锛?
- 鉂?鍒囨崲鏂囨。鎶ラ敊锛歚TypeError: formattedContent.replace is not a function`
- 鉁?娣诲姞绫诲瀷妫€鏌ワ紝姝g‘澶勭悊 `MessageRenderParams`
- 鉂?杈撳叆妗嗕笉娓呴櫎銆佷笉鑷<E7AC89>姩婊氬姩
- 鉁?鍦hatContainer娣诲姞鍙楁帶杈撳叆鍜屾粴鍔ㄩ敋鐐?
#### 3.3 鎵瑰<E98EB5>鐞嗘ā寮?
**鍔熻兘**锛?
- 閫夋嫨3-50绡囨枃妗壒閲忔彁鍙栦俊鎭?
-<>寔涓村簥鐮旂┒淇℃伅鎻愬彇妯℃澘锛?涓<>瓧娈碉級
- 瀹炴椂鏄剧ず澶勭悊杩涘害
- 缁撴灉鍙<E78189><E98D99>鍑轰负CSV
**寮€鍙戝巻绋?*锛?
**闂<><E99782>1锛氶€夋嫨鏁伴噺缈诲€?*
- 鉂?鍘熷洜锛氱偣鍑昏<E98D91>鍜孋heckbox閮借Е鍙戦€夋嫨锛屽<E9949B>鑷撮噸澶嶆坊鍔?
- 鉁?瑙e喅锛氫娇鐢ㄧ粺涓€鐨?`toggle` 鍑芥暟锛孋heckbox鐢?`onClick stopPropagation`
**闂<><E99782>2锛欰PI 404閿欒<E996BF>**
- 鉂?璺<>緞閿欒<E996BF>锛歚/api/v1/batch-tasks`
- 鉁?姝<E28098>緞锛歚/api/v1/pkb/batch-tasks/batch/execute`
**闂<><E99782>3锛欰PI 500閿欒<E996BF>**
- 鉂?瀛楁<E7809B>鍚嶄笉鍖归厤锛氬墠绔<E5A2A0>彂閫?`knowledgeBaseId`锛屽悗绔<EFBFBD>湡鏈?`kb_id`
- 鉁?淇<><E6B787>璇锋眰浣撴牸寮忥細
```typescript
{
kb_id: kbId, // 鍚庣<E98D9A>鏍煎紡
document_ids: selectedDocs,
template_type: 'preset',
template_id: 'clinical_research',
model_type: 'qwen-long',
}
```
**闂<><E99782>4锛氭ā鏉縄D涓嶅尮閰?*
- 鉂?鍓嶇<E98D93>锛歚clinicalResearch`锛堥┘宄帮級
- 鉂?鍚庣<E98D9A>锛歚clinical_research`锛堜笅鍒掔嚎锛?
- 鉁?缁熶竴涓?`clinical_research`
**闂<><E99782>5锛氬墠绔<E5A2A0>笉鏄剧ず缁撴灉**
- 鉂?鍚庣<E98D9A>杩斿洖 `status: "success"`锛屽墠绔<EFBFBD>垽鏂?`status === 'completed'`
- 鉁?淇<><E6B787>鐘舵€佸垽鏂<E59EBD>
```typescript
const isSuccess = docResult.status === 'success' || docResult.status === 'completed';
```
**闂<><E99782>6锛氳〃鏍兼樉绀虹矖绯?*
- 鉂?鏂囦欢鍚嶈繃闀匡紝鍐呭<E98D90>鏄剧ず涓嶅叏
- 鉁?瀹炵幇鏂规<E98F82>A锛?
- 鏂囦欢鍚嶆渶澶?琛?
- 鍐呭<E98D90>鏈€澶?琛?(`-webkit-line-clamp: 3`)
-<>仠鏄剧ず瀹屾暣鍐呭<E98D90>锛圱ooltip锛?
- 缁撴灉鏁版嵁鍒楁洿瀹斤紙280px锛?
### 4. 鏂囨。涓婁紶鍔熻兘
**闂<><E99782>**锛?
- 鉂?"涓婁紶鏂版枃浠?鎸夐挳鏃犲搷搴?
- 鉂?娌℃湁缁戝畾 `onClick` 浜嬩欢
**瑙喅鏂规<E98F82>**锛?
1. 瀵煎叆 `DocumentUpload` 缁勪欢鍜?`Modal`
2. 娣诲姞 `uploadModalVisible` 鐘舵€?
3. 涓烘寜閽<E5AF9C>粦瀹?`onClick={() => setUploadModalVisible(true)}`
4. 娣诲姞涓婁紶寮圭獥锛岄泦鎴?`DocumentUpload` 缁勪欢
5.<><E6B787>瀵煎叆璺<E58F86>緞锛歚../stores/useKnowledgeBaseStore`
---
## 涓夈€佹妧鏈<E5A6A7>毦鐐逛笌瑙喅鏂规<E98F82>
### 1. ChatContainer娑堟伅娓叉煋
**闂<><E99782>**锛氳嚜瀹氫箟娓叉煋鍣ㄦ帴鏀剁殑鍙傛暟鏍煎紡澶嶆潅
```typescript
interface MessageRenderParams {
id: string | number;
message: {
id: string | number;
role: string;
content: string;
status?: string;
};
status: string;
}
```
**瑙e喅**锛氭<E9949B><EFBFBD>В鏋?`params.message.content`
### 2. 鎵瑰<E98EB5>鐞嗙粨鏋滆幏鍙?
**闂<><E99782>**锛氬悗绔<E68297>繑鍥炲祵濂楃粨鏋?`{ success: true, data: { results: [...] } }`
**瑙e喅**锛?
```typescript
const resultsData = resultsJson.data?.results || [];
const newResults = resultsData.map((docResult: any) => ({
documentId: docResult.document_id,
documentName: docResult.document_name,
result: docResult.data, // 鎻愬彇鏁版嵁鍦ㄨ繖閲?
}));
```
### 3. React Key閲嶅<E996B2>璀﹀憡
**闂<><E99782>**锛氭壒澶勭悊缁撴灉鍒楄〃浣跨敤 `documentId` 浣滀负key锛屽彲鑳介噸澶?
**瑙e喅**锛?
- 鍦ㄦ枃妗i€夋嫨鍒楄〃浣跨敤 `useMemo` 鍘婚噸
- 鍦ㄧ粨鏋滄槧灏勬椂浣跨敤 `${documentId}-${index}`<>繚鍞<E7B99A>
### 4. 鍓嶅悗绔<E68297>瓧娈垫槧灏?
| 鍚庣<E98D9A>瀛楁<E7809B> | 鍓嶇<E98D93>鏄剧ず |
|---------|---------|
| `research_purpose` | 鐮旂┒鐩<E29492>殑 |
| `research_design` | 鐮旂┒璁捐<E79281> |
| `research_subjects` | 鐮旂┒瀵硅薄 |
| `sample_size` | 鏍锋湰閲?|
| `intervention_group` | 骞查<E9AA9E>缁?|
| `control_group` | 瀵圭収缁?|
| `results_data` | 缁撴灉鍙婃暟鎹?|
| `oxford_level` | 鐗涙触璇勭骇 |
---
## 鍥涖€丄PI璺<49>敱鎬荤粨
### 鏂版灦鏋勮矾鐢憋紙v2锛?
| 鍔熻兘 | 鏂规硶 | 璺<>緞 |
|------|------|------|
| 鐭ヨ瘑搴撳垪琛?| GET | `/api/v1/pkb/knowledge-bases` |
| 鍒涘缓鐭ヨ瘑搴?| POST | `/api/v1/pkb/knowledge-bases` |
| 涓婁紶鏂囨。 | POST | `/api/v1/pkb/knowledge-bases/:id/documents` |
| 鏂囨。鍒楄〃 | GET | `/api/v1/pkb/knowledge-bases/:id/documents` |
| 鎵瑰<E98EB5>鐞嗘墽琛?| POST | `/api/v1/pkb/batch-tasks/batch/execute` |
| 鎵瑰<E98EB5>鐞嗙姸鎬?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id` |
| 鎵瑰<E98EB5>鐞嗙粨鏋?| GET | `/api/v1/pkb/batch-tasks/batch/tasks/:id/results` |
### 瀵硅瘽璺<E798BD>敱锛堥€氱敤锛?
| 鍔熻兘 | 鏂规硶 | 璺<>緞 |
|------|------|------|
| 娴佸紡瀵硅瘽 | POST | `/api/v1/chat/stream` |
---
## 浜斻€乁I/UX浼樺寲缁嗚妭
### 1. WorkspacePage甯冨眬
- **鍗曞眰Header**锛氭暣鍚堣繑鍥炪€佹爣棰樸€乀ab鍒囨崲銆佽<E98A86><EFBFBD>€佸ご鍍?
- **Header楂樺害**锛歚h-14`锛?6px锛?
- **宸ヤ綔妯″紡閫夋嫨鍣?*锛氱揣鍑戠殑 `h-10` 鏍?
- **Chat鍖哄煙**锛氭渶澶у寲鍓╀綑绌洪棿
### 2. 鎵瑰<E98EB5>鐞嗙粨鏋滆〃鏍?
- **鍥哄畾琛ㄥご**锛氳儗鏅?`#F9FAFB`锛屾枃瀛?`#6B7280`
- **鏂囦欢鍚嶅垪**锛?20px锛屾渶澶?琛?
- **鍐呭<E98D90>鍒?*锛?80-280px锛屾渶澶?琛?
- **鎮<>仠鎻愮ず**锛氭渶澶у<E6BEB6>搴?50px锛屾渶澶ч珮搴?00px
### 3. 鍙傝€冩枃鐚<E69E83>牸寮?
```typescript
// 鍗$墖寮忔樉绀?
<div className="flex items-start p-3 bg-blue-50 rounded-lg border border-blue-100">
<BookOpen className="w-4 h-4 text-blue-500 mr-2" />
<span className="text-sm text-slate-700">{citation}</span>
</div>
```
---
## 鍏<>€佹祴璇曠粨鏋?
### 鍔熻兘娴嬭瘯
| 鍔熻兘妯″潡 | 娴嬭瘯椤?| 缁撴灉 |
|---------|--------|------|
| 鐭ヨ瘑搴撳垪琛?| 鍒涘缓/鏌ョ湅/鍒犻櫎 | 鉁?|
| 鏂囨。涓婁紶 | 鎷栨嫿/鐐瑰嚮涓婁紶 | 鉁?|
| 鍏ㄦ枃闃呰<E99783> | 鍔犺浇鏂囨。/闂<>瓟 | 鉁?|
| 閫愮瘒绮捐<E7BBAE> | 鏂囨。鍒囨崲/闂<>瓟 | 鉁?|
| 鎵瑰<E98EB5>鐞?| 妯℃澘閫夋嫨/鎵ц<E98EB5>/缁撴灉鏄剧ず | 鉁?|
| 缁撴灉瀵煎嚭 | CSV瀵煎嚭 | 鉁?|
### 鎬ц兘娴嬭瘯
- **3绡囨枃妗壒澶勭悊**锛殈17-28绉?
- **6绡囨枃妗叏鏂囧姞杞?*锛殈14k-15k tokens
- **鏂囨。涓婁紶**锛氳繘搴﹀疄鏃舵樉绀猴紝鏀<E7B49D>寔10MB浠ュ唴
---
## 涓冦€佸凡鐭ラ棶棰樹笌鏀硅繘鏂瑰悜
### 褰撳墠闄愬埗
1. 鎵瑰<E98EB5>鐞嗗彧鏀<E5BDA7>寔1涓<31>ā鏉匡紙涓村簥鐮旂┒淇℃伅鎻愬彇锛?
2. 鎵瑰<E98EB5>鐞嗘渶灏?绡囨枃妗紙鍚庣<E98D9A>闄愬埗锛?
3. 閫愮瘒绮捐<E7BBAE>鏈€澶?绡囨枃妗紙鍓嶇<E98D93>闄愬埗锛?
### 鏈<>潵浼樺寲
1. **澧炲姞妯℃澘**锛氳嵂鐗╁畨鍏ㄦ€с€佹偅鑰呭熀绾跨壒寰佺瓑
2. **鑷<>畾涔夋ā鏉?*锛氬厑璁哥敤鎴疯嚜瀹氫箟鎻愬彇瀛楁<E7809B>
3. **缁撴灉棰勮<E6A3B0>**锛氬湪琛ㄦ牸涓<E789B8>敮鎸佸崟鍏冩牸灞曞紑
4. **鎵瑰<E98EB5>鐞嗘仮澶?*锛氭敮鎸佷腑鏂<E88591>悗缁х画鎵ц<E98EB5>
5. **鏂囨。棰勮<E6A3B0>**锛氶泦鎴怭DF棰勮<E6A3B0>鍔熻兘
---
## 鍏<>€佷唬鐮佺粺璁?
### 鏂板<E98F82>鏂囦欢
- 鍓嶇<E98D93>椤甸潰锛?涓<>紙Dashboard銆乄orkspace锛?
- 鍓嶇<E98D93>缁勪欢锛?涓<>紙3绉嶅伐浣滄ā寮?+ 閫夋嫨鍣?+ 涓婁紶 + 鏂囨。鍒楄〃锛?
- API瀹㈡埛绔<E59F9B>細1涓?
- 鐘舵€佺<E282AC>鐞嗭細1涓?
- 鏍峰紡鏂囦欢锛?涓?
### 浠g爜閲忎及绠?
- TypeScript锛殈2500琛?
- CSS锛殈200琛?
- 鏂囨。锛殈1000琛?
---
## 涔濄€佸洟闃熷崗浣?
### 鍙傝€冩棫鐗堝疄鐜?
- 鏂囨。涓婁紶锛歚frontend/src/components/knowledge/DocumentUpload.tsx`
- 鎵瑰<E98EB5>鐞嗭細`frontend/src/components/chat/BatchMode.tsx`
- 鏂囨。閫夋嫨锛歚frontend/src/components/chat/DocumentSelection.tsx`
### Git鎻愪氦
- 閬靛惊璇<E6838A>箟鍖栨彁浜よ<E6B59C>鑼?
-<>枃浣跨敤UTF-8缂栫爜
- 鍒嗗<E98D92>娆℃彁浜わ紝姣忔<E5A7A3>鑱氱劍鍗曚竴鍔熻兘
---
## 鍗併€佹€荤粨
<EFBFBD><EFBFBD>寮€鍙戝畬鎴愪簡PKB涓<EFBFBD>汉鐭ヨ瘑搴撴ā鍧椾粠鏋舵瀯璁捐<EFBFBD>鍒版牳蹇冨姛鑳界殑瀹屾暣瀹炵幇锛岀壒鍒<EFBFBD>槸锛?
1. 鉁?**鏂版灦鏋勮縼绉?*锛氭垚鍔熻縼绉诲埌 `frontend-v2` 鏂版灦鏋?
2. 鉁?**涓夌<E6B693>宸ヤ綔妯″紡**锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<E7BBAE>銆佹壒澶勭悊鍏ㄩ儴瀹炵幇
3. 鉁?**鎵瑰<E98EB5>鐞嗗畬鏁存祦绋?*锛氫粠妯℃澘閫夋嫨鍒扮粨鏋滃<E98F8B>鍑虹殑瀹屾暣閾捐矾
4. 鉁?**UI/UX浼樺寲**锛氬弬鐓у師鍨嬪浘绮剧粏鍖栧疄鐜帮紝鐢ㄦ埛浣撻獙鑹<E78D99>
5. 鉁?**闂<><E99782>喅鑳藉姏**锛氬揩閫熷畾浣嶅苟瑙喅10+涓<>妧鏈<E5A6A7>棶棰?
**閲岀▼纰戞剰涔?*锛歅KB妯″潡宸插叿澶囩敓浜х幆澧冨彲鐢ㄦ€э紝涓哄悗缁<E68297>姛鑳芥墿灞曞<E7819E>瀹氫簡鍧氬疄鍩虹<E98DA9>锛?
---
**涓嬩竴姝ュ缓璁?*锛?
1. 杩涜<E69DA9>瀹屾暣鐨勭敤鎴烽獙鏀舵祴璇曪紙UAT锛?
2. 浼樺寲鎵瑰<E98EB5>鐞嗘€ц兘锛堝苟鍙戙€佺紦瀛橈級
3. 澧炲姞鏇村<E98F87>妯℃澘鍜岃嚜瀹氫箟鑳藉姏
4. 瀹屽杽閿欒<E996BF>澶勭悊鍜岀敤鎴峰弽棣?