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

10 KiB
Raw Blame History

PKB涓<EFBFBD>汉鐭ヨ瘑搴?- 鍓嶇<E98D93>杩佺Щ涓庢壒澶勭悊鍔熻兘瀹屽杽

**寮€鍙戞棩鏈?*锛?026骞?鏈?鏃? **寮€鍙戜汉鍛?*锛欰I Assistant
鐗堟湰锛歷2.0


涓€銆佸紑鍙戠洰鏍?

  1. 鍓嶇<EFBFBD>鏋舵瀯杩佺Щ锛氬皢PKB鍓嶇<EFBFBD>杩佺Щ鍒?frontend-v2/modules/pkb 鏂版灦鏋?
  2. 宸ヤ綔妯″紡瀹炵幇锛氬疄鐜板叏鏂囬槄璇汇€侀€愮瘒绮捐<EFBFBD>銆佹壒澶勭悊涓夌<EFBFBD>宸ヤ綔妯″紡
  3. **鎵瑰<E98EB5>鐞嗗姛鑳?*锛氬畬鍠勬壒澶勭悊浠诲姟鐨勬墽琛屻€佽繘搴︽樉绀哄拰缁撴灉瀵煎嚭
  4. 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绡囨枃妗繘琛屾繁搴﹁В璇?
  • 姣忕瘒鏂囨。鐙<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绡囨枃妗壒閲忔彁鍙栦俊鎭?
  • <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`
  • 鉁?姝<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 浜嬩欢

**瑙喅鏂规<E98F82>**锛?

  1. 瀵煎叆 DocumentUpload 缁勪欢鍜?Modal
  2. 娣诲姞 uploadModalVisible 鐘舵€?
  3. 涓烘寜閽<EFBFBD>粦瀹?onClick={() => setUploadModalVisible(true)}
  4. 娣诲姞涓婁紶寮圭獥锛岄泦鎴?DocumentUpload 缁勪欢
  5. <EFBFBD><EFBFBD>瀵煎叆璺<EFBFBD>緞锛歚../stores/useKnowledgeBaseStore`

涓夈€佹妧鏈<EFBFBD>毦鐐逛笌瑙喅鏂规<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绡囨枃妗壒澶勭悊锛殈17-28绉?
  • **6绡囨枃妗叏鏂囧姞杞?*锛殈14k-15k tokens
  • 鏂囨。涓婁紶锛氳繘搴﹀疄鏃舵樉绀猴紝鏀<EFBFBD>寔10MB浠ュ唴

涓冦€佸凡鐭ラ棶棰樹笌鏀硅繘鏂瑰悜

褰撳墠闄愬埗

  1. 鎵瑰<EFBFBD>鐞嗗彧鏀<EFBFBD>寔1涓<EFBFBD>ā鏉匡紙涓村簥鐮旂┒淇℃伅鎻愬彇锛?
  2. 鎵瑰<EFBFBD>鐞嗘渶灏?绡囨枃妗紙鍚庣<E98D9A>闄愬埗锛?
  3. 閫愮瘒绮捐<EFBFBD>鏈€澶?绡囨枃妗紙鍓嶇<E98D93>闄愬埗锛?

<EFBFBD>潵浼樺寲

  1. 澧炲姞妯℃澘锛氳嵂鐗╁畨鍏ㄦ€с€佹偅鑰呭熀绾跨壒寰佺瓑
  2. **鑷<>畾涔夋ā鏉?*锛氬厑璁哥敤鎴疯嚜瀹氫箟鎻愬彇瀛楁<E7809B>
  3. **缁撴灉棰勮<E6A3B0>**锛氬湪琛ㄦ牸涓<E789B8>敮鎸佸崟鍏冩牸灞曞紑
  4. **鎵瑰<E98EB5>鐞嗘仮澶?*锛氭敮鎸佷腑鏂<E88591>悗缁х画鎵ц<E98EB5>
  5. **鏂囨。棰勮<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>槸锛?

  1. 鉁?**鏂版灦鏋勮縼绉?*锛氭垚鍔熻縼绉诲埌 frontend-v2 鏂版灦鏋?
  2. 鉁?涓夌<EFBFBD>宸ヤ綔妯″紡锛氬叏鏂囬槄璇汇€侀€愮瘒绮捐<EFBFBD>銆佹壒澶勭悊鍏ㄩ儴瀹炵幇
  3. 鉁?**鎵瑰<E98EB5>鐞嗗畬鏁存祦绋?*锛氫粠妯℃澘閫夋嫨鍒扮粨鏋滃<E98F8B>鍑虹殑瀹屾暣閾捐矾
  4. 鉁?UI/UX浼樺寲锛氬弬鐓у師鍨嬪浘绮剧粏鍖栧疄鐜帮紝鐢ㄦ埛浣撻獙鑹<EFBFBD>
  5. 鉁?<EFBFBD><EFBFBD>喅鑳藉姏锛氬揩閫熷畾浣嶅苟瑙喅10+涓<>妧鏈<E5A6A7>棶棰?

**閲岀▼纰戞剰涔?*锛歅KB妯″潡宸插叿澶囩敓浜х幆澧冨彲鐢ㄦ€э紝涓哄悗缁<E68297>姛鑳芥墿灞曞<E7819E>瀹氫簡鍧氬疄鍩虹<E98DA9>锛?


**涓嬩竴姝ュ缓璁?*锛?

  1. 杩涜<EFBFBD>瀹屾暣鐨勭敤鎴烽獙鏀舵祴璇曪紙UAT锛?
  2. 浼樺寲鎵瑰<EFBFBD>鐞嗘€ц兘锛堝苟鍙戙€佺紦瀛橈級
  3. 澧炲姞鏇村<EFBFBD>妯℃澘鍜岃嚜瀹氫箟鑳藉姏
  4. 瀹屽杽閿欒<EFBFBD>澶勭悊鍜岀敤鎴峰弽棣?