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%)
This commit is contained in:
2026-01-14 19:15:01 +08:00
parent 3d35e9c58b
commit 1b53ab9d52
386 changed files with 52096 additions and 65238 deletions

View File

@@ -1,31 +1,31 @@
# Dify知识库集成开发记录
# Dify鐭ヨ瘑搴撻泦鎴愬紑鍙戣<EFBFBD>褰?
**开发日期**: 2026-01-04
**开发阶段**: Phase 1.5 - AI对话能力
**任务**: 集成Dify知识库实现研究方案文档查询
**状态**: ✅ 已完成
**寮€鍙戞棩鏈?*: 2026-01-04
**寮€鍙戦樁娈?*: Phase 1.5 - AI瀵硅瘽鑳藉姏
**浠诲姟**: 闆嗘垚Dify鐭ヨ瘑搴撳疄鐜扮爺绌舵柟妗堟枃妗f煡璇?
**鐘舵€?*: 鉁?宸插畬鎴?
---
## 📋 开发目标
## 馃搵 寮€鍙戠洰鏍?
在IIT Manager Agent中集成Dify知识库能力使AI能够查询研究方案、伦理文件、CRF表格等文档并与已有的REDCap实时数据查询能力结合实现**混合检索(Hybrid Retrieval**。
鍦↖IT Manager Agent<EFBFBD>泦鎴怐ify鐭ヨ瘑搴撹兘鍔涳紝浣緼I鑳藉<EFBFBD>鏌ヨ<EFBFBD>鐮旂┒鏂规<EFBFBD>銆佷鸡鐞嗘枃浠躲€丆RF琛ㄦ牸绛夋枃妗紝骞朵笌宸叉湁鐨凴EDCap瀹炴椂鏁版嵁鏌ヨ<EFBFBD>鑳藉姏缁撳悎锛屽疄鐜?*娣峰悎妫€绱<E282AC>Hybrid Retrieval锛?*銆?
## 🎯 技术方案
## 馃幆 鎶€鏈<E282AC>柟妗?
### 鏂规<E98F82>閫夋嫨
| 维度 | 方案A单项目单知识库 | 方案B项目分类多知识库 |
| 缁村害 | 鏂规<E98F82>A锛氬崟椤圭洰鍗曠煡璇嗗簱 | 鏂规<E98F82>B锛氶」鐩<E3808D>垎绫诲<E7BBAB>鐭ヨ瘑搴?|
|------|---------------------|---------------------|
| **知识库数量** | 1个IIT项目 → 1个Dify Dataset | 1个IIT项目 → 多个Dataset方案、伦理、CRF |
| **复杂度** | ✅ 简单 | ❌ 复杂 |
| **MVP适用性** | ✅ 高 | ❌ 低 |
| **选择** | **✅ 采用** | ❌ 暂不采用 |
| **鐭ヨ瘑搴撴暟閲?* | 1涓狪IT椤圭洰 鈫?1涓狣ify Dataset | 1涓狪IT椤圭洰 鈫?澶氫釜Dataset锛堟柟妗堛€佷鸡鐞嗐€丆RF锛?|
| **澶嶆潅搴?* | 鉁?绠€鍗?| 鉂?澶嶆潅 |
| **MVP閫傜敤鎬?* | 鉁?楂?| 鉂?浣?|
| **閫夋嫨** | **鉁?閲囩敤** | 鉂?鏆備笉閲囩敤 |
### 鏂囨。涓婁紶鏂瑰紡
- **閲囩敤鏂规<E98F82>**: 閫氳繃Dify Web鐣岄潰鎵嬪姩涓婁紶
- **原因**: MVP阶段文档更新频率低,手动上传更灵活
- **鍘熷洜**: MVP闃舵<EFBFBD>鏂囨。鏇存柊棰戠巼浣庯紝鎵嬪姩涓婁紶鏇寸伒娲?
- **鏈<>潵浼樺寲**: 鍚庣画鍙<E794BB>紑鍙慉PI鑷<49>姩涓婁紶鑳藉姏
### 椤圭洰鍏宠仈鏂瑰紡
@@ -35,7 +35,7 @@
---
## 🛠️ 技术实现
## 馃洜锔?鎶€鏈<E282AC>疄鐜?
### 1. 鏁版嵁搴揝chema楠岃瘉
@@ -57,14 +57,14 @@ model IitProject {
}
```
### 2. 创建Dify知识库
### 2. 鍒涘缓Dify鐭ヨ瘑搴?
**鎿嶄綔姝ラ<E5A79D>**:
1. 登录Dify控制台
1. 鐧诲綍Dify鎺у埗鍙?
2. 鍒涘缓鐭ヨ瘑搴擄細`Dify_test0102`
3. 上传文档:
3. 涓婁紶鏂囨。锛?
- `鏂扮敓鍎垮強濠村効鑳嗘眮娣ょН鐥囦腑瑗垮尰鍗忓悓闃熷垪鐮旂┒鏂规<E98F82>1210-.docx`
- `重大疑难-病例报告表CRF修改1208.docx`
- `閲嶅ぇ鐤戦毦-鐥呬緥鎶ュ憡琛<E686A1>紙CRF锛変慨鏀?208.docx`
4. 绛夊緟鏂囨。澶勭悊瀹屾垚
**Dataset ID**: `b49595b2-bf71-4e47-9988-4aa2816d3c6f`
@@ -115,14 +115,14 @@ private detectIntent(message: string): {
```typescript
private async queryDifyKnowledge(query: string): Promise<string> {
try {
// 1. 获取项目配置包含difyDatasetId
// 1. 鑾峰彇椤圭洰閰嶇疆锛堝寘鍚玠ifyDatasetId锛?
const project = await prisma.iitProject.findFirst({
where: { status: 'active' },
select: { name: true, difyDatasetId: true }
});
if (!project?.difyDatasetId) {
logger.warn('[ChatService] 项目未配置Dify知识库');
logger.warn('[ChatService] 椤圭洰鏈<EFBFBD>厤缃瓺ify鐭ヨ瘑搴?);
return '';
}
@@ -138,7 +138,7 @@ private async queryDifyKnowledge(query: string): Promise<string> {
}
);
// 3. 格式化检索结果
// 3. 鏍煎紡鍖栨<EFBFBD>绱㈢粨鏋?
if (!retrievalResult.records || retrievalResult.records.length === 0) {
return '';
}
@@ -148,20 +148,20 @@ private async queryDifyKnowledge(query: string): Promise<string> {
const score = (record.score * 100).toFixed(1);
const documentName = record.segment?.document?.name || '<EFBFBD>';
const content = record.segment?.content || '';
formattedKnowledge += `\n[文档${index + 1}] ${documentName} (相关度: ${score}%)\n`;
formattedKnowledge += `\n[鏂囨。${index + 1}] ${documentName} (鐩稿叧搴? ${score}%)\n`;
formattedKnowledge += `${content}\n`;
formattedKnowledge += `---\n`;
});
return formattedKnowledge;
} catch (error: any) {
logger.error('[ChatService] Dify检索失败', { query, error: error.message });
return `【知识库查询失败】: ${error.message}`;
logger.error('[ChatService] Dify妫?, { query, error: error.message });
return `銆愮煡璇嗗簱鏌ヨ<EFBFBD>澶辫触銆? ${error.message}`;
}
}
```
#### (3) 更新主对话流程
#### (3) 鏇存柊涓诲<EFBFBD>璇濇祦绋?
```typescript
async handleMessage(userId: string, userMessage: string): Promise<string> {
@@ -180,16 +180,16 @@ async handleMessage(userId: string, userMessage: string): Promise<string> {
toolResult = await this.countRedcapRecords();
}
// 4. 如果需要查询文档Dify知识库执行检索
// 4. 濡傛灉闇€瑕佹煡璇㈡枃妗紙Dify鐭ヨ瘑搴擄級锛屾墽琛屾<EFBFBD>绱?
let difyKnowledge: string = '';
if (intent === 'query_protocol') {
difyKnowledge = await this.queryDifyKnowledge(userMessage);
}
// 5. 获取上下文最近2轮对话
// 5. 鑾峰彇涓婁笅鏂囷紙鏈€杩?杞<><E69D9E>璇濓級
const context = sessionMemory.getContext(userId);
// 6. 构建LLM消息包含查询结果 + Dify知识库
// 6. 鏋勫缓LLM娑堟伅锛堝寘鍚<EFBFBD>煡璇㈢粨鏋?+ Dify鐭ヨ瘑搴擄級
const messages = this.buildMessagesWithData(
userMessage,
context,
@@ -222,7 +222,7 @@ private buildMessagesWithData(
}
];
// 添加历史上下文最近2轮
// 娣诲姞鍘嗗彶涓婁笅鏂囷紙鏈€杩?杞<>
if (context?.length > 0) {
messages.push(...context);
}
@@ -235,7 +235,7 @@ private buildMessagesWithData(
currentUserMessage += `\n\n## 馃搳 REDCap鏌ヨ<E98F8C>缁撴灉\n${JSON.stringify(toolResult, null, 2)}`;
}
// 注入Dify知识库内容
// 娉ㄥ叆Dify鐭ヨ瘑搴撳唴瀹?
if (difyKnowledge) {
currentUserMessage += `\n\n## 馃摎 鐭ヨ瘑搴撶浉鍏虫枃妗<E69E83>n${difyKnowledge}`;
}
@@ -253,40 +253,40 @@ private buildMessagesWithData(
```typescript
private getSystemPromptWithData(): string {
return `你是IIT Manager Agent,一个专业的研究者临床试验助手。
return `浣犳槸IIT Manager Agent锛屼竴涓<EFBFBD>笓涓氱殑鐮旂┒鑰呬复搴婅瘯楠屽姪鎵嬨€?
【核心能力】
- **实时数据查询**通过REDCap API查询患者CRF数据入组、访视、不良事件等
- **研究方案查询**通过Dify知识库检索研究方案、伦理文件、CRF表格等文档
銆愭牳蹇冭兘鍔涖€?
- **瀹炴椂鏁版嵁鏌ヨ<EFBFBD>**锛氶€氳繃REDCap API鏌ヨ<E98F8C>€匔RF鏁版嵁锛堝叆缁勩€佽<E282AC>瑙嗐€佷笉鑹<E7AC89>簨浠剁瓑锛?
- **鐮旂┒鏂规<EFBFBD>鏌ヨ<EFBFBD>**锛氶€氳繃Dify鐭ヨ瘑搴撴<E690B4>绱㈢爺绌舵柟妗堛€佷鸡鐞嗘枃浠躲€丆RF琛ㄦ牸绛夋枃妗?
【关键原则】
1. **数据真实性第一**所有回答必须基于系统提供的真实数据REDCap或Dify),绝不编造数据
銆愬叧閿<EFBFBD>師鍒欍€?
1. **鏁版嵁鐪熷疄鎬х<EFBFBD>涓€**锛氭墍鏈夊洖绛斿繀椤诲熀浜庣郴缁熸彁渚涚殑鐪熷疄鏁版嵁锛圧EDCap鎴朌ify锛夛紝缁濅笉缂栭€犳暟鎹?
2. **鏄庣‘鏁版嵁鏉ユ簮**锛氬尯鍒哛EDCap瀹炴椂鏁版嵁鍜屾枃妗煡璇嗗簱
3. **涓撲笟涓ヨ皑**锛氫娇鐢ㄤ复搴婄爺绌舵湳璇<E6B9B3>紝淇濇寔瀹㈣<E780B9>鍑嗙
4. **简洁高效**:企业微信场景,控制回复长度
4. **绠€娲侀珮鏁?*锛氫紒涓氬井淇″満鏅<E6BA80>紝鎺у埗鍥炲<E98DA5>闀垮害
【数据获取规则】
- 如果系统提供了"📊 REDCap查询结果",必须基于该数据回答
- 如果系统提供了"📚 知识库相关文档",必须基于该文档回答
- 如果未提供数据,明确告知用户"未查询到相关数据",不得编造
銆愭暟鎹<EFBFBD>幏鍙栬<EFBFBD>鍒欍€?
- 濡傛灉绯荤粺鎻愪緵浜?馃搳 REDCap鏌ヨ<E98F8C>缁撴灉"锛屽繀椤诲熀浜庤<E6B59C>鏁版嵁鍥炵瓟
- 濡傛灉绯荤粺鎻愪緵浜?馃摎 鐭ヨ瘑搴撶浉鍏虫枃妗?锛屽繀椤诲熀浜庤<E6B59C>鏂囨。鍥炵瓟
- 濡傛灉鏈<EFBFBD>彁渚涙暟鎹<EFBFBD>紝鏄庣鍛婄煡鐢ㄦ埛"鏈<>煡璇㈠埌鐩稿叧鏁版嵁"锛屼笉寰楃紪閫?
`;
}
```
---
## 🐛 问题排查与解决
## 馃悰 闂<><E99782>鎺掓煡涓庤В鍐?
### 问题1: AI不查询Dify自己编造答案
### <EFBFBD><EFBFBD>1: AI涓嶆煡璇<EFBFBD>ify锛岃嚜宸辩紪閫犵瓟妗?
**鐜拌薄**:
- 用户在企业微信问:"这个研究的纳入标准是什么?"
- AI回答了貌似合理的内容但Dify控制台显示**没有查询记录**
- AI明显在编造(Hallucination
- 鐢ㄦ埛鍦ㄤ紒涓氬井淇¢棶锛?杩欎釜鐮旂┒鐨勭撼鍏ユ爣鍑嗘槸浠€涔堬紵"
- AI鍥炵瓟浜嗚矊浼煎悎鐞嗙殑鍐呭<EFBFBD>锛屼絾Dify鎺у埗鍙版樉绀?*娌℃湁鏌ヨ<E98F8C>璁板綍**
- AI鏄庢樉鍦ㄧ紪閫狅紙Hallucination锛?
**鎺掓煡杩囩▼**:
#### 第一步:检查意图识别
#### <EFBFBD>竴姝ワ細妫€鏌ユ剰鍥捐瘑鍒?
鎬€鐤戯細`detectIntent`鏂规硶娌℃湁璇嗗埆鍑篳query_protocol`鎰忓浘
@@ -298,11 +298,11 @@ if (/(研究方案|伦理|知情同意|CRF|病例报告表|纳入|排除|标准)
}
```
**发现**: 关键词列表中有"纳入"和"标准",但缺少"**入选**"
**鍙戠幇**: 鍏抽敭璇嶅垪琛ㄤ腑鏈?绾冲叆"鍜?鏍囧噯"锛屼絾缂哄皯"**鍏ラ€?*"锛?
用户问的是"纳入标准",但实际文档中更多使用"入选标准"的表述。
鐢ㄦ埛闂<EFBFBD>殑鏄?绾冲叆鏍囧噯"锛屼絾瀹為檯鏂囨。涓<E38082>洿澶氫娇鐢?鍏ラ€夋爣鍑?鐨勮〃杩般€?
**解决**: 扩充关键词列表
**瑙e喅**: 鎵╁厖鍏抽敭璇嶅垪琛?
```typescript
if (/(鐮旂┒鏂规<E98F82>|浼︾悊|鐭ユ儏鍚屾剰|CRF|鐥呬緥鎶ュ憡琛▅绾冲叆|鍏ラ€墊鎺掗櫎|鏍囧噯|鍏ョ粍鏍囧噯|娌荤枟鏂规<E98F82>|璇曢獙璁捐<E79281>|鐮旂┒鐩<E29492>殑|鐮旂┒娴佺▼|瑙傚療鎸囨爣|璇婃柇鏍囧噯|鐤剧梾鏍囧噯)/.test(message)) {
@@ -316,10 +316,10 @@ if (/(研究方案|伦理|知情同意|CRF|病例报告表|纳入|入选|排除|
**鐩<>殑**: 杩借釜Dify妫€绱㈢粨鏋滄槸鍚︽<E98D9A><EFBFBD>敞鍏ュ埌LLM
**发现**: Dify确实被调用了,但返回的内容是`undefined`
**鍙戠幇**: Dify<EFBFBD>疄琚<EFBFBD>皟鐢ㄤ簡锛屼絾杩斿洖鐨勫唴瀹规槸`undefined`锛?
```
[文档1] undefined (相关度: 76.0%)
[鏂囨。1] undefined (鐩稿叧搴? 76.0%)
undefined
---
```
@@ -334,9 +334,9 @@ undefined
"records": [
{
"segment": {
"content": "纳入与排除标准...",
"content": "绾冲叆涓庢帓闄ゆ爣鍑?..",
"document": {
"name": "重大疑难-病例报告表CRF修改1208.docx"
"name": "閲嶅ぇ鐤戦毦-鐥呬緥鎶ュ憡琛<E686A1>紙CRF锛変慨鏀?208.docx"
}
},
"score": 0.7604317
@@ -348,11 +348,11 @@ undefined
**闂<><E99782>鏍瑰洜**: ChatService涓<65>娇鐢ㄤ簡閿欒<E996BF>鐨勫瓧娈佃矾寰勶紒
```typescript
// ❌ 错误的访问方式
// 鉂?閿欒<E996BF>鐨勮<E990A8><EFBFBD>柟寮?
const documentName = record.document_name; // undefined
const content = record.content; // undefined
// ✅ 正确的访问方式
// 鉁?姝鐨勮<E990A8><EFBFBD>柟寮?
const documentName = record.segment?.document?.name;
const content = record.segment?.content;
```
@@ -364,7 +364,7 @@ retrievalResult.records.forEach((record, index) => {
const score = (record.score * 100).toFixed(1);
const documentName = record.segment?.document?.name || '鏈<>煡鏂囨。';
const content = record.segment?.content || '';
formattedKnowledge += `\n[文档${index + 1}] ${documentName} (相关度: ${score}%)\n`;
formattedKnowledge += `\n[鏂囨。${index + 1}] ${documentName} (鐩稿叧搴? ${score}%)\n`;
formattedKnowledge += `${content}\n`;
formattedKnowledge += `---\n`;
});
@@ -374,12 +374,12 @@ retrievalResult.records.forEach((record, index) => {
| 闂<><E99782> | 鏍瑰洜 | 瑙喅鏂规<E98F82> |
|------|------|---------|
| AI编造答案 | 意图识别关键词不全 | 扩充`detectIntent`关键词列表,添加"入选"等医学术语 |
| AI缂栭€犵瓟妗?| 鎰忓浘璇嗗埆鍏抽敭璇嶄笉鍏?| 鎵╁厖`detectIntent`鍏抽敭璇嶅垪琛<E59EAA>紝娣诲姞"鍏ラ€?绛夊尰瀛︽湳璇?|
| Dify鍐呭<E98D90>涓簎ndefined | 閿欒<E996BF>鐨凙PI鍝嶅簲瀛楁<E7809B><EFBFBD>緞 | 淇<><E6B787>涓篳record.segment.document.name`鍜宍record.segment.content` |
---
## ✅ 测试验证
## 鉁?娴嬭瘯楠岃瘉
### 娴嬭瘯1: 鐮旂┒鏂规<E98F82>鏌ヨ<E98F8C>锛圖ify妫€绱<E282AC>
@@ -389,56 +389,56 @@ retrievalResult.records.forEach((record, index) => {
```
鏍规嵁鐮旂┒鏂规<EFBFBD>鏂囨。锛屾湰鐮旂┒鐨勬帓闄ゆ爣鍑嗗寘鎷<EFBFBD>
1. 年龄小于18岁或大于75岁
1. 骞撮緞灏忎簬18宀佹垨澶т簬75宀?
2. 鍚堝苟鍏朵粬涓ラ噸鍣ㄥ畼鍔熻兘闅滅<E99785>
3. 鏃㈠線鏈夌浉鍏宠嵂鐗╄繃鏁忓彶
4. 濡婂<E6BFA1>鎴栧摵涔虫湡濡囧コ
5. 近3个月内参与过其他临床试验
5. 杩?涓<>湀鍐呭弬涓庤繃鍏朵粬涓村簥璇曢獙
如需查看完整排除标准条款,建议您登录系统查阅详细研究方案文档。
濡傞渶鏌ョ湅瀹屾暣鎺掗櫎鏍囧噯鏉℃<EFBFBD>锛屽缓璁<EFBFBD>偍鐧诲綍绯荤粺鏌ラ槄璇︾粏鐮旂┒鏂规<EFBFBD>鏂囨。銆?
```
**鏃ュ織楠岃瘉**:
```
[ChatService] 鎰忓浘璇嗗埆 { intent: 'query_protocol' }
[ChatService] Dify检索成功 { recordCount: 5 }
[ChatService] Dify妫€绱㈡垚鍔?{ recordCount: 5 }
[ChatService] 澶勭悊娑堟伅 { hasDifyKnowledge: true }
```
**结果**: 成功识别意图调用Dify返回正确答案
鉁?**缁撴灉**: 鎴愬姛璇嗗埆鎰忓浘锛岃皟鐢―ify锛岃繑鍥炴<EFBFBD><EFBFBD>瓟妗?
### 娴嬭瘯2: CRF琛ㄦ牸鏌ヨ<E98F8C>锛圖ify妫€绱<E282AC>
**问题**: "CRF表格中有哪些观察指标?"
**<EFBFBD><EFBFBD>**: "CRF琛ㄦ牸涓<EFBFBD>湁鍝<EFBFBD>簺瑙傚療鎸囨爣锛?
**AI鍥炵瓟**:
```
根据研究方案文档CRF表格中的观察指标包括
鏍规嵁鐮旂┒鏂规<EFBFBD>鏂囨。锛孋RF琛ㄦ牸涓<EFBFBD>殑瑙傚療鎸囨爣鍖呮嫭锛?
1. 基线人口学资料
2. 主要疗效指标(如症状评分)
3. 次要疗效指标(如生活质量评分)
4. 安全性指标(不良事件记录)
5. 实验室检查结果
1. 鍩虹嚎浜哄彛瀛﹁祫鏂?
2. 涓昏<EFBFBD>鐤楁晥鎸囨爣锛堝<EFBFBD>鐥囩姸璇勫垎锛?
3. 娆¤<EFBFBD>鐤楁晥鎸囨爣锛堝<EFBFBD>鐢熸椿璐ㄩ噺璇勫垎锛?
4. 瀹夊叏鎬ф寚鏍囷紙涓嶈壇浜嬩欢璁板綍锛?
5. 瀹為獙瀹ゆ<EFBFBD>鏌ョ粨鏋?
具体指标定义和采集时点请查阅详细CRF表格文档。
鍏蜂綋鎸囨爣瀹氫箟鍜岄噰闆嗘椂鐐硅<EFBFBD>鏌ラ槄璇︾粏CRF琛ㄦ牸鏂囨。銆?
```
**结果**: 成功检索CRF文档
鉁?**缁撴灉**: 鎴愬姛妫€绱<EFBFBD>RF鏂囨。
### 测试3: 患者记录查询(REDCap查询)
### 娴嬭瘯3: 鎮€呰<E282AC>褰曟煡璇<E785A1>REDCap鏌ヨ<EFBFBD>锛?
**问题**: "ID 7的患者情况"
**<EFBFBD><EFBFBD>**: "ID 7鐨勬偅鑰呮儏鍐?
**AI鍥炵瓟**:
```
鏍规嵁REDCap鏁版嵁锛孖D 7鐨勬偅鑰呮儏鍐靛<E98D90>涓嬶細
**基本信息**企业微信7男性8岁身高130cm体重50kgBMI 29.6
**联系方式**邮箱gofeng117@163.com
**研究状态**:治疗室记录为"测试7777"DDCD表单已完成。
**鍩烘湰淇℃伅**锛氫紒涓氬井淇?锛岀敺鎬э紝8宀侊紝韬<E7B49D>珮130cm锛屼綋閲?0kg锛孊MI 29.6銆?
**鑱旂郴鏂瑰紡**锛氶偖绠眊ofeng117@163.com銆?
**鐮旂┒鐘舵€?*锛氭不鐤楀<E990A4>璁板綍涓?娴嬭瘯7777"锛孌DCD琛ㄥ崟宸插畬鎴愩€?
如需查看完整记录或更多访视数据建议您登录REDCap系统。
濡傞渶鏌ョ湅瀹屾暣璁板綍鎴栨洿澶氳<EFBFBD>瑙嗘暟鎹<EFBFBD>紝寤鸿<EFBFBD>鎮ㄧ櫥褰昍EDCap绯荤粺銆?
```
**鏃ュ織楠岃瘉**:
@@ -448,20 +448,20 @@ REDCap API: exportRecords success { recordCount: 1 }
[ChatService] 澶勭悊娑堟伅 { hasToolResult: true, hasDifyKnowledge: false }
```
**结果**: 成功识别为REDCap查询返回实时数据
鉁?**缁撴灉**: 鎴愬姛璇嗗埆涓篟EDCap鏌ヨ<EFBFBD>锛岃繑鍥炲疄鏃舵暟鎹?
### 测试4: 统计查询REDCap查询
### 娴嬭瘯4: 缁熻<E7BC81>鏌ヨ<E98F8C>锛圧EDCap鏌ヨ<E98F8C>锛?
**问题**: "目前入组了多少人?"
**<EFBFBD><EFBFBD>**: "<EFBFBD>墠鍏ョ粍浜嗗<EFBFBD>灏戜汉锛?
**AI鍥炵瓟**:
```
根据REDCap实时数据,**test0102**项目目前共有 **11位** 患者入组。
鏍规嵁REDCap瀹炴椂鏁版嵁锛?*test0102**椤圭洰鐩<EFBFBD>墠鍏辨湁 **11浣?* 鎮h€呭叆缁勩€?
记录ID为1至11。如需查看患者详情建议您登录REDCap系统。
璁板綍ID涓?鑷?1銆傚<E98A86>闇€鏌ョ湅鎮€呰<E282AC>鎯咃紝寤鸿<E5AFA4>鎮ㄧ櫥褰昍EDCap绯荤粺銆?
```
**结果**: 成功统计入组人数
鉁?**缁撴灉**: 鎴愬姛缁熻<EFBFBD>鍏ョ粍浜烘暟
### 娴嬭瘯5: 娣峰悎鏌ヨ<E98F8C>锛圖ify妫€绱<E282AC>
@@ -469,12 +469,12 @@ REDCap API: exportRecords success { recordCount: 1 }
**AI鍥炵瓟**:
```
根据研究方案文档,本研究的**主要研究目的**是评估[具体干预措施]在[目标人群]中的有效性和安全性。
鏍规嵁鐮旂┒鏂规<EFBFBD>鏂囨。锛屾湰鐮旂┒鐨?*涓昏<E6B693>鐮旂┒鐩<E29492>殑**鏄<>瘎浼癧鍏蜂綋骞查<E9AA9E><EFBFBD>柦]鍦╗鐩<E29597>爣浜虹兢]涓<>殑鏈夋晥鎬у拰瀹夊叏鎬с€?
由于当前检索到的文档内容不完整,无法提供更详细的具体描述。建议您查阅完整的研究方案文档以获取准确信息。
鐢变簬褰撳墠妫€绱㈠埌鐨勬枃妗唴瀹逛笉瀹屾暣锛屾棤娉曟彁渚涙洿璇︾粏鐨勫叿浣撴弿杩般€傚缓璁<EFBFBD>偍鏌ラ槄瀹屾暣鐨勭爺绌舵柟妗堟枃妗互鑾峰彇鍑嗙淇℃伅銆?
```
**结果**: 成功检索AI能识别信息不完整的情况
鉁?**缁撴灉**: 鎴愬姛妫€绱<EFBFBD>紝AI鑳借瘑鍒<EFBFBD>俊鎭<EFBFBD>笉瀹屾暣鐨勬儏鍐?
---
@@ -484,62 +484,62 @@ REDCap API: exportRecords success { recordCount: 1 }
```
鐢ㄦ埛鎻愰棶锛堜紒涓氬井淇★級
意图识别detectIntent
┌───────────────┬───────────────┬──────────────┐
query_protocolquery_record count_records
│ (文档查询) │ (记录查询) │ (统计查询) │
└───────┬───────┴───────┬───────┴──────┬───────┘
鈫?
鎰忓浘璇嗗埆锛坉etectIntent锛?
鈫?
鈹屸攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈹?query_protocol鈹?query_record 鈹?count_records鈹?
鈹? (鏂囨。鏌ヨ<E98F8C>) 鈹? (璁板綍鏌ヨ<E98F8C>) 鈹? (缁熻<E7BC81>鏌ヨ<E98F8C>) 鈹?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹<EFBFBD>攢鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈫? 鈫? 鈫?
Dify API REDCap API REDCap API
(知识库) (患者数据) (患者数据)
(鐭ヨ瘑搴? (鎮h€呮暟鎹? (鎮h€呮暟鎹?
鈫? 鈫? 鈫?
鏂囨。鐗囨<E99097> JSON鏁版嵁 JSON鏁版嵁
└───────────────┴──────────────┘
鈫? 鈫? 鈫?
鈹斺攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹粹攢鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹€鈹?
鈫?
鏋勫缓LLM Prompt
(System + Context + Data)
鈫?
DeepSeek-V3
鈫?
AI鍥炵瓟
鈫?
浼佷笟寰<E7AC9F>俊鑷<E4BF8A>姩鍥炲<E98DA5>
```
### 鏍稿績鎶€鏈<E282AC>
| 层级 | 技术 | 用途 |
| 灞傜骇 | 鎶€鏈?| 鐢ㄩ€?|
|------|------|------|
| **AI推理** | DeepSeek-V3 | 自然语言理解与生成 |
| **RAG平台** | Dify | 文档存储、分块、向量化、语义检索 |
| **数据源** | REDCap | 临床试验实时数据 |
| **数据库** | PostgreSQL | 项目配置、用户映射 |
| **ORM** | Prisma | 数据库访问 |
| **会话管理** | SessionMemory | 上下文维护最近3轮 |
| **通信** | 企业微信 | 消息接收与发送 |
| **AI鎺ㄧ悊** | DeepSeek-V3 | <EFBFBD>劧璇<EFBFBD>█鐞嗚В涓庣敓鎴?|
| **RAG骞冲彴** | Dify | 鏂囨。瀛樺偍銆佸垎鍧椼€佸悜閲忓寲銆佽<EFBFBD>涔夋<EFBFBD>绱?|
| **鏁版嵁婧?* | REDCap | 涓村簥璇曢獙瀹炴椂鏁版嵁 |
| **鏁版嵁搴?* | PostgreSQL | 椤圭洰閰嶇疆銆佺敤鎴锋槧灏?|
| **ORM** | Prisma | 鏁版嵁搴撹<EFBFBD>闂?|
| **浼氳瘽绠$悊** | SessionMemory | 涓婁笅鏂囩淮鎶わ紙鏈€杩?杞<> |
| **閫氫俊** | 浼佷笟寰<EFBFBD>俊 | 娑堟伅鎺ユ敹涓庡彂閫?|
### 鍏抽敭璁捐<E79281>妯″紡
1. **鎰忓浘椹卞姩璺<E5A7A9>敱 (Intent-Based Routing)**
- 根据用户问题关键词识别意图
- 动态调用不同的数据源(Dify vs REDCap
- 鏍规嵁鐢ㄦ埛闂<E59F9B><E99782>鍏抽敭璇嶈瘑鍒<E79891>剰鍥?
- 鍔ㄦ€佽皟鐢ㄤ笉鍚岀殑鏁版嵁婧愶紙Dify vs REDCap锛?
2. **混合检索 (Hybrid Retrieval)**
- 结构化数据查询(REDCap
- 非结构化文档检索Dify
2. **娣峰悎妫€绱?(Hybrid Retrieval)**
- 缁撴瀯鍖栨暟鎹<E69A9F>煡璇<E785A1>REDCap锛?
- 闈炵粨鏋勫寲鏂囨。妫€绱<E282AC>紙Dify锛?
- 涓よ€呯粨鏋滅粺涓€娉ㄥ叆LLM Prompt
3. **RAG (Retrieval Augmented Generation)**
- 检索相关文档片段
- 注入到LLM上下文
- 减少幻觉Hallucination
- 妫€绱㈢浉鍏虫枃妗g墖娈?
- 娉ㄥ叆鍒癓LM涓婁笅鏂?
- 鍑忓皯骞昏<E9AA9E>锛圚allucination锛?
4. **浼氳瘽璁板繂 (Session Memory)**
- 保留最近3轮对话
- 支持多轮对话上下文
- 淇濈暀鏈€杩?杞<><E69D9E>璇?
- 鏀<>寔澶氳疆瀵硅瘽涓婁笅鏂?
---
@@ -549,13 +549,13 @@ REDCap API: exportRecords success { recordCount: 1 }
| 鎿嶄綔 | 骞冲潎鑰楁椂 | 澶囨敞 |
|------|---------|------|
| Dify检索 | ~1.5s | 语义检索 Top 5 |
| Dify妫€绱?| ~1.5s | <EFBFBD>箟妫€绱?Top 5 |
| REDCap鍗曟潯鏌ヨ<E98F8C> | ~1.2s | HTTP API |
| REDCap统计查询 | ~1.3s | 导出所有记录 |
| REDCap缁熻<EFBFBD>鏌ヨ<EFBFBD> | ~1.3s | 瀵煎嚭鎵€鏈夎<EFBFBD>褰?|
| LLM鎺ㄧ悊 | ~3.5s | DeepSeek-V3, 500 tokens |
| **总响应时间** | ~5-6s | 含网络传输 |
| **鎬诲搷搴旀椂闂?* | ~5-6s | <EFBFBD>綉缁滀紶杈?|
### Token消耗
### Token娑堣€?
| 鍦烘櫙 | Input Tokens | Output Tokens | Total |
|------|-------------|---------------|-------|
@@ -567,13 +567,13 @@ REDCap API: exportRecords success { recordCount: 1 }
## 馃幆 鍚庣画浼樺寲鏂瑰悜
### 短期优化1-2周
### <EFBFBD>湡浼樺寲锛?-2鍛<32>
1. **鎵╁睍鍏抽敭璇嶅簱**
- 鏀堕泦瀹為檯鐢ㄦ埛鎻愰棶
- 补充遗漏的医学术语
- 琛ュ厖閬楁紡鐨勫尰瀛︽湳璇?
2. **优化检索质量**
2. **浼樺寲妫€绱㈣川閲?*
- 璋冩暣Dify鐨刞top_k`鍙傛暟
- 璇曢獙涓嶅悓鐨刞search_method`
@@ -581,55 +581,56 @@ REDCap API: exportRecords success { recordCount: 1 }
- 浼樺寲System Prompt
- 澧炲姞寮曠敤鏉ユ簮灞曠ず
### 中期优化1-2个月
### <EFBFBD>湡浼樺寲锛?-2涓<32>湀锛?
1. **实现多项目支持**
1. **瀹炵幇澶氶」鐩<EFBFBD>敮鎸?*
- 鐢ㄦ埛缁戝畾澶氫釜椤圭洰
- 椤圭洰鍒囨崲鏈哄埗
2. **鏂囨。API涓婁紶**
- 开发自动上传接口
- 定时更新知识库
- 寮€鍙戣嚜鍔ㄤ笂浼犳帴鍙?
- 瀹氭椂鏇存柊鐭ヨ瘑搴?
3. **检索结果缓存**
3. **妫€绱㈢粨鏋滅紦瀛?*
- Redis缂撳瓨楂橀<E6A582><EFBFBD><E99782>
- 鍑忓皯Dify璋冪敤娆℃暟
### 长期优化3-6个月
### 闀挎湡浼樺寲锛?-6涓<36>湀锛?
1. **多知识库联合检索**
- 按文档类型分类方案、伦理、CRF
1. **澶氱煡璇嗗簱鑱斿悎妫€绱?*
- 鎸夋枃妗被鍨嬪垎绫伙紙鏂规<EFBFBD>銆佷鸡鐞嗐€丆RF锛?
- 鏅鸿兘璺<E58598>敱鍒板<E98D92>搴旂煡璇嗗簱
2. **混合检索增强**
2. **娣峰悎妫€绱㈠<EFBFBD>寮?*
- 鍚屾椂鏌ヨ<E98F8C>REDCap鍜孌ify
- 融合结构化+非结构化数据
- 铻嶅悎缁撴瀯鍖?闈炵粨鏋勫寲鏁版嵁
3. **瀵硅瘽璐ㄩ噺鐩戞帶**
- 用户满意度评分
- 答案准确性审计
- 鐢ㄦ埛婊℃剰搴﹁瘎鍒?
- 绛旀<EFBFBD>鍑嗙у<EFBFBD>璁?
---
## 馃摎 鐩稿叧鏂囨。
- [IIT Manager Agent 技术路径与架构设计](../02-技术设计/IIT%20Manager%20Agent%20技术路径与架构设计.md)
- [IIT Manager Agent 鎶€鏈<EFBFBD>矾寰勪笌鏋舵瀯璁捐<EFBFBD>](../02-鎶€鏈<EFBFBD><EFBFBD>璁?IIT%20Manager%20Agent%20鎶€鏈<EFBFBD>矾寰勪笌鏋舵瀯璁捐<EFBFBD>.md)
- [IIT Manager Agent 鎶€鏈<E282AC>€哄姟娓呭崟](../07-鎶€鏈<E282AC>€哄姟/IIT%20Manager%20Agent%20鎶€鏈<E282AC>€哄姟娓呭崟.md)
- [Phase1.5-AI对话能力开发计划](../04-开发计划/Phase1.5-AI对话能力开发计划.md)
- [Phase1.5-AI瀵硅瘽鑳藉姏寮€鍙戣<EFBFBD>鍒抅(../04-寮€鍙戣<E98D99>鍒?Phase1.5-AI瀵硅瘽鑳藉姏寮€鍙戣<E98D99>鍒?md)
---
## 👥 开发人员
## 馃懃 寮€鍙戜汉鍛?
- **开发者**: AI Assistant + FengZhiBo
- **寮€鍙戣€?*: AI Assistant + FengZhiBo
- **娴嬭瘯**: FengZhiBo锛堜紒涓氬井淇湡瀹炵幆澧冿級
- **鏂囨。**: AI Assistant
---
**✅ 开发完成时间**: 2026-01-04
**✅ 测试状态**: 全部通过
**✅ 部署状态**: 已部署到开发环境
**鉁?寮€鍙戝畬鎴愭椂闂?*: 2026-01-04
**鉁?娴嬭瘯鐘舵€?*: 鍏ㄩ儴閫氳繃
**鉁?閮ㄧ讲鐘舵€?*: 宸查儴缃插埌寮€鍙戠幆澧?