Files
AIclinicalresearch/docs/03-业务模块/IIT Manager Agent/07-技术债务/IIT Manager Agent 技术债务清单.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

689 lines
15 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.
# IIT Manager Agent 鎶€鏈<E282AC>€哄姟娓呭崟
**鏂囨。鐗堟湰**: v1.0
**鏈€鍚庢洿鏂?*: 2026-01-04
**褰撳墠闃舵<E99783>**: Phase 1.5 瀹屾垚
---
## 馃搵 鏂囨。璇存槑
<EFBFBD>枃妗<EFBFBD>褰旾IT Manager Agent妯″潡鐨勬妧鏈<E5A6A7>€哄姟锛屽寘鎷<E5AF98>綋鍓嶇殑涓存椂鏂规<E98F82>銆佸凡鐭ラ檺鍒躲€佸緟浼樺寲椤癸紝浠ュ強鏈<E5BCB7>潵鏀硅繘璁″垝銆?
---
## 馃幆 鎶€鏈<E282AC>€哄姟浼樺厛绾у畾涔?
| 浼樺厛绾?| 璇存槑 | 澶勭悊鏃舵満 |
|-------|------|---------|
| **P0 - 闃诲<E99783>鎬?* | 褰卞搷鏍稿績鍔熻兘锛屽繀椤荤珛鍗冲<E98D97>鐞?| 绔嬪嵆 |
| **P1 - 楂樹紭鍏堢骇** | 褰卞搷鐢ㄦ埛浣撻獙鎴栨€ц兘锛屽缓璁甈hase 2澶勭悊 | 1涓<31>湀鍐?|
| **P2 - 涓<>紭鍏堢骇** | 鍔熻兘澧炲己锛屽彲鍦≒hase 3澶勭悊 | 3涓<33>湀鍐?|
| **P3 - 浣庝紭鍏堢骇** | 浼樺寲椤癸紝闀挎湡瑙勫垝 | 6涓<36>湀鍐?|
---
## 馃敶 P0 - 闃诲<E99783>у€哄姟
**褰撳墠鐘舵€?*: 鉁?鏃燩0绾у€哄姟
---
## 馃煚 P1 - 楂樹紭鍏堢骇鍊哄姟
### 1. 鎰忓浘璇嗗埆鍗囩骇
**褰撳墠鏂规<E98F82>**: 鍏抽敭璇嶅尮閰嶏紙姝e垯琛ㄨ揪寮忥級
**闂<><E99782>**:
- 鈿狅笍 鏃犳硶鐞嗚В澶嶆潅鐨勮嚜鐒惰<E99092>瑷€
- 鈿狅笍 瀹规槗璇<E6A797>垽杈圭紭case
- 鈿狅笍 闇€瑕佷汉宸ョ淮鎶ゅ叧閿<E58FA7>瘝鍒楄〃
**褰卞搷**:
- 褰撶敤鎴蜂娇鐢ㄩ潪鏍囧噯琛ㄨ揪鏃讹紝鍙<E7B49D>兘鏃犳硶姝璇嗗埆鎰忓浘
- 渚嬪<E6B89A>锛?甯<>垜鐪嬩竴涓嬮偅涓?鍙风殑鏁版嵁" 鍙<>兘鏃犳硶璇嗗埆涓篳query_record`
**鏀硅繘鏂规<E98F82>**:
**鏂规<E98F82>A: LLM鎰忓浘鍒ゆ柇**锛堟帹鑽愶級
```typescript
// 浣跨敤LLM杩涜<E69DA9>鎰忓浘鍒嗙被
const intentPrompt = `浣犳槸鎰忓浘璇嗗埆涓撳<EFBFBD>銆傜敤鎴锋秷鎭<EFBFBD>${userMessage}
璇峰垽鏂<EFBFBD>敤鎴锋剰鍥撅紝浠庝互涓嬮€夐」涓<EFBFBD>€夋嫨锛?
1. query_record - 鏌ヨ<E98F8C>鐗瑰畾鎮€呰<E282AC>褰?
2. count_records - 缁熻<E7BC81>€呮暟閲?
3. query_protocol - 鏌ヨ<E98F8C>鐮旂┒鏂规<E98F82>鏂囨。
4. project_info - 鏌ヨ<E98F8C>椤圭洰淇℃伅
5. general_chat - 鏅<>€氬<E282AC>璇?
<EFBFBD>繑鍥濲SON: {"intent": "xxx", "params": {...}}
`;
const intentResult = await llm.chat([{ role: 'user', content: intentPrompt }]);
```
**浼樺娍**:
- 鉁?鐞嗚В鑳藉姏寮猴紝鏀<E7B49D>寔澶嶆潅琛ㄨ揪
- 鉁?鏃犻渶缁存姢鍏抽敭璇?
- 鉁?閫傚簲鎬уソ
**鍔e娍**:
- 鉂?澧炲姞涓€娆<E282AC>LM璋冪敤锛垀1绉掞紝+楼0.0001鎴愭湰锛?
- 鉂?鎬诲搷搴旀椂闂村<E99782>鍔犲埌~6绉?
**鏂规<E98F82>B: BERT鍒嗙被妯″瀷**
```python
# 璁<>粌鎰忓浘鍒嗙被妯″瀷
from transformers import BertForSequenceClassification
model = BertForSequenceClassification.from_pretrained(
'bert-base-chinese',
num_labels=5
)
# 璁<>粌鏁版嵁锛?00-200涓<30>爣娉ㄦ牱鏈?
# 鎺ㄧ悊閫熷害锛?100ms
```
**浼樺娍**:
- 鉁?閫熷害蹇<E5AEB3>紙<100ms锛?
- 鉁?鐞嗚В鑳藉姏寮?
- 鉁?鎴愭湰浣?
**鍔e娍**:
- 鉂?闇€瑕佹爣娉ㄨ<E5A889>缁冩暟鎹?
- 鉂?闇€瑕侀儴缃叉ā鍨嬫湇鍔?
- 鉂?闇€瑕佹寔缁<E5AF94>凯浠?
**寤鸿<E5AFA4>**:
- Phase 2: 鍏堜娇鐢ㄦ柟妗圓锛圠LM鍒ゆ柇锛夛紝蹇<E7B49D>€熼獙璇佹晥鏋?
- Phase 3: 濡傛灉閲忓ぇ锛屽啀鍒囨崲鍒版柟妗圔锛圔ERT妯″瀷锛?
**棰勮<E6A3B0>宸ヤ綔閲?*: 2-3澶?
---
### 2. 涓婁笅鏂囧瓨鍌ㄨ縼绉诲埌Redis
**褰撳墠鏂规<E98F82>**: 鍐呭瓨缂撳瓨锛圢ode.js Map锛?
**闂<><E99782>**:
- 鈿狅笍 鍗曟満鍐呭瓨锛屼笉鏀<E7AC89>寔鍒嗗竷寮忛儴缃?
- 鈿狅笍 鏈嶅姟閲嶅惎鍚庝笂涓嬫枃涓㈠け
- 鈿狅笍 鍐呭瓨鍗犵敤鏃犻檺鍒讹紙铏芥湁鑷<E6B981>姩娓呯悊锛屼絾浠嶆湁椋庨櫓锛?
**褰卞搷**:
- 褰撳悗绔<E68297>湇鍔¢噸鍚<E599B8>椂锛屾墍鏈夌敤鎴风殑瀵硅瘽涓婁笅鏂囦細涓㈠け
- 濡傛灉閮ㄧ讲澶氫釜瀹炰緥锛岀敤鎴疯<E98EB4>姹傚彲鑳借矾鐢卞埌涓嶅悓瀹炰緥锛屽<E9949B>鑷翠笂涓嬫枃涓㈠け
**鏀硅繘鏂规<E98F82>**:
```typescript
// backend/src/modules/iit-manager/agents/SessionMemory.ts
import Redis from 'ioredis';
export class SessionMemory {
private redis: Redis;
private readonly EXPIRE_TIME = 1800; // 30鍒嗛挓
constructor() {
this.redis = new Redis(config.redisUrl);
}
async addMessage(userId: string, role: 'user' | 'assistant', content: string): Promise<void> {
const key = `session:${userId}`;
const message = { role, content, timestamp: Date.now() };
// 1. 鑾峰彇褰撳墠浼氳瘽
const sessionData = await this.redis.get(key);
const session = sessionData ? JSON.parse(sessionData) : { messages: [] };
// 2. 娣诲姞娑堟伅
session.messages.push(message);
// 3. 淇濇寔鏈€杩?杞?
if (session.messages.length > 6) {
session.messages = session.messages.slice(-6);
}
// 4. 瀛樺洖Redis锛?0鍒嗛挓杩囨湡锛?
await this.redis.setex(key, this.EXPIRE_TIME, JSON.stringify(session));
}
async getContext(userId: string): Promise<string> {
const key = `session:${userId}`;
const sessionData = await this.redis.get(key);
if (!sessionData) return '';
const session = JSON.parse(sessionData);
return session.messages
.map(m => `${m.role === 'user' ? '鐢ㄦ埛' : 'AI'}: ${m.content}`)
.join('\n\n');
}
}
```
**浼樺娍**:
- 鉁?鏀<>寔鍒嗗竷寮忛儴缃?
- 鉁?鏈嶅姟閲嶅惎涓嶄涪澶变笂涓嬫枃
- 鉁?鍐呭瓨鍗犵敤鍙<E695A4>
**鍔e娍**:
- 鉂?澧炲姞Redis渚濊禆
- 鉂?姣忔<E5A7A3>璇诲啓闇€瑕佺綉缁淚O锛垀1-2ms锛?
**寤鸿<E5AFA4>**: Phase 2瀹炴柦锛屼紭鍏堢骇涓<E9AA87>
**棰勮<E6A3B0>宸ヤ綔閲?*: 1澶?
---
### 3. Dify妫€绱㈢粨鏋滅紦瀛?
**褰撳墠鏂规<E98F82>**: 姣忔<E5A7A3>閮借皟鐢―ify API妫€绱?
**闂<><E99782>**:
- 鈿狅笍 鐩稿悓闂<E68293><E99782>閲嶅<E996B2>妫€绱<E282AC>紝娴<E7B49D>垂鏃堕棿
- 鈿狅笍 Dify API鍝嶅簲鏃堕棿鍗?0%锛?.5-1.7绉掞級
**褰卞搷**:
- 鍝嶅簲閫熷害鏈夋彁鍗囩┖闂?
- 鐩稿悓闂<E68293><E99782><EFBFBD>簩娆¤<E5A886><EFBFBD>粛闇€1.5绉?
**鏀硅繘鏂规<E98F82>**:
```typescript
// 浣跨敤Redis缂撳瓨Dify妫€绱㈢粨鏋?
private async queryDifyKnowledge(query: string): Promise<string> {
// 1. 鐢熸垚缂撳瓨key锛坬uery鐨刪ash锛?
const cacheKey = `dify:${md5(query)}`;
// 2. 灏濊瘯浠庣紦瀛樿幏鍙?
const cached = await redis.get(cacheKey);
if (cached) {
logger.info('Dify妫<EFBFBD>?, { query });
return cached;
}
// 3. 璋冪敤Dify API
const result = await difyClient.retrieveKnowledge(...);
// 4. 鏍煎紡鍖栫粨鏋?
const formattedKnowledge = this.formatDifyResult(result);
// 5. 缂撳瓨缁撴灉锛?灏忔椂锛?
await redis.setex(cacheKey, 3600, formattedKnowledge);
return formattedKnowledge;
}
```
**浼樺娍**:
- 鉁?鐩稿悓闂<E68293><E99782>鍝嶅簲閫熷害鎻愬崌1.5绉掞紙浠?.8绉掗檷鍒?.3绉掞級
- 鉁?鍑忓皯Dify API璋冪敤娆℃暟
- 鉁?闄嶄綆Dify鏈嶅姟鍣ㄨ礋杞?
**鍔e娍**:
- 鉂?鏂囨。鏇存柊鍚庨渶瑕佹竻闄ょ紦瀛?
- 鉂?缂撳瓨鍗犵敤Redis鍐呭瓨
**缂撳瓨澶辨晥绛栫暐**:
- 鏂囨。涓婁紶/鏇存柊/鍒犻櫎鏃讹紝娓呴櫎瀵瑰簲Dataset鐨勬墍鏈夌紦瀛?
- 缂撳瓨杩囨湡鏃堕棿锛?灏忔椂
**寤鸿<E5AFA4>**: Phase 2瀹炴柦锛屼紭鍏堢骇涓?
**棰勮<E6A3B0>宸ヤ綔閲?*: 1澶?
---
### 4. REDCap鏁版嵁缂撳瓨
**褰撳墠鏂规<E98F82>**: 姣忔<E5A7A3>閮借皟鐢≧EDCap API鏌ヨ<E98F8C>
**闂<><E99782>**:
- 鈿狅笍 REDCap API鍝嶅簲鏃堕棿鍗?5%锛?.2-1.3绉掞級
- 鈿狅笍 鎮€呭熀鏈<E78680>俊鎭<E4BF8A>彉鍖栭<E98D96>鐜囦綆锛屼笉闇€瑕佹瘡娆″疄鏃舵煡璇?
**褰卞搷**:
- 鍝嶅簲閫熷害鏈夋彁鍗囩┖闂?
- 澧炲姞REDCap鏈嶅姟鍣ㄨ礋杞?
**鏀硅繘鏂规<E98F82>**:
```typescript
// 鍒嗗眰缂撳瓨绛栫暐
private async queryRedcapRecord(recordId: string): Promise<any> {
const cacheKey = `redcap:record:${recordId}`;
// 1. 灏濊瘯浠庣紦瀛樿幏鍙?
const cached = await redis.get(cacheKey);
if (cached) {
return JSON.parse(cached);
}
// 2. 璋冪敤REDCap API
const records = await redcap.exportRecords({ records: [recordId] });
// 3. 缂撳瓨缁撴灉锛?鍒嗛挓锛?
await redis.setex(cacheKey, 300, JSON.stringify(records[0]));
return records[0];
}
```
**缂撳瓨绛栫暐**:
| 鏁版嵁绫诲瀷 | 缂撳瓨鏃堕棿 | 鍘熷洜 |
|---------|---------|------|
| 鎮€呭熀鏈<E78680>俊鎭?| 5鍒嗛挓 | 鍙樺寲棰戠巼浣?|
| 缁熻<E7BC81>鏁版嵁 | 1鍒嗛挓 | 闇€瑕佽緝瀹炴椂 |
| 椤圭洰閰嶇疆 | 1灏忔椂 | 鍑犱箮涓嶅彉 |
**浼樺娍**:
- 鉁?鍝嶅簲閫熷害鎻愬崌1.2绉?
- 鉁?鍑忓皯REDCap鏈嶅姟鍣ㄨ礋杞?
**鍔e娍**:
- 鉂?鏁版嵁鍙<E5B581>兘鏈?鍒嗛挓寤惰繜
**寤鸿<E5AFA4>**: Phase 2瀹炴柦锛岄渶涓庣敤鎴风璁ゆ槸鍚︽帴鍙?鍒嗛挓寤惰繜
**棰勮<E6A3B0>宸ヤ綔閲?*: 1澶?
---
## 馃煛 P2 - 涓<>紭鍏堢骇鍊哄姟
### 5. 鏂囨。涓婁紶API寮€鍙?
**褰撳墠鏂规<E98F82>**: 鎵嬪姩閫氳繃Dify鐣岄潰涓婁紶鏂囨。
**闂<><E99782>**:
- 鈿狅笍 涓嶆敮鎸佹壒閲忎笂浼?
- 鈿狅笍 闇€瑕佺櫥褰旸ify绯荤粺
- 鈿狅笍 鏃犳硶鑷<E7A1B6>姩鍖?
**褰卞搷**:
- PI鏃犳硶鑷<E7A1B6>姪涓婁紶鐮旂┒鏂囨。
- 闇€瑕佹妧鏈<E5A6A7>汉鍛樺崗鍔?
**鏀硅繘鏂规<E98F82>**:
```typescript
// backend/src/modules/iit-manager/routes/index.ts
// 涓婁紶鏂囨。鍒伴」鐩<E3808D>煡璇嗗簱
router.post('/projects/:projectId/documents', async (request, reply) => {
const { projectId } = request.params;
const file = await request.file();
// 1. 鑾峰彇椤圭洰閰嶇疆
const project = await prisma.iitProject.findUnique({
where: { id: projectId },
select: { difyDatasetId: true }
});
// 2. 涓婁紶鍒癉ify
const buffer = await file.toBuffer();
const result = await difyClient.uploadDocumentDirectly(
project.difyDatasetId,
buffer,
file.filename
);
// 3. 绛夊緟绱㈠紩瀹屾垚
await difyClient.waitForDocumentProcessing(
project.difyDatasetId,
result.document.id
);
return reply.send({ success: true, documentId: result.document.id });
});
// 鍒犻櫎鏂囨。
router.delete('/projects/:projectId/documents/:documentId', async (request, reply) => {
// 瀹炵幇鏂囨。鍒犻櫎
});
// 鑾峰彇鏂囨。鍒楄〃
router.get('/projects/:projectId/documents', async (request, reply) => {
// 瀹炵幇鏂囨。鍒楄〃鏌ヨ<E98F8C>
});
```
**鍓嶇<E98D93>鐣岄潰**锛堝彲閫夛級:
- 鏂囨。涓婁紶琛ㄥ崟
- 鏂囨。鍒楄〃灞曠ず
- 鏂囨。鐘舵€佽拷韪<E68BB7>紙uploading 鈫?indexing 鈫?completed锛?
**寤鸿<E5AFA4>**: Phase 3瀹炴柦锛屼紭鍏堢骇涓?
**棰勮<E6A3B0>宸ヤ綔閲?*: 2-3澶?
---
### 6. 鐢ㄦ埛缁戝畾榛樿<E6A69B>椤圭洰
**褰撳墠鏂规<E98F82>**: 鎵€鏈夌敤鎴峰叡浜<E58FA1>悓涓€涓<E282AC>椿璺冮」鐩<E3808D>`status='active'`锛?
**闂<><E99782>**:
- 鈿狅笍 鏃犳硶鏀<E7A1B6>寔澶氶」鐩?
- 鈿狅笍 涓嶅悓鐢ㄦ埛鍙<E59F9B>兘鍏虫敞涓嶅悓椤圭洰
**褰卞搷**:
- 濡傛灉鏈夊<E98F88>涓狪IT椤圭洰锛屾棤娉曞尯鍒嗙敤鎴峰睘浜庡摢涓<E691A2>」鐩?
**鏀硅繘鏂规<E98F82>**:
**鏁版嵁妯″瀷鏇存柊**:
```typescript
// backend/prisma/schema.prisma
model IitUserMapping {
// ... 鐜版湁瀛楁<E7809B> ...
// 鏂板<E98F82>锛氱敤鎴风殑榛樿<E6A69B>椤圭洰
defaultProjectId String? @map("default_project_id")
}
```
**ChatService鏇存柊**:
```typescript
async handleMessage(userId: string, userMessage: string): Promise<string> {
// 1. 鑾峰彇鐢ㄦ埛鐨勯粯璁ら」鐩?
const userMapping = await prisma.iitUserMapping.findFirst({
where: { wecomUserId: userId }
});
const projectId = userMapping?.defaultProjectId;
// 2. 鍩轰簬椤圭洰鏌ヨ<E98F8C>鏁版嵁
const project = await prisma.iitProject.findUnique({
where: { id: projectId }
});
// 鍚庣画閫昏緫...
}
```
**寤鸿<E5AFA4>**: Phase 2鍚庢湡瀹炴柦锛屽綋鏈夊<E98F88><EFBFBD>」鐩<E3808D>
**棰勮<E6A3B0>宸ヤ綔閲?*: 1-2澶?
---
### 7. Function Calling鍗囩骇
**褰撳墠鏂规<E98F82>**: 鍏抽敭璇嶆剰鍥捐瘑鍒?鈫?鎵嬪姩璋冪敤宸ュ叿
**闂<><E99782>**:
- 鈿狅笍 鏃犳硶鑷<E7A1B6>姩鍐冲畾鏄<E795BE>惁璋冪敤宸ュ叿
- 鈿狅笍 鏃犳硶鏍规嵁涓婁笅鏂囪嚜鍔ㄦ彁鍙栧弬鏁?
**褰卞搷**:
- 濡傛灉鐢ㄦ埛闂?7鍙锋偅鑰呭拰8鍙锋偅鑰呭摢涓<E691A2>洿涓ラ噸锛?锛屽綋鍓嶆棤娉曡嚜鍔ㄦ煡璇<E785A1>袱涓<E8A2B1>偅鑰?
**鏀硅繘鏂规<E98F82>**:
浣跨敤DeepSeek-V3鐨?*Native Function Calling**:
```typescript
// 瀹氫箟宸ュ叿
const tools = [
{
type: 'function',
function: {
name: 'query_redcap_record',
description: '鏌ヨ<E98F8C>REDCap涓<70>壒瀹氭偅鑰呯殑璁板綍',
parameters: {
type: 'object',
properties: {
recordId: {
type: 'string',
description: '鎮€呰<E282AC>褰旾D'
}
},
required: ['recordId']
}
}
},
{
type: 'function',
function: {
name: 'query_dify_knowledge',
description: '妫€绱㈢爺绌舵柟妗堛€丆RF琛ㄦ牸绛夋枃妗?,
parameters: {
type: 'object',
properties: {
query: {
type: 'string',
description: '<EFBFBD><EFBFBD><EFBFBD>'
}
},
required: ['query']
}
}
}
];
// LLM鑷<4D>姩鍐冲畾璋冪敤鍝<E695A4>簺宸ュ叿
const response = await llm.chat(messages, { tools });
// 澶勭悊宸ュ叿璋冪敤
if (response.tool_calls) {
for (const toolCall of response.tool_calls) {
if (toolCall.function.name === 'query_redcap_record') {
const args = JSON.parse(toolCall.function.arguments);
const result = await this.queryRedcapRecord(args.recordId);
// 缁х画瀵硅瘽...
}
}
}
```
**浼樺娍**:
- 鉁?LLM鑷<4D>姩鍐冲畾鏄<E795BE>惁璋冪敤宸ュ叿
- 鉁?鑷<>姩鎻愬彇鍙傛暟锛堝<E9949B>recordId锛?
- 鉁?鏀<>寔澶氬伐鍏峰苟琛岃皟鐢?
- 鉁?鏇存櫤鑳姐€佹洿鐏垫椿
**鍔e娍**:
- 鉂?澧炲姞涓€娆<E282AC>LM璋冪敤
- 鉂?鎬诲搷搴旀椂闂村彲鑳藉<E991B3>鍔犲埌7-8绉?
**寤鸿<E5AFA4>**: Phase 3瀹炴柦锛屼綔涓洪珮绾у姛鑳?
**棰勮<E6A3B0>宸ヤ綔閲?*: 3-5澶?
---
### 8. 鏅鸿兘寮曠敤绯荤粺
**褰撳墠鏂规<E98F82>**: Dify杩斿洖鐨勬枃妗墖娈电洿鎺ユ樉绀?
**闂<><E99782>**:
- 鈿狅笍 鏃犳硶婧<E7A1B6>簮鍒板叿浣撴枃妗拰浣嶇疆
- 鈿狅笍 鐢ㄦ埛鏃犳硶楠岃瘉淇℃伅鏉ユ簮
**褰卞搷**:
- 鐢ㄦ埛浣撻獙涓嶅<E6B693>閫忔槑
**鏀硅繘鏂规<E98F82>**:
鍙傝€傾SL妯″潡鐨勬櫤鑳藉紩鐢ㄧ郴缁燂細
```typescript
// 1. 鏀堕泦寮曠敤淇℃伅
interface Citation {
id: number;
documentName: string;
segmentIndex: number;
score: number;
content: string;
}
// 2. AI鍥炵瓟涓<E7939F>彃鍏ュ紩鐢ㄦ爣璁?
const answer = `鏍规嵁鐮旂┒鏂规<EFBFBD>[1]鍜孋RF琛ㄦ牸[2]锛岀撼鍏ユ爣鍑嗗寘鎷<E5AF98>
1. 骞撮緞18-75宀乕1]
2. 绗﹀悎璇婃柇鏍囧噯[1][2]
3. 绛剧讲鐭ユ儏鍚屾剰涔<E589B0>3]
---
馃摎 **鍙傝€冩枃鐚?*
[1] 馃搫 **鐮旂┒鏂规<E98F82>.pdf** - 绗?娈?(鐩稿叧搴?5%)
"绾冲叆鏍囧噯锛氬勾榫?8-75宀侊紝绗﹀悎璇婃柇鏍囧噯..."
[2] 馃搫 **CRF琛ㄦ牸.docx** - 绗?娈?(鐩稿叧搴?2%)
"鍩虹嚎璇勪及鍖呮嫭锛氳瘖鏂<E79896>爣鍑嗐€佸叆缁勬椂闂?.."
`;
// 3. 鍓嶇<E98D93>楂樹寒鏄剧ず寮曠敤
// 鐐瑰嚮[1]璺宠浆鍒板紩鐢ㄨ<E990A2>鎯?
```
**寤鸿<E5AFA4>**: Phase 3瀹炴柦锛屼綔涓轰綋楠屼紭鍖?
**棰勮<E6A3B0>宸ヤ綔閲?*: 3-4澶?
---
## 馃煝 P3 - 浣庝紭鍏堢骇鍊哄姟
### 9. 鎵归噺鏁版嵁鏌ヨ<E98F8C>浼樺寲
**褰撳墠鏂规<E98F82>**: 鍗曟潯璁板綍鏌ヨ<E98F8C>
**闂<><E99782>**:
- 鈿狅笍 濡傛灉鐢ㄦ埛闂?鎵€鏈夋偅鑰呯殑鍏ョ粍鎯呭喌"锛岄渶瑕佸<E79195>娆℃煡璇?
**鏀硅繘鏂规<E98F82>**:
-<>寔鎵归噺鏌ヨ<E98F8C>
- 鐢熸垚鏁版嵁鎽樿<E98EBD>
**寤鸿<E5AFA4>**: Phase 4瀹炴柦
**棰勮<E6A3B0>宸ヤ綔閲?*: 2-3澶?
---
### 10. 澶氳疆瀵硅瘽浼樺寲
**褰撳墠鏂规<E98F82>**: 淇濈暀鏈€杩?杞<><E69D9E>璇?
**闂<><E99782>**:
- 鈿狅笍 闀垮<E99780>璇濆彲鑳戒涪澶遍噸瑕佷笂涓嬫枃
**鏀硅繘鏂规<E98F82>**:
- 鏅鸿兘涓婁笅鏂囧帇缂╋紙鎻愬彇鍏抽敭淇℃伅锛?
- 闀挎湡璁板繂锛堝瓨鍌ㄩ噸瑕佷俊鎭<E4BF8A>埌鏁版嵁搴擄級
**寤鸿<E5AFA4>**: Phase 4瀹炴柦
**棰勮<E6A3B0>宸ヤ綔閲?*: 5-7澶?
---
## 馃搳 鍊哄姟浼樺厛绾ф€昏<E282AC>
| 鍊哄姟椤?| 浼樺厛绾?| 褰卞搷 | 宸ヤ綔閲?| 寤鸿<E5AFA4>鏃堕棿 |
|-------|--------|------|--------|----------|
| 鎰忓浘璇嗗埆鍗囩骇 | P1 | 鍑嗙‘鐜?| 2-3澶?| Phase 2 |
| 涓婁笅鏂囪縼绉籖edis | P1 | 鍙<>敤鎬?| 1澶?| Phase 2 |
| Dify缁撴灉缂撳瓨 | P1 | 鎬ц兘 | 1澶?| Phase 2 |
| REDCap鏁版嵁缂撳瓨 | P1 | 鎬ц兘 | 1澶?| Phase 2 |
| 鏂囨。涓婁紶API | P2 | 鍔熻兘 | 2-3澶?| Phase 3 |
| 鐢ㄦ埛缁戝畾椤圭洰 | P2 | 鍔熻兘 | 1-2澶?| Phase 2鍚庢湡 |
| Function Calling | P2 | 鏅鸿兘鍖?| 3-5澶?| Phase 3 |
| 鏅鸿兘寮曠敤绯荤粺 | P2 | 浣撻獙 | 3-4澶?| Phase 3 |
| 鎵归噺鏌ヨ<E98F8C>浼樺寲 | P3 | 鍔熻兘 | 2-3澶?| Phase 4 |
| 澶氳疆瀵硅瘽浼樺寲 | P3 | 浣撻獙 | 5-7澶?| Phase 4 |
---
## 馃幆 Phase 2 鍊哄姟娓呭伩璁″垝
### Week 1-2: 鎬ц兘浼樺寲
- [ ] 涓婁笅鏂囪縼绉诲埌Redis锛?澶╋級
- [ ] Dify缁撴灉缂撳瓨锛?澶╋級
- [ ] REDCap鏁版嵁缂撳瓨锛?澶╋級
- [ ] 鎬ц兘娴嬭瘯涓庤皟浼橈紙1澶╋級
**棰勬湡鏁堟灉**:
- 鍝嶅簲鏃堕棿浠?.8绉掗檷鍒?-3绉?
-<>寔鍒嗗竷寮忛儴缃?
- 鏈嶅姟閲嶅惎涓嶄涪澶变笂涓嬫枃
### Week 3-4: 鎰忓浘璇嗗埆鍗囩骇
- [ ] 瀹炵幇LLM鎰忓浘鍒ゆ柇锛?澶╋級
- [ ] A/B娴嬭瘯瀵规瘮锛?澶╋級
- [ ] 涓婄嚎鐏板害鍙戝竷锛?澶╋級
**棰勬湡鏁堟灉**:
- 鎰忓浘璇嗗埆鍑嗙‘鐜囦繚鎸?00%
-<>寔澶嶆潅鑷<E6BD85>劧璇<E58AA7>█琛ㄨ揪
### Week 5: 澶氶」鐩<E3808D>敮鎸?
- [ ] 鐢ㄦ埛缁戝畾榛樿<E6A69B>椤圭洰锛?澶╋級
**棰勬湡鏁堟灉**:
-<>寔澶氫釜IIT椤圭洰骞惰<E9AA9E>
---
## 馃摑 鍊哄姟璺熻釜
### 宸叉竻鍋垮€哄姟
| 鍊哄姟椤?| 娓呭伩鏃堕棿 | 鏂规<E98F82> |
|-------|---------|------|
| AI骞昏<E9AA9E><EFBFBD><E99782> | 2026-01-03 | RAG鏁版嵁娉ㄥ叆 + 涓ユ牸System Prompt |
| 涓婁笅鏂囦涪澶?| 2026-01-03 | SessionMemory锛堟渶杩?杞<>級 |
| 鍝嶅簲閫熷害鎱?| 2026-01-04 | 浼樺寲鎰忓浘璇嗗埆 + 寮傛<E5AFAE>澶勭悊 |
### 杩涜<E69DA9><EFBFBD>€哄姟
| 鍊哄姟椤?| 璐熻矗浜?| 棰勮<E6A3B0>瀹屾垚 |
|-------|--------|----------|
| 鏃?| - | - |
### 寰呭<E5AFB0>鐞嗗€哄姟
瑙佷笂鏂囦紭鍏堢骇鍒楄〃
---
## 馃敆 鐩稿叧鏂囨。
- [IIT Manager Agent 鎶€鏈<E282AC>矾寰勪笌鏋舵瀯璁捐<E79281>](../02-鎶€鏈<E282AC><E98F88>璁?IIT Manager Agent 鎶€鏈<E282AC>矾寰勪笌鏋舵瀯璁捐<E79281>.md)
- [Phase1.5-AI瀵硅瘽鑳藉姏寮€鍙戣<E98D99>鍒抅(../04-寮€鍙戣<E98D99>鍒?Phase1.5-AI瀵硅瘽鑳藉姏寮€鍙戣<E98D99>鍒?md)
- [MVP寮€鍙戜换鍔℃竻鍗昡(../04-寮€鍙戣<E98D99>鍒?MVP寮€鍙戜换鍔℃竻鍗?md)
---
**鏂囨。缁存姢**: 鎶€鏈<E282AC>洟闃?
**鏈€鍚庢洿鏂?*: 2026-01-04
**鐗堟湰鍘嗗彶**:
- v1.0 (2026-01-04): 鍒濆<E98D92>鐗堟湰锛孭hase 1.5瀹屾垚鍚庢暣鐞?