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