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

17 KiB
Raw Blame History

<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><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>箸艶:

  1. <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>曄內
  2. <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>?
  3. <EFBFBD>箸艶3: <20><EFBFBD>蝻𤥁<E89DBB>Prompt

    • <EFBFBD><EFBFBD>靽格㺿<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rompt <20>?撉諹<E69289>靽格㺿<E6A0BC>臬炏<E887AC><E7828F><EFBFBD>
  4. <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>箸艶:

  1. Few-shot摮虫<E691AE>

    • <EFBFBD><EFBFBD>蝥䭾迤3銝芣<EFBFBD>靘?<3F>?撉諹<E69289>Prompt銝剜糓<E5899C><EFBFBD><E8A180><EFBFBD>鈭𥟇<E988AD>靘?
    • 撉諹<EFBFBD>嚗𡁏鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇糓<EFBFBD>行㺿餈?
  2. 瘚贝<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>

  1. <EFBFBD>?PICOS颲枏<E9A2B2>銵典<E98AB5>
  2. <EFBFBD>?AI<41><49><EFBFBD>銝舘器<E88898>屸䔮憸条<E686B8><E69DA1>?
  3. <EFBFBD>?<3F><EFBFBD>蝖株恕<E6A0AA>屸𢒰
  4. <EFBFBD>?<3F>芸𢆡<E88AB8><F0A286A1><EFBFBD>Prompt
  5. <EFBFBD>?Prompt蝻𤥁<E89DBB><F0A4A581>?
  6. <EFBFBD>?**<2A>曄內銝支葵璅<E79285><E288AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B8A1>?* 潃?

**撘<><E69298>烐𧒄<E78390>?*: 2<>?


2.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

  1. <EFBFBD>睸 Few-shot<6F>芸𢆡摮虫<E691AE>
  2. <EFBFBD>妒 瘚贝<E7989A><E79285>
  3. <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