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%)
17 KiB
<EFBFBD>箄<EFBFBD>Prompt<EFBFBD><EFBFBD><EFBFBD>璅∪<EFBFBD> - 撘<><E69298>𤏸恣<F0A48FB8>?
<EFBFBD><EFBFBD>𧋦: v1.0
<EFBFBD>交<EFBFBD>: 2025-11-18
<EFBFBD>笔<EFBFBD>: 蝞<><E89D9E>𨰻<EFBFBD><F0A8B0BB>凒<EFBFBD>乓<EFBFBD><E4B993>虾<EFBFBD>扯<EFBFBD>
<EFBFBD>詨<EFBFBD><EFBFBD>格<EFBFBD>
閫<EFBFBD><EFBFBD><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<EFBFBD>嗆挾嚗<EFBFBD><EFBFBD><EFBFBD>𡄯<EFBFBD>
<EFBFBD>蠘<EFBFBD><EFBFBD><EFBFBD>凒
1. <20>冽<EFBFBD>颲枏<E9A2B2> <20>?
<EFBFBD>滨垢銵典<EFBFBD>:
{
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>g<EFBFBD>7銝芾<E98A9D><E88ABE>交<EFBFBD>
2. AI<41><49>圾銝𤾸<E98A9D><F0A4BEB8>?<3F><>
颲枏<EFBFBD>: <20>冽<EFBFBD><E586BD><EFBFBD>ICOS + 蝥單<E89DA5><E596AE><EFBFBD><EFBFBD>
颲枏枂:
{
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>曄內:
- <EFBFBD>?敹<>◆蝥喳<E89DA5>嚗<EFBFBD>虾<EFBFBD>暸<EFBFBD>?<3F>𡝗<EFBFBD>嚗?
- <EFBFBD>?敹<>◆<EFBFBD>㘾膄嚗<E88684>虾<EFBFBD>暸<EFBFBD>?<3F>𡝗<EFBFBD>嚗?
- <EFBFBD><EFBFBD> 颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD>嚗<EFBFBD><E59A97>𣂷葵蝖株恕嚗𡁶熙<F0A181B6>?<3F>㘾膄/銝滨&摰𡄯<E691B0>
摰䂿緵: Modal撖寡<E69296>獢<EFBFBD><E78DA2><EFBFBD><EFBFBD><EFBFBD>銝芸躹<E88AB8>?
4. <20>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt <20><>
颲枏<EFBFBD>: <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>:
- <EFBFBD>曄內<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt
- <EFBFBD>舀<EFBFBD><EFBFBD>冽<EFBFBD>蝻𤥁<EFBFBD>
- 靽嘥<EFBFBD>撟嗡蝙<EFBFBD>?
摰䂿緵: 蝞<><E89D9E>閧<EFBFBD>Textarea + 靽嘥<E99DBD><E598A5>厰僼
6. 蝑偦<E89D91>厩<EFBFBD><E58EA9>𨅯<EFBFBD>撘?潃?<EFBFBD>滩<EFBFBD>
敶枏<EFBFBD><EFBFBD>桅<EFBFBD>: <20>芣遬蝷箸<E89DB7>蝏<EFBFBD><E89D8F>蝑吔<E89D91>include/exclude/pending嚗?
<EFBFBD>寡<EFBFBD>: <20>曄內**銝支葵璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>渡<EFBFBD><E6B8A1>?*
{
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>曄內:
<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撘<EFBFBD><EFBFBD>烐<EFBFBD><EFBFBD>?
Week 1: <20>𡒊垢
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<EFBFBD>蝥? |
|---|---|---|
| API: <20><><EFBFBD>PICOS | 2憭? | P0 |
| API: <20><><EFBFBD>Prompt | 1憭? | P0 |
| 憓𧼮撩蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>𦦵<EFBFBD><EFBFBD>? | 0.5憭? | P0 |
| 瘚贝<EFBFBD> | 0.5憭? | P0 |
Week 2: <20>滨垢
| 隞餃𦛚 | 隡唳𧒄 | 隡睃<EFBFBD>蝥? |
|---|---|---|
| PICOS颲枏<EFBFBD>銵典<EFBFBD> | 0.5憭? | P0 |
| <EFBFBD>冽<EFBFBD>蝖株恕<EFBFBD>屸𢒰 | 1.5憭? | P0 |
| Prompt蝻𤥁<EFBFBD><EFBFBD>? | 0.5憭? | P0 |
| 蝏𤘪<EFBFBD>撅閧內憓𧼮撩 | 1憭? | P0 |
| 瘚贝<EFBFBD>銝舘<EFBFBD>隡? | 0.5憭? | P0 |
<EFBFBD>餉恣: 2<>剁<EFBFBD>10銝芸極雿𨀣𠯫嚗?
2.0<EFBFBD>嗆挾嚗<EFBFBD>虾<EFBFBD>匧<EFBFBD><EFBFBD>踝<EFBFBD>
<EFBFBD>蠘<EFBFBD>1: Few-shot<6F>芸𢆡摮虫<E691AE> <20>睸
閫血<EFBFBD><EFBFBD>箸艶: <20>冽<EFBFBD>蝥䭾迤AI<41>斗鱏<E69697>?
瘚<EFBFBD><EFBFBD>:
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>:
{
caseId: string;
literature: {
title: string;
abstract: string;
},
aiDecision: 'exclude';
userDecision: 'include';
userReason: '<27>賜<EFBFBD><E8B39C>舀洹蝢𦒘犖蝢歹<E89DA2>雿<EFBFBD>CT韐券<EFBFBD>擃?;
picoCriteria: {...}; // 敶𤘪𧒄<F0A498AA><F0A79284>ICOS
createdAt: Date;
}
Prompt憓𧼮撩:
## <20><><EFBFBD><EFBFBD><EFBFBD>靘页<E99D98>Few-shot蝷箔<E89DB7>嚗?
隞乩<E99A9E><E4B9A9>舀<EFBFBD>銋见<E98A8B>蝥䭾迤<E4ADBE><E8BFA4><EFBFBD>靘页<E99D98>霂瑕<E99C82><E79195><EFBFBD><EFBFBD>
獢<><E78DA2>1:
<0A><><EFBFBD>: TICA-CLOP STUDY...
AI<41>斗鱏: Exclude嚗<65><E59A97>銝箏<E98A9D><E7AE8F>硺犖蝢歹<E89DA2>
<0A>函<EFBFBD><E587BD>喟<EFBFBD>: Include
<0A>函<EFBFBD><E587BD><EFBFBD>眏: <20>賜<EFBFBD><E8B39C>臬<EFBFBD><E887AC>硺犖蝢歹<E89DA2>雿<EFBFBD>CT韐券<E99F90>擃矋<E69383><E79F8B>寞<EFBFBD><E5AF9E>匧<EFBFBD><E58CA7><EFBFBD>遠<EFBFBD>?
<0A>?<3F>舐內: <20>啣<EFBFBD>閬<EFBFBD><E996AC><EFBFBD>臭誑<E887AD>菜暑嚗<E69A91><E59A97><EFBFBD>𦦵<EFBFBD>蝛嗉捶<E59789>誯<EFBFBD>
獢<><E78DA2>2:
...
**摰䂿緵憭齿<E686AD>摨?*: 銝剔<E98A9D>嚗<EFBFBD><E59A97>閬<EFBFBD><E996AC>靘见<E99D98>蝞∠<E89D9E>嚗?
<EFBFBD>蠘<EFBFBD>2: 瘚贝<E7989A>璅∪<E79285> <20>妒
雿輻鍂<EFBFBD>箸艶: <20>冽<EFBFBD><E586BD>喳<EFBFBD>瘚贝<E7989A>10蝭<30><E89DAD><EFBFBD>殷<EFBFBD>霈剔<E99C88>AI<41><49>圾
瘚<EFBFBD><EFBFBD>:
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>屸𢒰:
<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<EFBFBD><EFBFBD><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>
<EFBFBD>蠘<EFBFBD>3: Prompt璅⊥踎摨?<3F><>
<EFBFBD>蠘<EFBFBD>:
- 靽嘥<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt銝箸芋<EFBFBD>?
- 銝𧢲活<EFBFBD>臭誑<EFBFBD>湔𦻖憭滨鍂
- <EFBFBD>臭誑<EFBFBD><EFBFBD>澈蝏坔𣪧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
**摰䂿緵憭齿<E686AD>摨?*: 雿?
2.0撘<EFBFBD><EFBFBD>烐<EFBFBD><EFBFBD>?
| <EFBFBD>蠘<EFBFBD> | 隡唳𧒄 | 隡睃<EFBFBD>蝥? | 靘肽<EFBFBD> |
|---|---|---|---|
| Few-shot摮虫<E691AE> | 3憭? | P1 | MVP摰峕<EFBFBD> |
| 瘚贝<EFBFBD>璅∪<EFBFBD> | 5憭? | P2 | MVP摰峕<EFBFBD> |
| Prompt璅⊥踎摨? | 2憭? | P1 | MVP摰峕<EFBFBD> |
<EFBFBD>餉恣: 2<>?
<EFBFBD><EFBFBD><EFBFBD>臬<EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>?
1. AI<41><49><EFBFBD>PICOS<4F><53>rompt
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>
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
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>嗆挾嚗?
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<EFBFBD>嗆挾
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
}
}
瘚贝<EFBFBD>霈∪<EFBFBD>
MVP瘚贝<EFBFBD>
瘚贝<EFBFBD><EFBFBD>唳旿: <20>雴葉<E99BB4>𠉛弦嚗<E5BCA6>歇<EFBFBD>?蝭<><E89DAD>
瘚贝<EFBFBD><EFBFBD>箸艶:
-
<EFBFBD>箸艶1: 甇<>虜瘚<E8999C><E7989A>
- 颲枏<EFBFBD>PICOS <20>?AI<41><49><EFBFBD> <20>?<3F>冽<EFBFBD>蝖株恕 <20>?<3F><><EFBFBD>Prompt <20>?蝑偦<E89D91>?
- 撉諹<EFBFBD>嚗帋舅銝芣芋<EFBFBD>讠<EFBFBD><EFBFBD><EFBFBD>眏<EFBFBD>臬炏摰峕㟲<EFBFBD>曄內
-
<EFBFBD>箸艶2: 颲寧<E9A2B2><E5AFA7><EFBFBD><EFBFBD>蝖株恕
- <EFBFBD>冽<EFBFBD>蝖株恕"甈抒<E79488>RCT<43>舐熙<E88890>? <20>?撉諹<E69289>Prompt銝剜糓<E5899C>血<EFBFBD><E8A180>急迨閫<E8BFA8><E996AB>
- 撉諹<EFBFBD>嚗𡁜<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇𧒄<EFBFBD>臬炏<EFBFBD>萄<EFBFBD>甇方<EFBFBD><EFBFBD>?
-
<EFBFBD>箸艶3: <20>冽<EFBFBD>蝻𤥁<E89DBB>Prompt
- <EFBFBD>冽<EFBFBD>靽格㺿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt <20>?撉諹<E69289>靽格㺿<E6A0BC>臬炏<E887AC><E7828F><EFBFBD>
-
<EFBFBD>箸艶4: 璅∪<E79285><E288AA>脩<EFBFBD>
- 撉諹<EFBFBD>嚗帋舅銝芣芋<EFBFBD>见ế<EFBFBD>凋<EFBFBD>銝<EFBFBD><EFBFBD>湔𧒄嚗𣬚<EFBFBD><EFBFBD>望糓<EFBFBD>行<EFBFBD><EFBFBD>啣<EFBFBD>蝷?
瘚贝<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:
- Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>? >90%
- <EFBFBD>冽<EFBFBD>皛⊥<EFBFBD>摨? >80%
- <EFBFBD><EFBFBD>眏撅閧內摰峕㟲<EFBFBD>? 100%
2.0瘚贝<EFBFBD>
瘚贝<EFBFBD><EFBFBD>箸艶:
-
Few-shot摮虫<E691AE>
- <EFBFBD>冽<EFBFBD>蝥䭾迤3銝芣<EFBFBD>靘?<3F>?撉諹<E69289>Prompt銝剜糓<E5899C>血<EFBFBD><E8A180>怨<EFBFBD>鈭𥟇<E988AD>靘?
- 撉諹<EFBFBD>嚗𡁏鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇糓<EFBFBD>行㺿餈?
-
瘚贝<EFBFBD>璅∪<EFBFBD>
- <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD>釣10蝭?<3F>?AI<41><49><EFBFBD>璅∪<E79285> <20>?<3F><><EFBFBD>Prompt
- 撉諹<EFBFBD>嚗𡁶<EFBFBD><EFBFBD>鞟<EFBFBD>Prompt<EFBFBD>臬炏蝚血<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD>誩末
<EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
MVP<EFBFBD>嗆挾
| <EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>格<EFBFBD> |
|---|---|
| Prompt<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>&<EFBFBD>? | >90% |
| <EFBFBD>冽<EFBFBD>摰峕<EFBFBD><EFBFBD>滨蔭<EFBFBD>園𡢿 | <5<><35><EFBFBD> |
| <EFBFBD><EFBFBD>眏撅閧內摰峕㟲<EFBFBD>? | 100% |
| 璅∪<EFBFBD><EFBFBD>脩<EFBFBD>霂<EFBFBD><EFBFBD><EFBFBD>? | 100% |
| <EFBFBD>冽<EFBFBD>皛⊥<EFBFBD>摨? | >80% |
2.0<EFBFBD>嗆挾
| <EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>格<EFBFBD> |
|---|---|
| Few-shot<6F>寡<EFBFBD><E5AFA1><EFBFBD>&<EFBFBD>? | +15% |
| 瘚贝<EFBFBD>璅∪<EFBFBD><EFBFBD>寥<EFBFBD>摨? | >85% |
| Prompt璅⊥踎憭滨鍂<EFBFBD>? | >60% |
憌𡡞埯銝𤾸<EFBFBD>撖?
憌𡡞埯1: LLM<4C><4D><EFBFBD><EFBFBD><EFBFBD>器<EFBFBD>屸䔮憸䁅捶<E48185>譍<EFBFBD>蝔喳<E89D94>
摨𥪜笆:
- 雿輻鍂Few-shot Prompt
- 鈭箏極摰⊥瓲撣貉<EFBFBD>颲寧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>𣂷<EFBFBD>暺䁅恕颲寧<EFBFBD><EFBFBD>桅<EFBFBD>摨?
憌𡡞埯2: <20>冽<EFBFBD>銝齿<E98A9D><E9BDBF>讛<EFBFBD><E8AE9B>園𡢿蝖株恕
摨𥪜笆:
- <EFBFBD>芣遬蝷?銝芷<E98A9D>隡睃<E99AA1>蝥折䔮憸?
- <EFBFBD>嗡<EFBFBD>雿輻鍂AI暺䁅恕撱箄悅
- <EFBFBD>𣂷<EFBFBD>"敹恍<E695B9><E6818D>芋撘?嚗<>歲餈<E6ADB2>&霈歹<E99C88>
憌𡡞埯3: 銝支葵璅∪<E79285><E288AA><EFBFBD>眏餈<E79C8F>鵭嚗屸𠗕隞亙笆瘥?
摨𥪜笆:
- <EFBFBD>𣂼<EFBFBD><EFBFBD><EFBFBD>眏<EFBFBD>喲睸<EFBFBD>伐<EFBFBD><EFBFBD>?00摮梹<E691AE>
- <EFBFBD>𣂷<EFBFBD>撅訫<EFBFBD>/<2F>嗉絲<E59789>厰僼
- 擃䀝漁<EFBFBD>脩<EFBFBD><EFBFBD>?
<EFBFBD>餌<EFBFBD>
MVP<EFBFBD>詨<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>𡄯<EFBFBD>
- <EFBFBD>?PICOS颲枏<E9A2B2>銵典<E98AB5>
- <EFBFBD>?AI<41><49><EFBFBD>銝舘器<E88898>屸䔮憸条<E686B8><E69DA1>?
- <EFBFBD>?<3F>冽<EFBFBD>蝖株恕<E6A0AA>屸𢒰
- <EFBFBD>?<3F>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt
- <EFBFBD>?Prompt蝻𤥁<E89DBB><F0A4A581>?
- <EFBFBD>?**<2A>曄內銝支葵璅∪<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD>渡<EFBFBD><E6B8A1>?* 潃?
**撘<><E69298>烐𧒄<E78390>?*: 2<>?
2.0<EFBFBD>拙<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
- <EFBFBD>睸 Few-shot<6F>芸𢆡摮虫<E691AE>
- <EFBFBD>妒 瘚贝<E7989A>璅∪<E79285>
- <EFBFBD><EFBFBD> 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