Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/02-技术设计/07-智能Prompt生成模块开发计划.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

860 lines
17 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.
# <20><EFBFBD>Prompt<70><74><EFBFBD><E79285> - 撘<><E69298>𤏸恣<F0A48FB8>?
**<EFBFBD><EFBFBD>𧋦**: v1.0
**<EFBFBD><EFBFBD>**: 2025-11-18
**<EFBFBD><EFBFBD>**: 蝞<><E89D9E>𨰻<EFBFBD><F0A8B0BB><EFBFBD><EFBFBD><E4B993><EFBFBD><EFBFBD>
---
## <20><EFBFBD><E8A9A8><EFBFBD>
**閫<><E996AB><EFBFBD><EFBFBD>**: 瘨<>膄AI銝𦒘犖蝐餃笆颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>榆撘?
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**:
```
<EFBFBD><EFBFBD>颲枏<EFBFBD>PICOS <20>?AI<41><49><EFBFBD><E59CBE><EFBFBD> <20>?<3F><><EFBFBD>Prompt <20>?<3F><EFBFBD>靽格㺿 <20>?撘<>憪讠<E686AA><E8AEA0>?
```
---
## MVP<56>嗆挾嚗<E68CBE><E59A97><EFBFBD>𡄯<EFBFBD>
### <20><EFBFBD><E8A098><EFBFBD>
#### 1. <20><EFBFBD>颲枏<E9A2B2> <20>?
**<EFBFBD>滨垢銵典<EFBFBD>**:
```typescript
{
pico: {
population: string; // <20>𠉛弦鈭箇黎
intervention: string; // 撟脤<E6929F><E884A4>芣鴌
comparison: string; // 撖寧<E69296>
outcome: string; // 蝏枏<E89D8F><E69E8F><EFBFBD><EFBFBD>
studyDesign: string; // <20>𠉛弦霈曇恣
},
inclusionCriteria: string; // 蝥喳<E89DA5><E596B3><EFBFBD><EFBFBD>
exclusionCriteria: string; // <20>㘾膄<E398BE><E88684><EFBFBD>
}
```
**摰䂿緵**: 銝<>銝芾”<E88ABE>閖△<E99696><EFBFBD>7銝芾<E98A9D><E88ABE><EFBFBD>
---
#### 2. AI<41><49>圾銝𤾸<E98A9D><F0A4BEB8>?<3F><>
**颲枏<E9A2B2>**: <20><EFBFBD><E586BD><EFBFBD>ICOS + 蝥單<E89DA5><E596AE><EFBFBD><EFBFBD>
**颲枏枂**:
```typescript
{
understanding: {
mustInclude: string[]; // 敹<>◆蝥喳<E89DA5><E596B3><EFBFBD><EFBFBD>蝝𩤃<E89D9D>3-5<><EFBFBD>
mustExclude: string[]; // 敹<><EFBFBD>㘾膄<E398BE><E88684><EFBFBD>蝝𩤃<E89D9D>3-5<><EFBFBD>
ambiguities: [ // 璅∠<E79285><E288A0><EFBFBD><EFBFBD><EFBFBD><E5B395><EFBFBD>5-8銝迎<E98A9D>
{
id: number;
question: string; // "憒<><E68692><EFBFBD>𠉛弦鈭箇黎<E7AE87>舀洹蝢𦒘<E89DA2>RCT韐券<E99F90>擃矋<E69383>"
aiSuggestion: 'include' | 'exclude' | 'uncertain';
reason: string; // AI<41><49>遣霈桃<E99C88><E6A183>?
}
]
}
}
```
**API**:
```
POST /api/v1/asl/analyze-picos
```
**摰䂿緵**: 靚<>鍂LLM<4C><4D><EFBFBD><EFBFBD><EFBFBD>颲枏<E9A2B2>
---
#### 3. <20><EFBFBD>蝖株恕<E6A0AA>屸𢒰 <20><>
**<EFBFBD>曄內**:
- <20>?敹<>◆蝥喳<E89DA5><EFBFBD><EFBFBD><EFBFBD>?<3F>𡝗<EFBFBD>嚗?
- <20>?敹<><EFBFBD>㘾膄嚗<E88684><EFBFBD><EFBFBD>?<3F>𡝗<EFBFBD>嚗?
- <20><> 颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD><EFBFBD><E59A97>𣂷葵蝖株恕嚗𡁶熙<F0A181B6>?<3F>㘾膄/銝滨摰𡄯<E691B0>
**摰䂿緵**: Modal撖寡<E69296><EFBFBD><E78DA2><EFBFBD><EFBFBD><EFBFBD>銝芸躹<E88AB8>?
---
#### 4. <20>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt <20><>
**颲枏<E9A2B2>**: <20><EFBFBD>蝖株恕<E6A0AA>𡒊<EFBFBD><EFBFBD><E996AB>
**颲枏枂**: 摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD>侨rompt
**<EFBFBD>喲睸**: 撠<><EFBFBD>霈斤<E99C88>颲寧<E9A2B2><EFBFBD><E996AB>瘜典<E7989C><E585B8>訐rompt銝?
```
## <20><EFBFBD><EFBFBD><E996AB><EFBFBD>抅鈭擧<E988AD><E693A7><EFBFBD>霈歹<E99C88>
1. <20><EFBFBD><EFBFBD><E996AC>嚗帋<E59A97><E5B88B><EFBFBD><EFBFBD>瘣脖犖蝢歹<E89DA2><EFBFBD>洹蝢𡡞<E89DA2>韐券<E99F90>RCT銋笔虾蝥喳<E89DA5>
2. <20>𠉛弦蝐餃<E89D90>嚗𡁏<E59A97><F0A1818F>斤遞餈堆<E9A488>雿?020撟游<E6929F>Meta<74><61><EFBFBD><EFBFBD>舐熙<E88890>?
3. 撖寧<E69296>蝐餃<E89D90>嚗𡁜<E59A97><F0A1819C><EFBFBD>撖寧<E69296>嚗峕<E59A97><E5B395><EFBFBD>蝘齿<E89D98><E9BDBF><EFBFBD><EFBFBD><EFBFBD><E68B90>舀𦻖<E88880>?
...
```
**API**:
```
POST /api/v1/asl/generate-prompt
```
---
#### 5. Prompt蝻𤥁<E89DBB><F0A4A581>?<3F><>
**<EFBFBD><EFBFBD>**:
- <20>曄內<E69B84><E585A7><EFBFBD><EFBFBD><EFBFBD>rompt
- <20><EFBFBD><E88880><EFBFBD>蝻𤥁<E89DBB>
- 靽嘥<E99DBD>撟嗡蝙<E597A1>?
**摰䂿緵**: 蝞<><E89D9E><EFBFBD>Textarea + 靽嘥<E99DBD><E598A5>厰僼
---
#### 6. 蝑偦<E89D91><EFBFBD><E58EA9>𨅯<EFBFBD>撘?潃?**<2A><EFBFBD>**
**敶枏<E695B6><E69E8F><EFBFBD>**: <20>芣遬蝷箸<E89DB7><EFBFBD><E89D8F>蝑吔<E89D91>include/exclude/pending嚗?
**<EFBFBD><EFBFBD>**: <20>曄內**銝支葵璅<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B8A1>?*
```typescript
{
literatureId: string;
finalDecision: 'include' | 'exclude' | 'pending';
// 潃?<3F><EFBFBD>嚗帋舅銝芣芋<E88AA3><EFBFBD>霂衣<E99C82>蝏𤘪<E89D8F>
model1: {
modelName: 'DeepSeek-V3';
conclusion: 'exclude';
confidence: 0.92;
judgment: { P: 'match', I: 'match', C: 'mismatch', S: 'match' };
reason: '<27><EFBFBD>P<EFBFBD><50><EFBFBD><EFBFBD>蝏游漲<E6B8B8><EFBFBD>嚗䔶<E59A97>撖寧<E69296><EFBFBD><EFBFBD><EFBFBD>蝘滩晓<E6BBA9><EFBFBD><EFBFBD>摰㗇<E691B0><E39787>?..' // 潃?<3F>喲睸
},
model2: {
modelName: 'Qwen-Max';
conclusion: 'include';
confidence: 0.85;
judgment: { P: 'match', I: 'match', C: 'partial', S: 'match' };
reason: '<27>𠉛弦鈭箇黎<E7AE87><E9BB8E>僕憸<E58395><EFBFBD>賢龪<E8B3A2><EFBFBD>撖寧<E69296><EFBFBD><EFBFBD>𧼮<EFBFBD><F0A7BCAE><EFBFBD><EFBFBD><E99BBF>撖寞<E69296><E5AF9E><EFBFBD>...' // 潃?<3F>喲睸
},
hasConflict: true; // 銝支葵璅<E79285><E288AA>斗鱏銝滢<E98A9D><E6BBA2>?
conflictFields: ['conclusion', 'C'];
}
```
**<EFBFBD>滨垢<EFBFBD>曄內**:
```jsx
<Card title="蝑偦<E89D91><EFBFBD><E58EA9>?>
<Alert type={finalDecision === 'pending' ? 'warning' : 'success'}>
<20><><EFBFBD><E89D8F>蝑? {finalDecision}
</Alert>
<Divider />
<Row gutter={16}>
<Col span={12}>
<Card title="<EFBFBD><EFBFBD> DeepSeek-V3" type="inner">
<Tag color={model1.conclusion === 'include' ? 'green' : 'red'}>
{model1.conclusion}
</Tag>
<Statistic title="蝵桐縑摨? value={model1.confidence} />
<Divider />
<h4><3E>斗鱏<E69697><E9B18F>眏:</h4>
<p>{model1.reason}</p> {/* 潃?<3F>曄內<E69B84><E585A7>眏 */}
<Collapse>
<Panel header="PICO蝏游漲霂行<EFBFBD>">
P: {model1.judgment.P}<br/>
I: {model1.judgment.I}<br/>
C: {model1.judgment.C}<br/>
S: {model1.judgment.S}
</Panel>
</Collapse>
</Card>
</Col>
<Col span={12}>
<Card title="<22><> Qwen-Max" type="inner">
{/* <20><EFBFBD> */}
</Card>
</Col>
</Row>
{hasConflict && (
<Alert type="warning" showIcon>
<EFBFBD>𩤃<EFBFBD> 銝支葵璅<EFBFBD><EFBFBD>斗鱏銝滢<EFBFBD><EFBFBD><EFBFBD>撱箄悅鈭箏極憭齿瓲
</Alert>
)}
{/* 潃?鈭箏極憭齿瓲<E9BDBF>厰僼 */}
<Button type="primary" onClick={handleManualReview}>
鈭箏極憭齿瓲甇斗<EFBFBD><EFBFBD>?
</Button>
</Card>
```
---
### MVP撘<50><E69298><EFBFBD><E78390>?
**Week 1: <20>𡒊垢**
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<E99AA1>蝥?|
|------|------|--------|
| API: <20><><EFBFBD>PICOS | 2憭?| P0 |
| API: <20><><EFBFBD>Prompt | 1憭?| P0 |
| 憓𧼮撩蝑偦<E89D91><EFBFBD><E58EA9>𦦵<EFBFBD><F0A6A6B5>?| 0.5憭?| P0 |
| 瘚贝<E7989A> | 0.5憭?| P0 |
**Week 2: <20>滨垢**
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<E99AA1>蝥?|
|------|------|--------|
| PICOS颲枏<E9A2B2>銵典<E98AB5> | 0.5憭?| P0 |
| <20><EFBFBD>蝖株恕<E6A0AA>屸𢒰 | 1.5憭?| P0 |
| Prompt蝻𤥁<E89DBB><F0A4A581>?| 0.5憭?| P0 |
| 蝏𤘪<E89D8F>撅閧內憓𧼮撩 | 1憭?| P0 |
| 瘚贝<E7989A>銝舘<E98A9D>隡?| 0.5憭?| P0 |
**<EFBFBD>餉恣**: 2<><EFBFBD>10銝芸極雿𨀣𠯫嚗?
---
## 2.0<EFBFBD>嗆挾嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
### <20><EFBFBD>1: Few-shot<6F>芸𢆡摮虫<E691AE> <20>
**閫血<E996AB><E8A180>箸艶**: <20><EFBFBD>蝥䭾迤AI<41>斗鱏<E69697>?
**瘚<><E7989A>**:
```
1. AI<41>斗鱏: Exclude
2. <20><EFBFBD>蝥䭾迤: 摨磰砲<E7A3B0>涅nclude
3. <20><EFBFBD>霂湔<E99C82><E6B994><EFBFBD>眏: "<22><EFBFBD><E8B39C>舀洹蝢𦒘犖蝢歹<E89DA2><EFBFBD>CT韐券<E99F90>擃?
<20>?
4. 蝟餌<E89D9F>霈啣<E99C88><EFBFBD><E78DA2>
<20>?
5. 銝𧢲活蝑偦<E89D91>㗇𧒄嚗<F0A79284><E59A97>甇斗<E79487>靘衤<E99D98>銝慚ew-shot蝷箔<E89DB7><E7AE94><EFBFBD>Prompt
```
**<EFBFBD>唳旿蝏𤘪<EFBFBD>**:
```typescript
{
caseId: string;
literature: {
title: string;
abstract: string;
},
aiDecision: 'exclude';
userDecision: 'include';
userReason: '<EFBFBD><EFBFBD><EFBFBD>𦒘<EFBFBD><EFBFBD>CT韐券<EFBFBD>?;
picoCriteria: {...}; // 敶𤘪𧒄<F0A498AA><F0A79284>ICOS
createdAt: Date;
}
```
**Prompt憓𧼮撩**:
```
## <20><><EFBFBD><EFBFBD><EFBFBD>靘页<E99D98>Few-shot蝷箔<E89DB7>嚗?
隞乩<EFBFBD><EFBFBD><EFBFBD>銋见<EFBFBD>蝥䭾迤<EFBFBD><EFBFBD><EFBFBD>靘页<EFBFBD>霂瑕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD>1:
<EFBFBD><EFBFBD><EFBFBD>: TICA-CLOP STUDY...
AI<EFBFBD>斗鱏: Exclude嚗<65><E59A97>銝箏<E98A9D><E7AE8F>硺犖蝢歹<E89DA2>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: Include
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>眏: <20><EFBFBD><E8B39C><EFBFBD><E887AC>硺犖蝢歹<E89DA2><EFBFBD>CT韐券<E99F90>擃矋<E69383><E79F8B><EFBFBD><E5AF9E><EFBFBD><E58CA7><EFBFBD><EFBFBD>?
<EFBFBD>?<3F>舐內: <20><EFBFBD><EFBFBD><E996AC><EFBFBD>臭誑<E887AD>菜暑嚗<E69A91><E59A97><EFBFBD>𦦵<EFBFBD>蝛嗉捶<E59789><EFBFBD>
<EFBFBD><EFBFBD>2:
...
```
**摰䂿緵憭齿<E686AD>摨?*: 銝剔<E98A9D><EFBFBD><E59A97><EFBFBD><E996AC>靘见<E99D98>蝞∠<E89D9E>嚗?
---
### <20><EFBFBD>2: 瘚贝<E7989A><E79285> <20>
**雿輻鍂<E8BCBB>箸艶**: <20><EFBFBD><E586BD><EFBFBD>瘚贝<E7989A>10蝭<30><E89DAD><EFBFBD><EFBFBD>霈剔<E99C88>AI<41><49>
**瘚<><E7989A>**:
```
1. <20><EFBFBD>銝𠹺<E98A9D>10蝭<30><E89DAD>霂閙<E99C82><E99699><EFBFBD>5蝭<35><EFBFBD>?+ 5蝭<35><E89DAD><EFBFBD><EFBFBD>
<20>?
2. <20><EFBFBD><E586BD><EFBFBD><E99E9F><EFBFBD>釣: Include/Exclude + <20><>
<20>?
3. AI摮虫<E691AE><E899AB><EFBFBD><E586BD><EFBFBD>ế<EFBFBD>剜芋撘?
<20>?
4. <20><><EFBFBD>摰𡁜<E691B0><F0A1819C>鞛rompt
<20>?
5. <20><EFBFBD><EFBFBD><E79487>蝑偦<E89D91>?
```
**<EFBFBD>屸𢒰**:
```jsx
<TestMode>
<Upload>銝𠹺<EFBFBD>10<EFBFBD><EFBFBD>霂閙<EFBFBD><EFBFBD><EFBFBD>Excel/JSON嚗?/Upload>
<Table>
{testCases.map(lit => (
<Row>
<td>{lit.title}</td>
<td>
<Radio.Group>
<Radio value="include">蝥喳<EFBFBD></Radio>
<Radio value="exclude"><EFBFBD>㘾膄</Radio>
</Radio.Group>
</td>
<td>
<Input.TextArea placeholder="霂瑁秩<EFBFBD>𡒊<EFBFBD><EFBFBD>? />
</td>
</Row>
))}
</Table>
<Button onClick={analyzeTestCases}>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𤑳<EFBFBD><EFBFBD>斗鱏璅<EFBFBD>
</Button>
</TestMode>
```
**AI<41><49><EFBFBD>**:
```
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ế<EFBFBD>剜芋撘誩<EFBFBD><EFBFBD><EFBFBD>
1. <20><EFBFBD><E595A3>菜暑<E88F9C><EFBFBD>
- 獢<><E78DA2>1嚗<31><E59A97><EFBFBD>冚CT嚗争<E59A97> 蝥喳<E89DA5>
- 獢<><E78DA2>3嚗<33>洹瘣脤<E798A3><E884A4><EFBFBD><E6A2B9>?<3F>㘾膄
<20>?蝏栞捏: <20><EFBFBD><E88ABE>爹CT撠勗虾<E58B97><EFBFBD><E4BA99><EFBFBD>瘣脖犖蝢?
2. <20>𠉛弦蝐餃<E89D90>嚗?
- 獢<><E78DA2>2嚗㇈eta<74><61><EFBFBD>嚗争<E59A97> 蝥喳<E89DA5>
- 獢<><E78DA2>5嚗<35><E59A97>蝏毺遞餈堆<E9A488><E5A086>?<3F>㘾膄
<20>?蝏栞捏: Meta<74><61><EFBFBD><EFBFBD>舀𦻖<E88880><EFBFBD>隡删<E99AA1>蝏潸膩<E6BDB8>㘾膄
3. <20>園𡢿閬<F0A1A2BF><E996AC>嚗?
- 獢<><E78DA2>4嚗?019撟游<E6929F>銵剁<E98AB5><E58981>?<3F>㘾膄
<20>?蝏栞捏: 銝交聢<E4BAA4><EFBFBD>2020撟游<E6929F><EFBFBD><E996AC>
```
**摰䂿緵憭齿<E686AD>摨?*: 擃矋<E69383><E79F8B><EFBFBD><EFBFBD>芋撘讛<E69298><E8AE9B><EFBFBD>
---
### <20><EFBFBD>3: Prompt璅⊥踎摨?<3F><>
**<EFBFBD><EFBFBD>**:
- 靽嘥<E99DBD><E598A5><EFBFBD><E586BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt銝箸芋<E7AEB8>?
- 銝𧢲活<F0A7A2B2>臭誑<E887AD>湔𦻖憭滨鍂
- <20>臭誑<E887AD><E8AA91>澈蝏坔𣪧<E59D94><F0A3AAA7><EFBFBD><EFBFBD>?
**摰䂿緵憭齿<E686AD>摨?*: 雿?
---
### 2.0撘<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
| <20><EFBFBD> | 隡唳𧒄 | 隡睃<E99AA1>蝥?| 靘肽<E99D98> |
|------|------|--------|------|
| Few-shot摮虫<E691AE> | 3憭?| P1 | MVP摰峕<E691B0> |
| 瘚贝<E7989A><E79285> | 5憭?| P2 | MVP摰峕<E691B0> |
| Prompt璅⊥踎摨?| 2憭?| P1 | MVP摰峕<E691B0> |
**<EFBFBD>餉恣**: 2<>?
---
## <20><><EFBFBD><EFBFBD><E887AC><EFBFBD><E59581>?
### 1. AI<41><49><EFBFBD>PICOS<4F><53>rompt
```typescript
const analyzePrompt = `
雿䭾糓<EFBFBD>餃郎<EFBFBD><EFBFBD>讃蝑偦<EFBFBD><EFBFBD>摰嗚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>靘𥕢<EFBFBD>PICOS<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𣬚熙<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>霂瑕<EFBFBD><EFBFBD>𣂼僎<EFBFBD><EFBFBD><EFBFBD>嚗?
<EFBFBD>鞟鍂<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
鈭箇黎: ${population}
撟脤<EFBFBD>: ${intervention}
撖寧<EFBFBD>: ${comparison}
蝏枏<EFBFBD>: ${outcome}
霈曇恣: ${studyDesign}
蝥喳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
${inclusionCriteria}
<EFBFBD>㘾膄<EFBFBD><EFBFBD><EFBFBD>:
${exclusionCriteria}
<EFBFBD>𣂼<EFBFBD><EFBFBD>𣂷遙<EFBFBD><EFBFBD>?
1. <20>𣂼<EFBFBD><EFBFBD>◆蝥喳<E89DA5><E596B3><EFBFBD>瓲敹<E793B2><E695B9>蝝𩤃<E89D9D>3-5<><EFBFBD>
2. <20>𣂼<EFBFBD><EFBFBD><EFBFBD>㘾膄<E398BE><E88684><EFBFBD>蝝𩤃<E89D9D>3-5<><EFBFBD>
3. 霂<><E99C82>璅∠<E79285><E288A0><EFBFBD><EFBFBD><EFBFBD><E5B395><EFBFBD>5-8銝迎<E98A9D>嚗峕<E59A97>銝芾器<E88ABE><EFBFBD><E5B395><EFBFBD><E89084>穿<EFBFBD>
- <20><EFBFBD><E7919A><EFBFBD><E6A185>讛膩
- 雿删<E99BBF>撱箄悅嚗ǎnclude/exclude/uncertain嚗?
- 撱箄悅<E7AE84><E68285>
<EFBFBD><EFBFBD><EFBFBD>箸聢撘譌<EFBFBD>?
銝交聢JSON<EFBFBD><EFBFBD>嚗?
{
"mustInclude": ["閬<><E996AC>1", "閬<><E996AC>2", ...],
"mustExclude": ["閬<><E996AC>1", "閬<><E996AC>2", ...],
"ambiguities": [
{
"id": 1,
"question": "憒<><E68692><EFBFBD>𠉛弦鈭箇黎<E7AE87>舀洹蝢𦒘<E89DA2>RCT韐券<E99F90>擃矋<E69383>",
"aiSuggestion": "exclude",
"reason": "<22><EFBFBD><E586BD>𡒊<EFBC86><E996AC>'鈭𡁏散鈭箇黎'嚗<><E59A97>隞硋𧑐<E7A18B><EFBFBD>蝚血<E89D9A>"
},
...
]
}
`;
```
---
### 2. <20><><EFBFBD>Prompt<70><74>瓲敹<E793B2><E695B9><EFBFBD>
```typescript
function generateCustomPrompt(
pico: PicoCriteria,
inclusionCriteria: string,
exclusionCriteria: string,
userConfirmedRules: BoundaryRule[]
): string {
// <20><EFBFBD>Prompt嚗<74><E59A97><EFBFBD><EFBFBD><EFBFBD>璅⊥踎撘<E8B88E>憪页<E686AA>
let prompt = getStandardPromptTemplate();
// 瘜典<E7989C><E585B8><EFBFBD>蝖株恕<E6A0AA><E68195><EFBFBD><EFBFBD><E8ABB9>?
const boundaryRulesSection = `
## 潃?<3F><EFBFBD>颲寧<E9A2B2><EFBFBD><E996AB><EFBFBD>抅鈭擧<E988AD><E693A7><EFBFBD>霈歹<E99C88>
${userConfirmedRules.map((rule, index) => `
${index + 1}. ${rule.category}:
- <20><><EFBFBD><EFBFBD><E996AB>: ${rule.standardRule}
- <20><EFBFBD>蝖株恕: ${rule.userDecision === 'include' ? '<27>?<3F>臭誑蝥喳<E89DA5>' : '<27>?敹<><EFBFBD>㘾膄'}
- <20><EFBFBD><E7919A><EFBFBD><EFBFBD>: ${rule.situation}
`).join('\n')}
<EFBFBD>𩤃<EFBFBD> 霂瑚艇<E7919A><EFBFBD><EFBFBD>誑銝羓鸌畾𡃏<E795BE><F0A1838F><EFBFBD>餈嗘<E9A488><E59798>舐鍂<E88890><EFBFBD>蝖桃霈斤<E99C88><E696A4>斗鱏<E69697><E9B18F><EFBFBD><EFBFBD>?
`;
// 撠<><EFBFBD><EFBFBD><E8ABB9><EFBFBD><E8B9B1><EFBFBD>Prompt<70><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵?
prompt = prompt.replace(
'## 蝑偦<E89D91>劐遙<E58A90>?,
boundaryRulesSection + '\n\n## <EFBFBD><EFBFBD>?
);
return prompt;
}
```
---
### 3. <20>唳旿摨栞挽霈?
**<EFBFBD>啗”: prompt_configurations**
```sql
CREATE TABLE asl_schema.prompt_configurations (
id UUID PRIMARY KEY,
user_id VARCHAR(50) NOT NULL,
project_id UUID NOT NULL,
-- <20><EFBFBD>颲枏<E9A2B2>
pico_criteria JSONB NOT NULL,
inclusion_criteria TEXT NOT NULL,
exclusion_criteria TEXT NOT NULL,
-- AI<41><49><EFBFBD>蝏𤘪<E89D8F>
ai_understanding JSONB NOT NULL, -- mustInclude, mustExclude, ambiguities
-- <20><EFBFBD>蝖株恕
user_confirmed_rules JSONB NOT NULL, -- <20><EFBFBD>蝖株恕<E6A0AA>𡒊<EFBFBD>颲寧<E9A2B2><EFBFBD><E996AB>
-- <20><><EFBFBD><EFBFBD><EFBFBD>rompt
generated_prompt TEXT NOT NULL,
final_prompt TEXT NOT NULL, -- <20><EFBFBD>蝻𤥁<E89DBB><F0A4A581>𡒊<EFBFBD><F0A1928A><EFBFBD><EFBFBD><E89D8F><EFBFBD>?
-- <20><><EFBFBD>?
version VARCHAR(20) DEFAULT 'v1.0',
is_template BOOLEAN DEFAULT false,
template_name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
**<EFBFBD>啗”: few_shot_cases**嚗?.0<EFBFBD>嗆挾嚗?
```sql
CREATE TABLE asl_schema.few_shot_cases (
id UUID PRIMARY KEY,
user_id VARCHAR(50) NOT NULL,
project_id UUID NOT NULL,
-- <20><>讃靽⊥<E99DBD>
literature_id UUID NOT NULL,
literature_title TEXT NOT NULL,
literature_abstract TEXT NOT NULL,
-- AI<41>斗鱏
ai_decision VARCHAR(20) NOT NULL, -- include/exclude
ai_reason TEXT NOT NULL,
-- <20><EFBFBD>蝥䭾迤
user_decision VARCHAR(20) NOT NULL,
user_reason TEXT NOT NULL,
-- PICOS銝𠹺<E98A9D><F0A0B9BA>?
pico_criteria JSONB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
---
## API霈曇恣
### MVP<56>嗆挾
#### 1. <20><><EFBFBD>PICOS
```
POST /api/v1/asl/prompt/analyze
Request:
{
"projectId": "uuid",
"pico": {
"population": "...",
"intervention": "...",
"comparison": "...",
"outcome": "...",
"studyDesign": "..."
},
"inclusionCriteria": "...",
"exclusionCriteria": "..."
}
Response:
{
"success": true,
"data": {
"configId": "uuid", // 靽嘥<E99DBD><E598A5><EFBFBD><EFBFBD>蝵埋D
"understanding": {
"mustInclude": ["閬<><E996AC>1", "閬<><E996AC>2"],
"mustExclude": ["閬<><E996AC>1", "閬<><E996AC>2"],
"ambiguities": [
{
"id": 1,
"question": "...",
"aiSuggestion": "exclude",
"reason": "..."
}
]
}
}
}
```
---
#### 2. 蝖株恕颲寧<E9A2B2><EFBFBD><E996AB>
```
POST /api/v1/asl/prompt/confirm-rules
Request:
{
"configId": "uuid",
"confirmedRules": [
{
"ambiguityId": 1,
"userDecision": "include", // include/exclude/uncertain
"userNote": "<22><EFBFBD>銝齿糓鈭𡁏散鈭箇黎嚗䔶<E59A97>RCT韐券<E99F90>擃? // <20><EFBFBD>?
}
]
}
Response:
{
"success": true,
"data": {
"generatedPrompt": "摰峕㟲<E5B395><E39FB2>rompt<70><74>𧋦..."
}
}
```
---
#### 3. 靽嘥<E99DBD><E598A5><EFBFBD>蝏㇊rompt
```
POST /api/v1/asl/prompt/save
Request:
{
"configId": "uuid",
"finalPrompt": "<22><EFBFBD>蝻𤥁<E89DBB><F0A4A581>𡒊<EFBFBD>Prompt...",
"saveAsTemplate": false,
"templateName": "" // 憒<><E68692>靽嘥<E99DBD>銝箸芋<E7AEB8>?
}
Response:
{
"success": true,
"data": {
"configId": "uuid",
"promptVersion": "v1.0.1"
}
}
```
---
#### 4. 雿輻鍂<E8BCBB><EFBFBD>銋侨rompt蝑偦<E89D91>?
```
POST /api/v1/asl/screen/literature
Request:
{
"projectId": "uuid",
"literatureId": "uuid",
"configId": "uuid", // 雿輻鍂<E8BCBB>芯葵Prompt<70>滨蔭
"models": ["deepseek-chat", "qwen-max"]
}
Response:
{
"success": true,
"data": {
"literatureId": "uuid",
"finalDecision": "pending",
// 潃?<3F>喲睸嚗帋舅銝芣芋<E88AA3><EFBFBD>霂衣<E99C82>蝏𤘪<E89D8F>
"model1": {
"modelName": "DeepSeek-V3",
"conclusion": "exclude",
"confidence": 0.92,
"judgment": {...},
"evidence": {...},
"reason": "摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD><EFBFBD><E696A4>?.." // 潃?
},
"model2": {
"modelName": "Qwen-Max",
"conclusion": "include",
"confidence": 0.85,
"judgment": {...},
"evidence": {...},
"reason": "摰峕㟲<E5B395><E39FB2><EFBFBD><EFBFBD><E4BAA6>?.." // 潃?
},
"hasConflict": true,
"conflictFields": ["conclusion"]
}
}
```
---
### 2.0<EFBFBD>嗆挾嚗<EFBFBD><EFBFBD><EFBFBD>
#### 5. <20>𣂷漱Few-shot獢<74><E78DA2>
```
POST /api/v1/asl/prompt/add-few-shot
Request:
{
"configId": "uuid",
"literatureId": "uuid",
"aiDecision": "exclude",
"aiReason": "...",
"userDecision": "include",
"userReason": "<22><EFBFBD><E8B39C>舀洹蝢𦒘犖蝢歹<E89DA2>雿?.."
}
Response:
{
"success": true,
"data": {
"caseId": "uuid",
"totalCases": 3 // 撌脫<E6928C>憭𡁜<E686AD>銝東ew-shot獢<74><E78DA2>
}
}
```
---
#### 6. <20><EFBFBD>Few-shot<6F>齿鰵<E9BDBF><E9B0B5><EFBFBD>Prompt
```
POST /api/v1/asl/prompt/regenerate-with-few-shot
Request:
{
"configId": "uuid"
}
Response:
{
"success": true,
"data": {
"updatedPrompt": "<22><>鉄Few-shot蝷箔<E89DB7><E7AE94><EFBFBD>鰵Prompt...",
"fewShotCasesUsed": 3
}
}
```
---
## 瘚贝<E7989A><E99C88>
### MVP瘚贝<E7989A>
**瘚贝<E7989A><E8B49D>唳旿**: <20>雴葉<E99BB4>𠉛弦嚗<E5BCA6><EFBFBD>?蝭<><E89DAD>
**瘚贝<E7989A><E8B49D>箸艶**:
1. **<EFBFBD>箸艶1: 甇<>虜瘚<E8999C><E7989A>**
- 颲枏<E9A2B2>PICOS <20>?AI<41><49><EFBFBD> <20>?<3F><EFBFBD>蝖株恕 <20>?<3F><><EFBFBD>Prompt <20>?蝑偦<E89D91>?
- 撉諹<E69289>嚗帋舅銝芣芋<E88AA3><EFBFBD><E8AEA0><EFBFBD><EFBFBD>臬炏摰峕㟲<E5B395>曄內
2. **<EFBFBD>箸艶2: 颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD>蝖株恕**
- <20><EFBFBD>蝖株恕"甈抒<E79488>RCT<43>舐熙<E88890>? <20>?撉諹<E69289>Prompt銝剜糓<E5899C><EFBFBD><E8A180>急迨閫<E8BFA8><E996AB>
- 撉諹<E69289>嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD><EFBFBD>㗇𧒄<E39787>臬炏<E887AC><EFBFBD>甇方<E79487><E696B9>?
3. **<EFBFBD>箸艶3: <20><EFBFBD>蝻𤥁<E89DBB>Prompt**
- <20><EFBFBD>靽格㺿<E6A0BC><E3BABF><EFBFBD><EFBFBD><EFBFBD>rompt <20>?撉諹<E69289>靽格㺿<E6A0BC>臬炏<E887AC><E7828F><EFBFBD>
4. **<EFBFBD>箸艶4: 璅<E79285><E288AA><EFBFBD>**
- 撉諹<E69289>嚗帋舅銝芣芋<E88AA3>见ế<E8A781><EFBFBD><EFBFBD><E98A9D>湔𧒄嚗𣬚<E59A97><F0A3AC9A>望糓<E69C9B><EFBFBD><E8A18C><EFBFBD>蝷?
**瘚贝<E7989A><E8B49D><EFBFBD><EFBFBD>**:
- Prompt<70><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>? >90%
- <20><EFBFBD>皛⊥<E79A9B>摨? >80%
- <20><>眏撅閧內摰峕㟲<E5B395>? 100%
---
### 2.0瘚贝<EFBFBD>
**瘚贝<E7989A><E8B49D>箸艶**:
1. **Few-shot摮虫<E691AE>**
- <20><EFBFBD>蝥䭾迤3銝芣<E98A9D>靘?<3F>?撉諹<E69289>Prompt銝剜糓<E5899C><EFBFBD><E8A180><EFBFBD>鈭𥟇<E988AD>靘?
- 撉諹<E69289>嚗𡁏鰵<F0A1818F><E9B0B5><EFBFBD><EFBFBD>㗇糓<E39787>行㺿餈?
2. **瘚贝<E7989A><E79285>**
- <20><EFBFBD><E586BD><EFBFBD>釣10蝭?<3F>?AI<41><49><EFBFBD><E79285> <20>?<3F><><EFBFBD>Prompt
- 撉諹<E69289>嚗𡁶<E59A97><F0A181B6><EFBFBD>Prompt<70>臬炏蝚血<E89D9A><E8A180><EFBFBD><E586BD>誩末
---
## <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>
### MVP<56>嗆挾
| <20><><EFBFBD> | <20><EFBFBD> |
|------|------|
| Prompt<70><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?| >90% |
| <20><EFBFBD>摰峕<E691B0><E5B395>滨蔭<E6BBA8>園𡢿 | <5<><35><EFBFBD> |
| <20><>眏撅閧內摰峕㟲<E5B395>?| 100% |
| 璅<E79285><E288AA><EFBFBD><EFBFBD><E99C82><EFBFBD>?| 100% |
| <20><EFBFBD>皛⊥<E79A9B>摨?| >80% |
### 2.0<EFBFBD>嗆挾
| <20><><EFBFBD> | <20><EFBFBD> |
|------|------|
| Few-shot<6F><EFBFBD><E5AFA1><EFBFBD><EFBFBD>?| +15% |
| 瘚贝<E7989A><E79285><E288AA><EFBFBD>摨?| >85% |
| Prompt璅⊥踎憭滨鍂<E6BBA8>?| >60% |
---
## 憌𡡞埯銝𤾸<E98A9D>撖?
### 憌𡡞埯1: LLM<4C><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD>屸䔮憸䁅捶<E48185><EFBFBD>蝔喳<E89D94>
**摨𥪜笆**:
- 雿輻鍂Few-shot Prompt
- 鈭箏極摰⊥瓲撣貉<E692A3>颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD>
- <20>𣂷<EFBFBD>暺䁅恕颲寧<E9A2B2><E5AFA7><EFBFBD>摨?
### 憌𡡞埯2: <20><EFBFBD>銝齿<E98A9D><E9BDBF><EFBFBD><E8AE9B>園𡢿蝖株恕
**摨𥪜笆**:
- <20>芣遬蝷?銝芷<E98A9D>隡睃<E99AA1>蝥折䔮憸?
- <20><EFBFBD>雿輻鍂AI暺䁅恕撱箄悅
- <20>𣂷<EFBFBD>"敹恍<E695B9><E6818D>芋撘?嚗<>歲餈<E6ADB2>霈歹<E99C88>
### 憌𡡞埯3: 銝支葵璅<E79285><E288AA><EFBFBD>眏餈<E79C8F>鵭嚗屸𠗕隞亙笆瘥?
**摨𥪜笆**:
- <20>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD>喲睸<E596B2><EFBFBD><E4BC90>?00摮梹<E691AE>
- <20>𣂷<EFBFBD>撅訫<E69285>/<2F>嗉絲<E59789>厰僼
- 擃䀝漁<E4809D><EFBFBD><E884A9>?
---
## <20><EFBFBD>
### MVP<56><EFBFBD><EFBFBD><E59A97><EFBFBD>𡄯<EFBFBD>
1. <20>?PICOS颲枏<E9A2B2>銵典<E98AB5>
2. <20>?AI<41><49><EFBFBD>銝舘器<E88898>屸䔮憸条<E686B8><E69DA1>?
3. <20>?<3F><EFBFBD>蝖株恕<E6A0AA>屸𢒰
4. <20>?<3F>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt
5. <20>?Prompt蝻𤥁<E89DBB><F0A4A581>?
6. <20>?**<2A>曄內銝支葵璅<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B8A1>?* 潃?
**撘<><E69298>烐𧒄<E78390>?*: 2<>?
---
### 2.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
1. <20>睸 Few-shot<6F>芸𢆡摮虫<E691AE>
2. <20>妒 瘚贝<E7989A><E79285>
3. <20><> Prompt璅⊥踎摨?
**撘<><E69298>烐𧒄<E78390>?*: 2<>?
---
**<EFBFBD><EFBFBD>**: MVP<56><50><EFBFBD><EFBFBD><EFBFBD><E59581>訫虾<E8A8AB><EFBFBD>2.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
**銝衤<E98A9D>甇?*: 撘<>憪𨳒VP<56>嗆挾撘<E68CBE><E69298>?
---
**<EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦**: v1.0
**雿𡏭<E99BBF>?*: AI Assistant
**摰⊥瓲**: [敺<><EFBFBD>霈也
**<EFBFBD><EFBFBD>**: 2025-11-18