Files
AIclinicalresearch/docs/03-业务模块/ASL-AI智能文献/02-技术设计/08-全文复筛质量保障策略.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

1507 lines
42 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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.
# 蜈ィ譁<EFBDA8>、咲ュ幄エィ驥丈ソ晞囿荳主庄霑ス貅ッ遲也払
> **譁<>。」迚域悽<E59F9F>?* V1.0
> **蛻帛サコ譌・譛滂シ?* 2025-11-22
> **騾ら畑讓。蝮暦シ?* AI 譎コ閭ス譁<EFBDBD>鍵 - 蜈ィ譁<EFBDA8>、咲ュ<E592B2>
> **逶ョ譬<EFBDAE>シ?* 蛻<>亳谿オ謠仙合蜈ィ譁<EFBDA8>、咲ュ帷噪蜃<E599AA>。ョ邇<EFBDAE>€∵婿豕募ュヲ雍ィ驥丞愛譁ュ蜥悟ョ梧紛蜿ッ霑ス貅ッ諤?
---
## <20>搭 譁<>。」讎りソー
譛ャ譁<EFBFBD>。」螳壻ケ我コ<EFBFBD>**蜈ィ譁<EFBDA8>、咲ュ帶ィ。蝮<EFBDA1>**蝨?**MVP 竊?V1.0 竊?V2.0** 荳我クェ髦カ谿オ逧<EFBDB5>エィ驥丈ソ晞囿遲也払縲?
### 蜈ィ譁<EFBDA8>、咲ュ<E592B2> vs 譬<>「俶遭隕∝<E99A95>遲幢シ壽<EFBDBC>ク蠢<EFBDB8>キョ蠑?
| 扈エ蠎ヲ | 譬<>「俶遭隕∝<E99A95><EFBFBD> | 蜈ィ譁<EFBDA8>、咲ュ<E592B2> | 遲也払蟾ョ蠑<EFBDAE> |
|------|-------------|---------|---------|
| **菫。諱ッ驥?* | 200-500蟄?| 5,000-20,000蟄?| <20>閥 髴€<C280>ョオ螟<EFBDB5>炊 |
| **蛻、譁ュ萓晄紺** | PICOS蛹ケ驟榊コ?| 12蟄玲ョオ譁ケ豕募ュヲ雍ィ驥?| <20>閥 髴€荳謎ク壼愛譁ュ譬<EFBDAD>㊥ |
| **蜀ウ遲門、肴揩蠎?* | 菴?譏?蜷? | 鬮?12荳ェ蟄玲ョオテ?郤? | <20>閥 髴€扈捺桷蛹匁署蜿?|
| **螳ケ髞咏ュ也払** | 螳<>漠蜍ソ貍<EFBDBF> | 荳崎<E88DB3>貍丞<E8B28D>髞ョ菫。諱?| <20>閥 髴€鬪瑚ッ∵惻蛻カ |
| **Token謌先悽** | ツ・0.005/遽?| ツ・0.05-0.20/遽?| <20>閥 髴€謌先悽莨伜喧 |
| **蜿ッ霑ス貅ッ諤?* | 蠑慕畑鞫倩ヲ<E580A9> | 蜈キ菴馴。オ遐<EFBDB5>/谿オ關ス/陦ィ譬シ | <20>閥 髴€隸∵紺體?|
### 譬ク蠢<EFBDB8>ョセ隶。蜴溷<E89CB4>
| 蜴溷<E89CB4> | 隸エ譏<EFBDB4> |
|------|------|
| **蠕ェ隸∝現蟄ヲ譬<EFBDA6>** | 蝓コ莠擦ochrane RoB 2.0蟾・蜈キ逧<EFBFBD>婿豕募ュヲ雍ィ驥剰ッ<EFBFBD>シー譬<EFBFBD>㊥ |
| **扈捺桷蛹匁署蜿?* | Nougat + 蛻<>ョオ謠仙叙 + 蜈ィ譁<EFBDA8>ェ瑚ッ<E7919A>シ碁∩蜈?Lost in the Middle" |
| **螳梧紛隸∵紺體?* | 豈丈クェ蟄玲ョオ蠑コ蛻カ隕∵アょ次譁<E6ACA1>シ慕畑<E68595>磯。オ遐√€∵ョオ關ス縲∬。ィ譬シ<E8ADAC><EFBDBC> |
| **蛻<>ュ・螳樊命** | MVP蜈磯ェ瑚ッ∝庄陦梧€<C280>祁1.0謠仙合雍ィ驥擾シ祁2.0霎セ蛻ー蛹サ蟄ヲ郤ァ譬<EFBFBD><EFBFBD>?|
| **謌先悽荳手エィ驥丞ケウ陦?* | MVP逕ィ謌先悽蜿句・ス讓。蝙具シ悟<EFBDBC>髞ョ蟄玲ョオ逕ィ鬮倡ォッ讓。蝙矩ェ瑚ッ?|
---
## <20>識 荳蛾亳谿オ霍ッ郤ソ蝗セ
```
MVP (3蜻? V1.0 (5蜻? V2.0 (8蜻?
笏懌楳 Nougat扈捺桷蛹匁署蜿? 笏懌楳 Cochrane譬<65>㊥Prompt 笏懌楳 荳画ィ。蝙倶サイ陬?
笏懌楳 12蟄玲ョオ蛻<EFBDB5>ョオ謠仙叙 笏懌楳 Few-shot蛹サ蟄ヲ譯井セ句コ? 笏懌楳 蛹サ蟄ヲ騾サ霎題ァ<E9A18C><EFBDA7>蠑墓梼
笏懌楳 蜿梧ィ。蝙矩ェ瑚ッ? 笏懌楳 螳梧紛隸∵紺體? 笏懌楳 閾ェ蜉ィ雍ィ驥丞ョ。隶。
笏懌楳 蟄玲ョオ郤ァ蜀イ遯∵」€豬? 笏懌楳 蜈ィ譁<EFBDA8>コ、蜿蛾ェ瑚ッ<E7919A> 笏懌楳 HITL譎コ閭ス蛻<EFBDBD><EFBFBD>
笏披楳 蝓コ遑€蜿ッ霑ス貅? 笏披楳 蛻<>コァ莠コ蟾・螟肴<E89E9F>ク 笏披楳 螳。隶。郤ァ譌・蠢?
竊? 竊? 竊?
<>。ョ邇?竕?85% 蜃<>。ョ邇?竕?92% 蜃<>。ョ邇?竕?96%
```
---
## <20>噫 MVP 髦カ谿オ<E8B0BF>? 蜻ィ<E89CBB><EFBDA8>
### 逶ョ譬<EFBDAE>ョ壻ス<E5A3BB>
- **蜃<>。ョ邇<EFBDAE>岼譬?*<2A>壺翁 85%
- **菫。諱ッ螳梧紛邇?*<2A>壺翁 90%<25>?2蟄玲ョオ荳埼貍擾シ<E693BE>
- **謌先悽鬚<E682BD><EFBFBD>**<2A>壺王 ツ・0.05/遽<><EFBFBD>eepSeek-V3 + Qwen3-Max<61>?
- **莠、莉俶<E88E89><E4BFB6>㊥**<2A>壼渕遑€蜉溯<E89C89>蜿ッ逕ィ<E98095>梧髪謖∫サ捺桷蛹匁署蜿門柱蜿梧ィ。蝙矩ェ瑚ッ<E7919A>
---
### 荳€縲∵<E7B8B2>ク蠢<EFBDB8>橿譛ッ遲也<E981B2>?
#### 1.1 笨?Nougat扈捺桷蛹匁署蜿厄シ亥<EFBDBC>髞ョ莨伜漢<E4BC9C>?
**荳コ莉€荵磯€画叫Nougat**<EFBFBD>?
| 蟇ケ豈皮サエ蠎ヲ | PyMuPDF | Nougat |
|---------|---------|--------|
| 霎灘<E99C8E>譬シ蠑<EFBDBC> | 郤ッ譁<EFBDAF><E8AD81>?| Markdown扈捺桷蛹?|
| 遶<>闃りッ<E3828A>悪 | 髴€LLM莠梧ャ。隸<EFBDA1><EFBFBD>?0%蜃<>。ョ邇<EFBDAE><EFBFBD> | 螟ゥ辟カ菫晉蕗扈捺桷<E68DBA>?5%蜃<>。ョ邇<EFBDAE>シ俄<EFBDBC>?|
| 陦ィ譬シ螟<EFBDBC>炊 | 譁<>悽荵ア遐<EFBDB1> | Markdown陦ィ譬シ 笨?|
| 蜈ャ蠑剰ッ<E589B0>悪 | 荵ア遐<EFBDB1> | LaTeX譬シ蠑<EFBDBC> 笨?|
| 騾ら畑蝨コ譎ッ | 荳ュ譁<EFBDAD>ョコ譁<EFBDBA> | 闍ア譁<EFBDB1>ュヲ譛ッ隶コ譁<EFBDBA> 笨?|
**螳樊命譁ケ譯<EFBDB9>**<EFBFBD>?
```typescript
// 豺キ蜷育ュ也払<E4B99F>哢ougat莨伜<E88EA8><E4BC9C>訓yMuPDF髯咲コァ
async function extractFullText(pdfBuffer: Buffer, filename: string) {
// Step 1: 譽€豬玖ッュ險€
const language = await detectLanguage(pdfBuffer);
// Step 2: 闍ア譁<EFBDB1>ョコ譁<EFBDBA>シ伜<EFBDBC>逕ィNougat
if (language === 'english') {
try {
const nougatResult = await extractionClient.extractPdf(
pdfBuffer, filename, 'nougat'
);
if (nougatResult.quality > 0.8) {
return {
method: 'nougat',
text: nougatResult.text,
format: 'markdown',
structured: true // 箝?蜈ウ髞ョ莨伜漢
};
}
} catch (error) {
console.warn('Nougat螟ア雍・<E99B8D>碁剄郤ァ蛻ーPyMuPDF');
}
}
// Step 3: 荳ュ譁<EFBDAD>ョコ譁<EFBDBA><E8AD81>Nougat螟ア雍・<E99B8D>檎畑PyMuPDF
const pymupdfResult = await extractionClient.extractPdf(
pdfBuffer, filename, 'pymupdf'
);
return {
method: 'pymupdf',
text: pymupdfResult.text,
format: 'plaintext',
structured: false // 髴€´LM隸<4D>悪扈捺桷
};
}
```
---
#### 1.2 笨?12蟄玲ョオ蛻<EFBDB5>ョオ謠仙叙<E4BB99>磯∩蜈広ost in the Middle<6C>?
**譬ク蠢<EFBDB8>琉鬚<E79089>**<EFBFBD><EFBFBD>譁?0K tokens荳€谺。諤ァ蝟らサ儉LM<4C>御クュ髣エ遶<EFBDB4>闃ゆソ。諱ッ驕玲シ冗紫鬮倩セセ33%
**隗」蜀ウ譁ケ譯<EFBDB9>**<EFBFBD>壽潔蟄玲ョオ螳壼髄謠仙叙逶ク蜈ウ遶<EFBFBD><EFBFBD>
```typescript
// 12蟄玲ョオ謠仙叙霍ッ逕ア陦?
const FIELD_EXTRACTION_ROUTES = {
'遐皮ゥカ隶セ隶。': {
sections: ['abstract', 'methods'],
maxTokens: 3000,
priority: 'high'
},
'遐皮ゥカ莠コ鄒、': {
sections: ['methods', 'results'],
maxTokens: 3500,
priority: 'high',
lookForTables: true // Table 1: Baseline
},
'蟷イ鬚<EFBDB2>蒔譁ス': {
sections: ['methods', 'results'],
maxTokens: 3000,
priority: 'high'
},
'蟇ケ辣ァ謗ェ譁ス': {
sections: ['methods', 'results'],
maxTokens: 2500,
priority: 'high'
},
'扈灘ア€<C280><E8AC96><EFBFBD>': {
sections: ['methods', 'results'],
maxTokens: 4000,
priority: 'high',
lookForTables: true // Results tables
},
'髫乗惻蛹匁婿豕?: {
sections: ['methods', 'figures'],
maxTokens: 2500,
priority: 'critical', // 蜈ウ髞ョ蟄玲ョオ
keywords: ['randomization', 'allocation', 'sequence', 'CONSORT']
},
'<EFBFBD>': {
sections: ['methods'],
maxTokens: 2000,
priority: 'critical'
},
'?: {
sections: ['methods'],
maxTokens: 2000,
priority: 'medium'
},
'蝓コ郤ソ蜿ッ豈疲€?: {
sections: ['results', 'tables'],
maxTokens: 3000,
priority: 'high',
specificTable: 'Table 1'
},
'?: {
sections: ['results', 'figures'],
maxTokens: 4000,
priority: 'critical',
keywords: ['ITT', 'per-protocol', 'missing data', 'dropout']
},
'騾画叫諤ァ謚・蜻?: {
sections: ['methods', 'results', 'supplementary'],
maxTokens: 3000,
priority: 'medium',
checkTrialRegistry: true // 蟇ケ豈疲ウィ蜀梧婿譯<E5A9BF>
},
'?: {
sections: ['methods', 'discussion', 'supplementary'],
maxTokens: 3000,
priority: 'medium'
}
};
// 蛻<>ョオ蟷カ陦梧署蜿<E7BDB2>
async function extractAllFields(sections: ParsedSections) {
const extractionTasks = Object.entries(FIELD_EXTRACTION_ROUTES).map(
([fieldName, config]) => ({
field: fieldName,
task: extractFieldWithEvidence(fieldName, sections, config)
})
);
// 蟷カ陦梧鴬陦鯉シ磯剄菴主サカ霑滂シ<E6BB82>
const results = await Promise.all(
extractionTasks.map(t => t.task)
);
return results;
}
```
**莨伜漢**<EFBFBD>?
- 笨?驕ソ蜈堺クュ髣エ菫。諱ッ驕玲シ擾シ亥㊥遑ョ邇<EFBDAE> 70% 竊?90%<25>?
- 笨?Token豸郁€鈴剄菴?0%<25>?0K 竊?12K<32>?
- 笨?蟷カ陦梧署蜿厄シ悟サカ霑滄剄菴?0%
- 笨?豈丈クェ蟄玲ョオLLM豕ィ諢丞鴨譖エ髮<EFBDB4>クュ
---
#### 1.3 笨?蜿梧ィ。蝙倶コ、蜿蛾ェ瑚ッ?
**讓。蝙狗サ<E78B97>**<EFBFBD>咼eepSeek-V3 + Qwen3-Max<61><EFBFBD>譛ャ蜿句・ス<EFBDA5><EFBDBD>
```typescript
// 蜿梧ィ。蝙句ケカ陦瑚ー<E7919A><EFBDB0>?
async function dualModelExtraction(
fieldName: string,
relevantContent: string,
prompt: string
) {
const [resultA, resultB] = await Promise.all([
llmService.chat('deepseek-v3', prompt, relevantContent),
llmService.chat('qwen-max', prompt, relevantContent)
]);
// 隗」譫千サ捺棡
const assessmentA = parseFieldAssessment(resultA);
const assessmentB = parseFieldAssessment(resultB);
// 蜀イ遯∵」€豬?
const hasConflict = assessmentA.level !== assessmentB.level;
return {
field: fieldName,
modelA: {
model: 'deepseek-v3',
assessment: assessmentA.level, // '螳梧紛'/'荳榊ョ梧<EFBDAE>?/'譌<>豕募愛譁ュ'
evidence: assessmentA.evidence,
confidence: assessmentA.confidence
},
modelB: {
model: 'qwen-max',
assessment: assessmentB.level,
evidence: assessmentB.evidence,
confidence: assessmentB.confidence
},
hasConflict,
needReview: hasConflict ||
assessmentA.confidence < 0.7 ||
assessmentB.confidence < 0.7
};
}
```
---
#### 1.4 笨?蟄玲ョオ郤ァ蜀イ遯∵」€豬倶ク主<EFBDB8>郤ァ螟肴<E89E9F>
**荳肴弍邂€蜊慕噪"蜈ィ驛ィ蜀イ遯∝ーア莠コ蟾・螟肴<E89E9F>?<3F>€梧弍譬ケ謐ョ蟄玲ョオ驥崎ヲ∵€ァ蛻<EFBDA7>コ?*<2A>?
```typescript
// 蟄玲ョオ驥崎ヲ∵€ァ蛻<EFBDA7>コ?
const FIELD_IMPORTANCE = {
critical: ['髫乗惻蛹匁婿豕?, '<EFBFBD>', '?], // 譬ク蠢<EFBDB8>¥蛟夐」朱<EFBDA3>?
high: ['遐皮ゥカ隶セ隶。', '遐皮ゥカ莠コ鄒、', '蟷イ鬚<EFBDB2>蒔譁ス', '扈灘ア€<C280><E8AC96><EFBFBD>', '蝓コ郤ソ蜿ッ豈疲€?],
medium: ['?, '騾画叫諤ァ謚・蜻?, '?]
};
// 譎コ閭ス蛻<EFBDBD><EFBFBD>
function prioritizeReview(conflicts: FieldConflict[]): ReviewQueue {
const queue = {
urgent: [], // 蜈ウ髞ョ蟄玲ョオ蜀イ遯<EFBDB2> 竊?遶句叉莠コ蟾・螟肴<E89E9F>
important: [], // 鬮倅シ伜<EFBDBC>郤ァ蟄玲ョオ蜀イ遯<EFBDB2> 竊?24蟆乗慮蜀<E685AE>、肴<EFBDA4>?
normal: [] // 荳ュ遲我シ伜<EFBDBC>郤ァ蟄玲ョオ蜀イ遯?竊?48蟆乗慮蜀<E685AE>、肴<EFBDA4>?
};
for (const conflict of conflicts) {
if (!conflict.hasConflict) continue;
if (FIELD_IMPORTANCE.critical.includes(conflict.field)) {
queue.urgent.push({
...conflict,
reason: '蜈ウ髞ョ譁ケ豕募ュヲ蟄玲ョオ蜀イ遯<EFBDB2>シ悟スア蜩榊¥蛟夐」朱勦隸<E58BA6>シ?,
deadline: new Date(Date.now() + 2 * 3600 * 1000) // 2蟆乗慮
});
} else if (FIELD_IMPORTANCE.high.includes(conflict.field)) {
queue.important.push({
...conflict,
reason: '<EFBFBD><EFBFBD>',
deadline: new Date(Date.now() + 24 * 3600 * 1000) // 24蟆乗慮
});
} else {
queue.normal.push({
...conflict,
reason: '€?,
deadline: new Date(Date.now() + 48 * 3600 * 1000) // 48蟆乗慮
});
}
}
return queue;
}
```
---
#### 1.5 笨?蝓コ遑€隸∵紺體セ<E9AB94>亥次譁<E6ACA1>シ慕畑<E68595>?
**MVP髦カ谿オ隕∵ア<E288B5>**<EFBFBD>壽ッ丈クェ蟄玲ョオ蠢<EFBFBD>。サ譛牙次譁<EFBFBD>シ慕畑
```typescript
interface FieldEvidence {
field: string;
assessment: '螳梧紛' | '荳榊ョ梧<EFBDAE>? | '<EFBFBD>';
// 箝?蠑コ蛻カ隕∵ア<E288B5>
evidence: {
quote: string; // 蜴滓枚蠑慕畑<E68595>?00-300蟄暦シ<E69AA6>
location: {
section: string; // "Methods"
page?: number; // 3<>亥ヲよ棡PDF譛蛾。オ遐<EFBDB5><EFBFBD>
paragraph?: number; // 2
table?: string; // "Table 1"
figure?: string; // "Figure 1"
};
highlightedKeywords: string[]; // 蜈ウ髞ョ菫。蜿キ隸?
};
reasoning: string; // 蛻、譁ュ逅<EFBDAD><EFBFBD>?0-200蟄暦シ<E69AA6>
confidence: number; // 0.0-1.0
}
// 蜷主、<E4B8BB>炊鬪瑚ッ<E7919A>シ夂。ョ菫晄ッ丈クェ蟄玲ョオ驛ス譛芽ッ∵紺
function validateEvidence(result: ExtractionResult): ValidationReport {
const errors = [];
for (const [field, data] of Object.entries(result.fields)) {
// 譽€譟?<3F>壼ソ<E5A3BC>。サ譛牙シ慕畑
if (!data.evidence?.quote) {
errors.push({
field,
type: 'missing_evidence',
message: `蟄玲ョオ"${field}"郛コ蟆大次譁<E6ACA1>シ慕畑`
});
}
// 譽€譟?<3F>壼シ慕畑荳崎<E88DB3>螟ェ遏ュ<E9818F>磯∩蜈肴聞陦搾シ?
if (data.evidence?.quote && data.evidence.quote.length < 50) {
errors.push({
field,
type: 'insufficient_evidence',
message: `蟄玲ョオ"${field}"逧<>シ慕畑霑<E79591><EFBFBD><E6B492><50蟄暦シ会シ悟庄閭ス荳崎カウ莉・謾ッ謖∝愛譁ュ`
});
}
// 譽€譟?<3F>壼ソ<E5A3BC>。サ譛我ス咲スョ菫。諱ッ
if (!data.evidence?.location?.section) {
errors.push({
field,
type: 'missing_location',
message: `蟄玲ョオ"${field}"譛ェ譬<EFBDAA>ウィ蜴滓枚菴咲スョ`
});
}
}
return {
isValid: errors.length === 0,
errors,
completeness: 1 - (errors.length / (Object.keys(result.fields).length * 3))
};
}
```
---
### 莠後€?2蟄玲ョオ荳謎ク啀rompt讓。譚ソ<E8AD9A><EFBDBF>VP迚茨シ<E88CA8>
#### 遉コ萓具シ夐囂譛コ蛹匁婿豕包シ亥<EFBDBC>髞ョ蟄玲ョオ<EFBDAE><EFBDB5>
```markdown
# 蟄玲ョオ謠仙叙莉サ蜉。<E89C89>夐囂譛コ蛹匁婿豕<E5A9BF>
## 閭梧勹隸エ譏<EFBDB4>
<EFBFBD>譏ッ荳€菴榊セェ隸∝現蟄ヲ荳灘ョカ<EFBFBD>梧ュ」蝨ィ隸<EFBFBD>シー荳€遽⑲CT遐皮ゥカ逧<EFBFBD>婿豕募ュヲ雍ィ驥上€?
隸キ譬ケ謐ョCochrane蛛丞€夐」朱勦隸<EFBFBD>シー蟾・蜈キ<EFBFBD><EFBFBD>oB 2.0<EFBFBD>臥噪譬<EFBFBD><EFBFBD>悟愛譁ュ隸・遐皮ゥカ逧<EFBFBD>囂譛コ蛹匁婿豕墓弍蜷ヲ蜈<EFBFBD><EFBFBD>縲?
## 蠕<><E8A095>譫仙<E8ADAB>螳?
莉・荳区弍隶コ譁<EFBFBD>噪Methods遶<EFBFBD>闃ょ柱逶ク蜈ウ蝗セ陦ィ<EFBFBD><EFBFBD>
${relevantContent}
## 蛻、譁ュ譬<EFBDAD>
### 螳梧紛<E6A2A7><E7B49B>ow risk of bias<61>?
髴€**蜷梧慮貊。雜ウ**莉・荳区擅莉カ<E88E89>?
1. 笨?譏守。ョ隸エ譏朱囂譛コ蠎丞<E8A08E>逕滓<E98095>譁ケ豕<EFBDB9>
- 遉コ萓具シ喞omputer-generated random sequence, random number table,
central randomization, minimization
2. 笨?隸エ譏主<E8AD8F>驟埼嚼阯乗婿豕<E5A9BF>
- 遉コ萓具シ嘖ealed opaque envelopes, central allocation,
pharmacy-controlled, IWRS (Interactive Web Response System)
3. 笨?譌<>騾画叫蛛丞€夂噪隸∵紺
- 蝓コ郤ソ迚ケ蠕∝ケウ陦。
-<>蠑ょクク逧<EFBDB8><E980A7><EFBFBD>慮髣エ讓。蠑<EFBDA1>
### 荳榊ョ梧紛<E6A2A7><E7B49B>igh/Unclear risk of bias<61>?
莉・荳区ュ蜀オ蛻、螳壻クコ荳榊ョ梧紛<EFBFBD>?
- 笶?莉<>署蛻?髫乗惻蛻<E683BB><EFBFBD>"菴<>裏蜈キ菴捺婿豕<E5A9BF>
- 笶?菴ソ逕ィ荳榊ス鍋噪髫乗惻蛹匁婿豕包シ域潔譌・譛溘€∽ス城劼蜿キ縲∽コ、譖ソ蛻<EFBDBF><E89BBB><EFBFBD><EFBFBD>
- 笶?譌<><EFBFBD><E89BBB>髫占酪謌門<E8AC8C>驟埼嚼阯丈ク榊ス難シ亥シ€謾セ蛻<EFBDBE><E89BBB>陦ィ<E999A6>?
- 笶?蝓コ郤ソ蟄伜惠譏セ闡嶺ク榊ケウ陦。荳疲裏隹<E8A38F><E99AB9>?
-<><E7AC9E><EFBFBD> 譁ケ豕墓緒霑ー讓。邉奇シ梧裏豕募愛譁ュ蜈<EFBDAD><E89C88>諤?
### 譌<>豕募愛譁ュ<E8AD81><EFBDAD>nclear risk<73>?
- 隶コ譁<EFBDBA>ョ悟<EFBDAE>譛ェ謠仙所髫乗惻蛹匁婿豕<E5A9BF>
-<>惠蜈カ莉門慍譁ケ<E8AD81>亥ヲよウィ蜀梧婿譯茨シ画署蛻ー<E89BBB>御ス<E5BEA1>悽譁<E682BD>悴謠剰ソー
## 蜈ウ髞ョ菫。蜿キ隸?
**鬮倩エィ驥丈ソ。蜿キ<E89CBF>亥ョ梧紛<E6A2A7>?*<2A>?
- "computer-generated random sequence"
- "central randomization/allocation"
- "sealed opaque envelopes"
- "stratified randomization"
- "block randomization"
- "minimization"
- "allocation concealment"
**鬟朱勦菫。蜿キ<E89CBF>井ク榊ョ梧紛<E6A2A7>?*<2A>?
- "alternating allocation"
- "by date of birth"
- "by hospital number"
- "open allocation"
- "assigned by investigator"
## 謠仙叙謖<E58F99>
1. **莨伜<E88EA8>譟・謇セ菴咲スョ**<EFBFBD>?
- Methods遶<73>闃ら<E99783>?Randomization"蟆剰鰍
- Figure 1 (CONSORT豬∫ィ句<EFBDA8>?
- Trial Registration菫。諱ッ
- 陦・蜈<EFBDA5>攝譁呻シ<E591BB>upplementary Materials<6C>?
2. **莠、蜿蛾ェ瑚ッ<E7919A>**<EFBFBD>?
- Methods謠剰ソー vs. Results荳ュ逧<EFBDAD>渕郤ソ謨ー謐ョ
- 螢ー遘ー逧<EFBDB0>婿豕?vs. 螳樣刔逧<E58894>渕郤ソ蟷ウ陦。諠<EFBDA1><E8ABA0>?
3. **迚ケ谿頑ュ蜀オ**<EFBFBD>?
- 螯よ棡謠仙芦"see protocol"謌?see trial registration"<22><EFBFBD><E6A2A7>ョー荳コ髴€隕∵衍髦<E8A18D>、夜Κ<CE9A><E8A58D>?
- 螯よ棡譏ッ螟壻クュ蠢<EFBDAD><E8A0A2>皮ゥカ<EFBDA9>悟コ碑ッ・譛我クュ蠢<EFBDAD>囂譛コ蛹也ウサ扈?
## 霎灘<E99C8E>譬シ蠑擾シ井ク・譬シJSON<4F>?
{
"assessment": "螳梧紛" | "荳榊ョ梧<EFBDAE>? | "譌<>豕募愛譁ュ",
"evidence": {
"quote": "蜴滓枚蠑慕畑<E68595>?00-300蟄暦シ悟桁蜷ォ蜈ウ髞ョ譁ケ豕墓緒霑ー<E99C91>?,
"location": {
"section": "Methods",
"subsection": "Randomization",
"page": 3,
"paragraph": 2,
"figure": "Figure 1 (CONSORT diagram)"
},
"highlightedKeywords": [
"蜈ウ髞ョ隸?",
"蜈ウ髞ョ隸?"
]
},
"reasoning": "蛻、譁ュ逅<EFBDAD><EFBFBD><EFBFBD>ケ謐ョ蜴滓枚蠑慕畑<E68595>瑚ッ・遐皮ゥ?..",
"confidence": 0.95,
"robAssessment": "Low risk" | "High risk" | "Unclear risk",
"needsExternalVerification": false,
"notes": "蜈カ莉冶ッエ譏趣シ亥庄騾会シ<E4BC9A>"
}
## 豕ィ諢丈コ矩。ケ
1. **荳・譬シ驕オ螳<EFBDB5>ochrane譬<65>**<EFBFBD>壼ョ∝庄蛻、譁ュ荳コ"荳榊ョ梧<EFBDAE>?<3F>御ク崎ヲ∬ソ<E288AC>コ主ョス譚?
2. **蠑慕畑蠢<E79591>。サ蜈キ菴<EFBDB7>**<EFBFBD>壻ク崎ヲ∫ャシ扈溷慍隸?Methods遶<73>闃よ署蛻ー"<22>悟ソ<E6829F>。サ扈吝<E68988>蜈キ菴灘シ慕<EFBDBC>?
3. **鄂ョ菫。蠎ヲ隸壼ョ?*<2A>壼ヲよ棡菫。諱ッ荳肴ク<E882B4><EFBFBD>碁剄菴残onfidence蟷カ譬<EFBDB6>ョーneedsExternalVerification
4. **蛹コ蛻<EFBDBA>"譛ェ蛛<EFBDAA>"蜥?譛ェ謚・蜻?**<EFBFBD>?
- 螯よ棡隶コ譁<EFBDBA><E8AD81>遑ョ隸?no randomization"<22>径ssessment="荳榊ョ梧<EFBDAE>?
- 螯よ棡隶コ譁<EFBDBA>ョ悟<EFBDAE>譛ェ謠仙所<E4BB99>径ssessment="譌<>豕募愛譁ュ"
```
**蜈カ莉<EFBDB6>11荳ェ蟄玲ョオ逧Пrompt讓。譚ソ**<EFBFBD>夂アサ莨シ扈捺桷<EFBFBD><EFBFBD>ケ謐ョCochrane譬<EFBFBD>㊥隹<EFBFBD>紛蛻、譁ュ譬<EFBFBD>
---
### 荳峨€VP謌先悽鬚<E682BD><EFBFBD>
**蝨コ譎ッ<E8AD8E>?00遽<30><E981BD><EFBFBD>、咲ュ?*
| 邇ッ闃<EFBDAF> | Token豸郁€?| 讓。蝙<EFBDA1> | 謌先悽 |
|------|----------|------|------|
| Nougat謠仙叙 | - | 譛ャ蝨ー讓。蝙<EFBDA1> | ツ・0 |
| 12蟄玲ョオ謠仙叙<E4BB99>亥曙讓。蝙具シ?| 12K テ<> 2 = 24K | DeepSeek-V3 + Qwen3-Max | ツ・0.06/遽?|
| 蜀イ遯∝ュ玲ョオ莠コ蟾・螟肴<E89E9F><EFBFBD>?0%<25>?| - | 莠コ蟾・ | 2蛻<32>帖/蟄玲ョオ |
| **100遽<30>€サ謌先<E8AC8C>?* | - | - | **ツ・6 + 莠コ蟾・謌先悽** |
**蟇ケ豈<EFBDB9>**<EFBFBD>?
- 蜈ィ譁<EFBDA8>€谺。諤ァ謠仙叙<E4BB99>堋・10/100遽?
-<>ョオ謠仙叙<E4BB99>堋?/100遽?
- **闃ら怐40%謌先悽 + 蜃<>。ョ邇<EFBDAE>署蜊?*
---
### 蝗帙€VP鬪梧噺譬<E599BA>
| 謖<><E8AC96><EFBFBD> | 逶ョ譬<EFBDAE> | 鬪瑚ッ∵婿豕<E5A9BF> |
|------|------|----------|
| 蟄玲ョオ謠仙叙螳梧紛邇?| 竕?90% | 12蟄玲ョオ驛ス譛臥サ捺棡<E68DBA>磯撼"譌<>豕募愛譁ュ"<22>?|
| 蜿梧ィ。蝙倶ク€閾エ邇<EFBDB4> | 竕?75% | 12蟄玲ョオ荳ュ閾ウ蟆?荳ェ荳€閾?|
| 隸∵紺體セ螳梧紛諤?| 100% | 豈丈クェ蟄玲ョオ驛ス譛牙次譁<E6ACA1>シ慕畑蜥御ス咲ス?|
| 莠コ蟾・螟肴<E89E9F>ク髦溷<E9ABA6> | 竕?30% | 髴€隕∽ココ蟾・莉句<E88E89><EFBFBD>枚迪ョ蜊<EFBDAE><EFBFBD> |
| Nougat謌仙粥邇?| 竕?85% | 闍ア譁<EFBDB1>ョコ譁<EFBDBA><E8AD81>蜉滓署蜿匁ッ比セ<E6AF94> |
| 螟<>炊騾溷コヲ | 竕?3蛻<33>帖/遽?| 莉傘DF蛻ー扈捺棡逧<E6A3A1>€サ譌カ髟?|
---
## <20>嶋 V1.0 髦カ谿オ<E8B0BF>? 蜻ィ<E89CBB><EFBDA8>
### 逶ョ譬<EFBDAE>ョ壻ス<E5A3BB>
- **蜃<>。ョ邇<EFBDAE>岼譬?*<2A>壺翁 92%
- **菫。諱ッ螳梧紛邇?*<2A>壺翁 95%
- **謌先悽鬚<E682BD><EFBFBD>**<2A>壺王 ツ・0.08/遽<>シ域匱閭ス謌先悽莨伜喧<E4BC9C>?
- **莠、莉俶<E88E89><E4BFB6>㊥**<2A>夐ォ倩エィ驥剰セ灘<EFBDBE><E78198>悟ョ梧紛隸∵紺體セ<E9AB94>梧匱閭ス雍ィ驥乗而蛻?
---
### 荳€縲∬エィ驥乗署蜊<E7BDB2>ュ也<EFBDAD>?
#### 1.1 笨?Cochrane譬<65>㊥Prompt蠅槫シコ
**蝨ィMVP蝓コ遑€荳雁「槫<EFBDA2>?*<2A>?
1. **Few-shot蛹サ蟄ヲ譯井セ<E4BA95>**<EFBFBD>域ッ丈クェ蟄玲ョ?-5荳ェ逵溷ョ樊。井セ具シ<E585B7>
```markdown
## 蜿り€<E3828A>。井セ?
莉・荳区<EFBFBD>?荳ェ逵溷ョ朿CT遐皮ゥカ逧<EFBDB6>囂譛コ蛹匁婿豕戊ッ<E6888A>シー譯井セ具シ悟クョ蜉ゥ菴<EFBDA9><EFBFBD>ァ」蛻、譁ュ譬<EFBDAD><EFBFBD>?
### 譯井セ<E4BA95>1<EFBFBD>夐ォ倩エィ驥蹴CT<43><54>EJM, 2023<32>?
**蜴滓枚蠑慕畑**<2A>?
"Randomization was performed with the use of a computer-generated sequence
with stratification according to center and baseline NIHSS score (竕?0 or >10).
Allocation was concealed through a central web-based system (IWRS)."
**隸<>シー扈捺棡**<EFBFBD>壼ョ梧<EFBFBD>?
**逅<>**<EFBFBD>?
1. 笨?譏守。ョ逧<EFBDAE>コ丞<EFBDBA>逕滓<E98095>譁ケ豕包シ<E58C85>omputer-generated<65>?
2. 笨?蛻<>アる囂譛コ蛹厄シ域署鬮伜ケウ陦。諤ァ<E8ABA4><EFBDA7>
3. 笨?荳ュ蠢<EFBDAD><E8A0A2>驟埼嚼阯擾シ<E693BE>WRS<52>?
4. 笨?蝓コ郤ソTable 1譏セ遉コ荳、扈<EFBDA4>ケウ陦。濶ッ螂ス<E89E82><EFBDBD>>0.05<EFBFBD>?
**RoB 2.0蛻、譁ュ**<2A>哭ow risk of bias
---
### 譯井セ<E4BA95>2<EFBFBD>夊エィ驥丈ク崎カウ<EFBDB6>域汾譛溷<E8AD9B>? 2020<32>?
**蜴滓枚蠑慕畑**<2A>?
"Patients were randomly assigned to receive either drug A or placebo
in a 1:1 ratio. Randomization was performed by the study coordinator."
**隸<>シー扈捺棡**<EFBFBD>壻ク榊ョ梧紛
**逅<>**<EFBFBD>?
1. 笶?譛ェ隸エ譏主コ丞<EFBDBA>逕滓<E98095>譁ケ豕包シ井サ<E4BA95>ッエ"髫乗惻"<22>?
2. 笶?逕ア遐皮ゥカ蜊剰ー<E589B0>遭謇ァ陦碁囂譛コ蛹厄シ域裏蛻<E8A38F><E89BBB>髫占酪<E58DA0><E985AA>
3.<><E7AC9E><EFBFBD> Table 1譏セ遉コ蟇ケ辣ァ扈<EFBDA7>ケエ鮴<EFBDB4>¥螟ァ<E89E9F><EFBDA7>66.2 vs 62.1, P=0.04<EFBFBD>?
**RoB 2.0蛻、譁ュ**<2A>唏igh risk of bias
**髣ョ鬚<EFBDAE>**<EFBFBD>壼庄閭ス蟄伜惠騾画叫蛛丞€?
---
### 譯井セ<E4BA95>3<EFBFBD>夊セケ逡梧ュ蜀オ<E89C80><EFBDB5>ancet, 2021<32>?
**蜴滓枚蠑慕畑**<2A>?
"Randomization was done with sequentially numbered, opaque, sealed envelopes
prepared by an independent statistician not otherwise involved in the trial."
**隸<>シー扈捺棡**<EFBFBD>壼ョ梧<EFBFBD>?
**逅<>**<EFBFBD>?
1. 笨?陌ス髱樔クュ蠢<EFBDAD>囂譛コ蛹厄シ御ス<E5BEA1>スソ逕ィ蟇<EFBDA8>ー∽ソ。蟆?
2. 笨?迢ャ遶狗ャャ荳画婿蜃<E5A9BF><EFBFBD>シ育サ溯ョ。蟶茨シ<E88CA8>
3. 笨?荳埼€<C280><E4B89E><EFBFBD>paque<75>我ク泌ッ<E6B38C><EFBFBD><EFBFBD>ealed<65>?
4. 笨?蝓コ郤ソ蟷ウ陦。濶ッ螂ス
**RoB 2.0蛻、譁ュ**<2A>哭ow risk of bias
**隸エ譏<EFBDB4>**<EFBFBD>夂ャヲ蜷<EFBFBD>ochrane譬<EFBFBD><EFBFBD>亥ッ<EFBFBD>ー∽ソ。蟆?+ 迢ャ遶句㊥螟<E38AA5>庄謗・蜿暦シ<E69AA6>
---
邇ー蝨ィ隸キ菴<EFBFBD>蜿り€<EFBFBD>サ・荳頑。井セ狗噪隸<EFBFBD>シー譁ケ蠑擾シ悟<EFBFBD>譫仙ス灘燕隶コ譁?..
```
2. **Chain of Thought謗ィ逅<EFBDA8>**
```markdown
## 霎灘<E99C8E>譬シ蠑擾シ亥「槫シコ迚茨シ?
{
"assessment": "螳梧紛",
// 箝?譁ー蠅橸シ夐€先ュ・謗ィ逅<EFBDA8>ソ<EFBFBD><EFBFBD>
"reasoning_steps": {
"step1_sequenceGeneration": {
"finding": "隶コ譁<EFBDBA>署蛻ー'computer-generated random sequence'",
"evaluation": "貊。雜ウ蠎丞<E8A08E>逕滓<E98095>譁ケ豕戊ヲ∵ア<E288B5> 笨?
},
"step2_allocationConcealment": {
"finding": "菴ソ逕ィ'central web-based system (IWRS)'",
"evaluation": "貊。雜ウ蛻<EFBDB3><E89BBB>髫占酪隕∵ア<E288B5> 笨?
},
"step3_baselineBalance": {
"finding": "Table 1譏セ遉コ荳サ隕∫音蠕 ̄>0.05",
"evaluation": "譌<>譏取仞騾画叫蛛丞€夊ッ∵<EFBDAF>?笨?
},
"step4_finalJudgment": {
"conclusion": "荳蛾。ケ譬<EFBDB9>㊥蝮<E38AA5>サ。雜ウ<E99B9C>悟愛譁ュ荳?螳梧紛'",
"confidence": 0.95
}
},
"evidence": { ... },
"robAssessment": "Low risk"
}
```
---
#### 1.2 笨?蜈ィ譁<EFBDA8>コ、蜿蛾ェ瑚ッ<E7919A>シ磯亟驕玲シ擾シ?
**蝨ィ蛻<EFBDA8>ョオ謠仙叙蜷趣シ悟「槫刈蜈ィ譁<EFBDA8>ェ瑚ッ∫識闃?*<2A>?
```typescript
// 髦カ谿オ1<EFBDB5><EFBFBD>谿オ謠仙叙<E4BB99>亥キイ螳梧<E89EB3><E6A2A7><EFBFBD>
const segmentedResults = await extractAllFieldsSegmented(sections);
// 箝?髦カ谿オ2<EFBDB5><EFBFBD><EFBFBD>コ、蜿蛾ェ瑚ッ<E7919A>シ域眠蠅橸シ?
async function crossValidateWithFullText(
segmentedResults: FieldResult[],
fullTextMarkdown: string
): Promise<ValidationReport> {
// 鬪瑚ッ<E7919A>1<EFBFBD>壽」€譟・譏ッ蜷ヲ譛蛾貍丈ソ。諱ッ
const missingInfoChecks = await Promise.all([
checkForMissingInfo('髫乗惻蛹匁婿豕?, fullTextMarkdown, segmentedResults),
checkForMissingInfo('<EFBFBD>', fullTextMarkdown, segmentedResults),
// ... 蜈カ莉門<E88E89>髞ョ蟄玲ョオ
]);
// 鬪瑚ッ<E7919A>2<EFBFBD>壽」€譟・譏ッ蜷ヲ譛臥泝逶セ菫。諱ッ
const contradictionChecks = await checkContradictions(
segmentedResults,
fullTextMarkdown
);
// 鬪瑚ッ<E7919A>3<EFBFBD>壽」€譟・譏ッ蜷ヲ謠仙芦陦・蜈<EFBDA5>攝譁?
const supplementaryCheck = checkSupplementaryMaterial(fullTextMarkdown);
return {
missingInfoAlerts: missingInfoChecks.filter(c => c.hasIssue),
contradictions: contradictionChecks,
needsSupplementary: supplementaryCheck.needsExternal,
overallCompleteness: calculateCompleteness(...)
};
}
// 遉コ萓具シ壽」€譟・驕玲シ丈ソ。諱?
async function checkForMissingInfo(
field: string,
fullText: string,
extractedResult: FieldResult
): Promise<ValidationAlert> {
// 螯よ棡蟾イ扈丞愛螳壻ク?螳梧紛"<22>瑚キウ霑?
if (extractedResult.assessment === '') {
return { field, hasIssue: false };
}
// 蝨ィ蜈ィ譁<EFBDA8>クュ謳懃エ「蜈ウ髞ョ隸?
const keywords = FIELD_KEYWORDS[field]; // 鬚<>ョ壻ケ牙<EFBDB9>髞ョ隸崎。?
const foundKeywords = keywords.filter(kw =>
fullText.toLowerCase().includes(kw.toLowerCase())
);
// 螯よ棡蜈ィ譁<EFBDA8>クュ譛牙<E8AD9B>髞ョ隸搾シ御ス<E5BEA1>署蜿也サ捺棡譏ッ"譌<>豕募愛譁ュ"
if (foundKeywords.length > 0 && extractedResult.assessment === '<EFBFBD>') {
return {
field,
hasIssue: true,
severity: 'warning',
message: `蜈ィ譁<EFBDA8>クュ蜿醍鴫蜈ウ髞ョ隸阪€?{foundKeywords.join(', ')}縲托シ<E68998>
<>ュ玲ョ?${field}"蛻、譁ュ荳?譌<>豕募愛譁ュ"<22>悟庄閭ス蟄伜惠驕玲シ汁,
suggestedAction: 'targeted_re_extraction',
keywords: foundKeywords
};
}
return { field, hasIssue: false };
}
```
**謨域棡**<EFBFBD>?
- 驕玲シ丈ソ。諱ッ譽€蜃コ邇<EFBDBA>シ?% 竊?80%
-<>。ョ邇<EFBDAE>署蜊<E7BDB2><EFBFBD>85% 竊?92%
---
#### 1.3 笨?蛹サ蟄ヲ騾サ霎題ァ<E9A18C><EFBDA7>蠑墓梼
**閾ェ蜉ィ譽€譟・蟶ク隗∫噪騾サ霎鷹漠隸ッ**<EFBFBD>?
```typescript
const MEDICAL_LOGIC_RULES = [
{
id: 'rule_001',
name: 'RCT蠢<54>。サ譛蛾囂譛コ蛹<EFBDBA>',
check: (data) => {
const isRCT = data..toLowerCase().includes('rct') ||
data..includes('髫乗惻');
const hasRandomization = data.婿?!== '譌<>豕募愛譁ュ';
return !isRCT || hasRandomization;
},
severity: 'error',
message: '遐皮ゥカ螢ー遘ー譏ッRCT菴<54>悴謇セ蛻ー髫乗惻蛹匁婿豕墓緒霑?,
action: 'flag_for_urgent_review'
},
{
id: 'rule_002',
name: '<EFBFBD><EFBFBD>',
check: (data) => {
const isDoubleBlind = data.遐皮ゥカ隶セ隶。.includes('') ||
data.遐皮ゥカ隶セ隶。.includes('double-blind');
const hasBlinding = data.逶イ豕<EFBDB2> !== '<EFBFBD>' &&
data.逶イ豕<EFBDB2> !== '<EFBFBD>?;
return !isDoubleBlind || hasBlinding;
},
severity: 'error',
message: '螢ー遘ー蜿檎峇菴<E5B387>峇豕墓緒霑ー荳榊ョ梧紛',
action: 'flag_for_review'
},
{
id: 'rule_003',
name: '譬キ譛ャ驥丈ク主渕郤ソ謨ー謐ョ荳€閾エ諤?,
check: (data) => {
const planned = extractNumber(data.譬キ譛ャ驥剰ョ。邂?;
const enrolled = extractNumber(data.遐皮ゥカ莠コ鄒、);
if (!planned || !enrolled) return true; // 譌<>豕墓署蜿門<E89CBF>霍ウ霑?
const deviation = Math.abs(planned - enrolled) / planned;
return deviation < 0.3; // 蛛丞キョ<30%
},
severity: 'warning',
message: '<EFBFBD><EFBFBD><EFBFBD>(>30%)',
action: 'add_note'
},
{
id: 'rule_004',
name: 'ソ€<EFBFBD><EFBFBD>?,
check: (data) => {
const hasImbalance = data.ソ€?includes('荳榊ケウ陦?) ||
data.蝓コ郤ソ蜿ッ豈疲€?includes('P<0.05');
const hasAdjustment = data.扈灘ア€<C280><E8AC96><EFBFBD>.includes('<EFBFBD>') ||
data.扈灘ア€<C280><E8AC96><EFBFBD>.includes('adjusted');
return !hasImbalance || hasAdjustment;
},
severity: 'warning',
message: '蝓コ郤ソ蟄伜惠荳榊ケウ陦<EFBFBD>悴隗<EFBFBD>紛蛻<EFBFBD>',
action: 'add_note'
},
{
id: 'rule_005',
name: 'ITT蛻<EFBFBD>梵螳梧紛諤?,
check: (data) => {
const hasDropout = extractNumber(data.? > 0;
const hasITT = data.?toLowerCase().includes('itt') ||
data.?includes('intention-to-treat');
return !hasDropout || hasITT;
},
severity: 'warning',
message: '蟄伜惠螟ア隶ソ菴<EFBDBF>悴譏守。ョITT蛻<54>梵',
action: 'flag_for_review'
}
];
// 閾ェ蜉ィ鬪瑚ッ<E7919A>
function validateMedicalLogic(extractedData: ExtractionResult): LogicReport {
const violations = [];
for (const rule of MEDICAL_LOGIC_RULES) {
try {
const passed = rule.check(extractedData);
if (!passed) {
violations.push({
ruleId: rule.id,
ruleName: rule.name,
severity: rule.severity,
message: rule.message,
action: rule.action
});
}
} catch (error) {
console.error(`<EFBFBD><EFBFBD>${rule.id}謇ァ陦悟、ア雍・:`, error);
}
}
return {
totalRules: MEDICAL_LOGIC_RULES.length,
passedRules: MEDICAL_LOGIC_RULES.length - violations.length,
violations,
overallValidity: violations.filter(v => v.severity === 'error').length === 0
};
}
```
---
#### 1.4 笨?螳梧紛隸∵紺體セ<E9AB94>亥「槫シコ迚茨シ<E88CA8>
**V1.0隕∵ア<EFBFBD>**<EFBFBD>壻ク堺サ<EFBFBD>怏蠑慕畑<EFBFBD>瑚ソ倩ヲ∵怏蜈キ菴灘ョ壻ス榊柱鬮倅コ?
```typescript
interface EnhancedEvidence {
field: string;
assessment: string;
evidence: {
// 荳サ隕∬ッ∵紺
primaryQuote: {
text: string; // 蜴滓枚蠑慕畑
location: {
section: string; // "Methods"
subsection?: string; // "Randomization"
page: number; // 3
paragraph: number; // 2
lineRange?: [number, number]; // [45, 52]
};
highlightedText: string; // HTML鬮倅コョ迚域悽
keywords: string[]; // 蜈ウ髞ョ隸榊<E99AB8>陦?
};
// 謾ッ謖∬ッ∵紺<E288B5>亥庄騾会シ<E4BC9A>
supportingQuotes?: Array<{
text: string;
location: any;
relation: string; // "confirms" | "contradicts" | "complements"
}>;
// 陦ィ譬シ/蝗セ迚<EFBDBE>ッ∵紺
tableEvidence?: {
tableName: string; // "Table 1"
relevantCells: string[]; // 逶ク蜈ウ蜊募<E89C8A>譬シ蜀<EFBDBC>ョ?
interpretation: string; // 蟇ケ陦ィ譬シ逧<EFBDBC>ァ」隸サ
};
figureEvidence?: {
figureName: string; // "Figure 1"
caption: string;
relevantInfo: string;
};
};
// 箝?譁ー蠅橸シ壼ョ梧紛謗ィ逅<EFBDA8>
reasoningChain: {
cochraneCriteria: string[]; // 蠎皮畑逧Гochrane譬<65>
keyFindings: string[]; // 蜈ウ髞ョ蜿醍鴫
assessment: string; // 譛€扈亥愛譁?
confidence: number;
uncertainties?: string[]; // 荳咲。ョ螳壼屏邏?
};
// 箝?譁ー蠅橸シ壼庄霑ス貅ッ諤ァ蜈<EFBDA7>焚謐ョ
metadata: {
extractionTimestamp: string;
modelUsed: string;
promptVersion: string;
processingTime: number;
};
}
```
---
### 莠後€〃1.0謌先悽鬚<EFBFBD><EFBFBD>
**蝨コ譎ッ<E8AD8E>?00遽<30><E981BD><EFBFBD>、咲ュ?*
| 邇ッ闃<EFBDAF> | Token豸郁€?| 讓。蝙<EFBDA1> | 謌先悽 |
|------|----------|------|------|
| 12蟄玲ョオ蛻<EFBDB5>ョオ謠仙叙<E4BB99>亥曙讓。蝙具シ?| 12K | DeepSeek-V3 + Qwen3-Max | ツ・0.06/遽?|
| 蜈ィ譁<EFBDA8>コ、蜿蛾ェ瑚ッ<E7919A> | 3K | DeepSeek-V3 | ツ・0.003/遽?|
| 蜈ウ髞ョ蟄玲ョオ陦・蜈<EFBDA5>署蜿厄シ?0%<25>?| 2K | Qwen3-Max | ツ・0.016/遽<>シ井サ?0%譁<><EFBFBD>?|
| **100遽<30>€サ謌先<E8AC8C>?* | - | - | **ツ・7.9** |
**雍ィ驥乗署蜊<E7BDB2>**<EFBFBD>壼㊥遑ョ邇<EFBFBD> 85% 竊?92%
**謌先悽蠅槫刈**<EFBFBD>堋? 竊?ツ・8<EFBDA5>?33%<25>御ス<E5BEA1>エィ驥乗仞闡玲署蜊<E7BDB2>シ?
---
### 荳峨€〃1.0鬪梧噺譬<EFBFBD>
| 謖<><E8AC96><EFBFBD> | 逶ョ譬<EFBDAE> | 鬪瑚ッ∵婿豕<E5A9BF> |
|------|------|----------|
| 蜃<>。ョ邇<EFBDAE>シ井ココ蟾・謚ス譟・<E8AD9F>?| 竕?92% | 髫乗惻謚ス譟・50遽<30>シ御ク灘ョカ隸<EFBDB6>シー |
| 菫。諱ッ螳梧紛邇?| 竕?95% | 12蟄玲ョオ蝮<EFBDB5>怏譛画譜扈捺棡 |
| 隸∵紺體セ螳梧紛諤?| 100% | 豈丈クェ蟄玲ョオ譛芽ッヲ扈<EFBDA6>ッ∵紺蜥梧耳逅<E880B3><E98085>?|
| 驕玲シ丈ソ。諱ッ譽€蜃コ邇<EFBDBA> | 竕?80% | 莠、蜿蛾ェ瑚ッ∝書邇ー逧<EFBDB0>貍乗ッ比セ?|
| 騾サ霎題ァ<E9A18C><EFBDA7><EFBFBD>尠邇?| 竕?80% | 隗<><E99A97>蠑墓梼譽€譟・騾夊ソ<E5A48A><EFBDBF>?|
| 莠コ蟾・螟肴<E89E9F>ク髦溷<E9ABA6> | 竕?25% | 髴€隕∽ココ蟾・莉句<E88E89><EFBFBD>枚迪ョ蜊<EFBDAE><EFBFBD> |
---
## <20>醇 V2.0 髦カ谿オ<E8B0BF>? 蜻ィ<E89CBB><EFBDA8>
### 逶ョ譬<EFBDAE>ョ壻ス<E5A3BB>
- **蜃<>。ョ邇<EFBDAE>岼譬?*<2A>壺翁 96%<25>亥現蟄ヲ郤ァ譬<EFBDA7><EFBFBD>?
- **莠コ譛コ荳€閾エ諤?*<2A>咾ohen's Kappa 竕?0.90
- **謌先悽鬚<E682BD><EFBFBD>**<2A>壽潔髴€驟咲スョ<EFBDBD>郁エィ驥丈シ伜<EFBDBC><E4BC9C><EFBFBD>
- **莠、莉俶<E88E89><E4BFB6>㊥**<2A><EFBFBD>蜉ィ蛹冶エィ驥丞ョ。隶。<E99AB6>檎ャヲ蜷<EFBDA6>ochrane蜿題。ィ譬<EFBDA8>
---
### 荳€縲∝現蟄ヲ郤ァ雍ィ驥丈ソ晞囿
#### 1.1 笨?荳画ィ。蝙倶サイ陬∵惻蛻?
**蜈ウ髞ョ蟄玲ョオ蜀イ遯∵慮<E288B5>悟星逕ィ隨ャ荳画婿莉イ陬?*<2A>?
```typescript
async function threeModelArbitration(
conflict: FieldConflict,
relevantContent: string
) {
// 隨ャ荳画婿莉イ陬<EFBDB2>シ咾laude-4.5<EFBFBD>磯ォ倩エィ驥乗ィ。蝙具シ?
const arbitrationPrompt = `
<EFBFBD>譏ッCochrane邉サ扈溯ッ<EFBFBD>サキ荳灘ョカ<EFBFBD>檎鴫譛我ク、荳ェAI讓。蝙句ッケ蜷御ク€蟄玲ョオ逧<EFBFBD>愛譁ュ蟄伜惠蜀イ遯<EFBFBD><EFBFBD>
隸キ菴<EFBFBD>莉主セェ隸∝現蟄ヲ逧<EFBFBD>ァ貞コヲ扈吝<EFBFBD><EFBFBD>ィ∝愛譁ュ縲?
縲仙<EFBFBD>遯∝ュ玲ョオ縲托シ<EFBFBD>${conflict.field}
縲先ィ。蝙帰蛻、譁ュ縲托シ<EFBFBD>${conflict.modelA.assessment}
隸∵紺<EFBFBD>?{conflict.modelA.evidence.quote}
<EFBFBD><EFBFBD>?{conflict.modelA.reasoning}
鄂ョ菫。蠎ヲ<EFBFBD><EFBFBD>${conflict.modelA.confidence}
縲先ィ。蝙毅蛻、譁ュ縲托シ<EFBFBD>${conflict.modelB.assessment}
隸∵紺<EFBFBD>?{conflict.modelB.evidence.quote}
<EFBFBD><EFBFBD>?{conflict.modelB.reasoning}
鄂ョ菫。蠎ヲ<EFBFBD><EFBFBD>${conflict.modelB.confidence}
縲仙次譁<EFBFBD>€托シ<EFBFBD>
${relevantContent}
縲蝉サイ陬∽ササ蜉。縲托シ<EFBFBD>
1. 譬ケ謐ョCochrane RoB 2.0譬<EFBFBD><EFBFBD>檎サ吝<EFBFBD><EFBFBD><EFBFBD>愛譁?
2. 蛻<>梵荳、荳ェ讓。蝙狗噪蛻、譁ュ<E8AD81>梧欠蜃コ蜩ェ荳ェ譖エ蜃<EFBDB4>。ョ<EFBDA1><EFBFBD>驛ス荳榊㊥遑ョ<E98191><EFBDAE>
3. 蠑慕畑Cochrane謇句<E8AC87>逶ク蜈ウ譚。谺セ謾ッ謖∽ス<E288BD><EFBFBD>愛譁ュ
4. 螯よ棡莉堺ク咲。ョ螳夲シ梧<EFBDBC>遑ョ謖<EFBDAE><E8AC96>€隕∽ココ蟾・螟肴<E89E9F>ク逧<EFBDB8>次蝗<E6ACA1>
縲占セ灘<EFBFBD>譬シ蠑上€托シ哽SON
`;
const arbitrationResult = await llmService.chat(
'claude-4.5',
arbitrationPrompt
);
return {
field: conflict.field,
arbitrator: 'claude-4.5',
finalJudgment: arbitrationResult.assessment,
analysis: {
modelAAccuracy: arbitrationResult.modelA_correct,
modelBAccuracy: arbitrationResult.modelB_correct,
correctModel: arbitrationResult.agree_with,
cochraneCitation: arbitrationResult.cochrane_reference
},
confidence: arbitrationResult.confidence,
stillNeedsHumanReview: arbitrationResult.confidence < 0.9
};
}
```
**謌先悽謗ァ蛻カ**<EFBFBD>?
-<>惠蜈ウ髞ョ蟄玲ョオ蜀イ遯∵慮蜷ッ逕ィ<E98095>磯「<E7A3AF>ョ。10-15%<25>?
- 蜊墓ャ。莉イ陬∵<E999AC>譛ャ<E8AD9B>堋?.02<EFBFBD><EFBFBD>laude-4.5<EFBFBD>?
- 100遽<30>€サ鬚晏、匁<EFBDA4>譛ャ<E8AD9B>堋・2-3
---
#### 1.2 笨?HITL譎コ閭ス蛻<EFBDBD><EFBFBD>
**蝓コ莠手ァ<E6898B><EFBDA7><EFBFBD>匱閭ス莨伜<E88EA8>郤ァ謗貞コ<E8B29E>**<EFBFBD>?
```typescript
function intelligentTriage(
extractionResult: ExtractionResult,
validationReport: ValidationReport,
arbitrationResults?: ArbitrationResult[]
): TriageDecision {
let priority = 0;
let needReview = false;
const reasons = [];
// 隗<><E99A97>1<EFBFBD>壻ク画ィ。蝙倶サ堺ク堺ク€閾?竊?譛€鬮倅シ伜<EFBDBC>郤ァ
if (arbitrationResults?.some(a => a.stillNeedsHumanReview)) {
priority = 100;
needReview = true;
reasons.push('荳画ィ。蝙倶サイ陬∝錘莉榊ュ伜惠荳咲。ョ螳壽€?);
}
// 隗<><E99A97>2<EFBFBD><EFBFBD>髞ョ蟄玲ョオ雍ィ驥城琉鬚?竊?鬮倅シ伜<EFBDBC>郤ァ
const criticalIssues = validationReport.violations.filter(v =>
v.severity === 'error' &&
FIELD_IMPORTANCE.critical.includes(v.field)
);
if (criticalIssues.length > 0) {
priority = Math.max(priority, 90);
needReview = true;
reasons.push(`蜈ウ髞ョ蟄玲ョオ蟄伜惠雍ィ驥城琉鬚<E79089>: ${criticalIssues.map(i => i.field).join(', ')}`);
}
// 隗<><E99A97>3<EFBFBD>啌CT遐皮ゥカ 竊?荳ュ遲我シ伜<EFBDBC>郤ァ<E983A4>郁エィ驥剰ヲ∵アるォ假シ<E58187>
if (extractionResult.遐皮ゥカ隶セ隶。.includes('RCT')) {
priority = Math.max(priority, 70);
// RCT螯よ棡鄂ョ菫。蠎ヲ菴取燕髴€隕∝、肴<EFBDA4>?
if (extractionResult.overallConfidence < 0.9) {
needReview = true;
reasons.push('RCT遐皮ゥカ菴<EFBFBD><EFBFBD>0.9');
}
}
// 隗<><E99A97>4<EFBFBD><EFBFBD>髞ョ扈灘ア€<C280><E8AC96><EFBFBD>シ域ュサ莠。邇<EFBDA1>シ俄<EFBDBC> 鬮倅シ伜<EFBDBC>郤ァ
if (extractionResult.扈灘ア€<C280><E8AC96><EFBFBD>.includes('') ||
extractionResult.扈灘ア€<C280><E8AC96><EFBFBD>.includes('mortality')) {
priority = Math.max(priority, 80);
if (extractionResult.扈捺棡螳梧紛諤?!== '') {
needReview = true;
reasons.push('€<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>');
}
}
// 隗<><E99A97>5<EFBFBD>夐ォ倡スョ菫。蠎?+ 譌<>蜀イ遯?竊?閾ェ蜉ィ騾夊ソ<E5A48A>
if (extractionResult.overallConfidence > 0.95 &&
validationReport.violations.length === 0 &&
!arbitrationResults) {
priority = 10;
needReview = false;
reasons.push('€<EFBFBD>');
}
// 隗<><E99A97>6<EFBFBD>壼書陦ィ蝨ィ鬘カ郤ァ譛溷<E8AD9B> 竊?髯堺ス主、肴<EFBDA4>ク莨伜<E88EA8>郤?
const topJournals = ['NEJM', 'Lancet', 'JAMA', 'BMJ'];
if (topJournals.some(j => extractionResult.metadata.journal?.includes(j))) {
priority = Math.max(0, priority - 20);
reasons.push('<EFBFBD><EFBFBD>婿€<EFBFBD><EFBFBD>');
}
return {
priority,
needReview,
reasons,
estimatedReviewTime: estimateReviewTime(extractionResult, needReview),
reviewDeadline: calculateDeadline(priority)
};
}
```
---
#### 1.3 笨?閾ェ蜉ィ雍ィ驥丞ョ。隶。
**螳壽悄謇ケ驥乗歓譟・<E8AD9F>?0%<25>会シ瑚<EFBDBC>蜉ィ逕滓<E98095>雍ィ驥乗冠蜻<E586A0>**<EFBFBD>?
```typescript
// 豈丞捉閾ェ蜉ィ螳。隶。
async function weeklyQualityAudit(
startDate: Date,
endDate: Date
): Promise<QualityAuditReport> {
// 1. 闔キ蜿匁悽蜻ィ謇€譛画署蜿也サ捺<EFBDBB>?
const weeklyExtractions = await db.fulltextScreeningResults.findMany({
where: {
createdAt: { gte: startDate, lte: endDate }
}
});
// 2. 髫乗惻謚ス譬キ10%
const sampleSize = Math.ceil(weeklyExtractions.length * 0.1);
const sample = randomSample(weeklyExtractions, sampleSize);
// 3. 莠コ蟾・螟肴<E89E9F>ク譬キ譛ャ
const humanReviews = await requestHumanReview(sample);
// 4. 隶。邂苓エィ驥乗欠譬<E6ACA0>
const metrics = {
<EFBFBD>? calculateAccuracy(sample, humanReviews),
€? calculateCohenKappa(sample, humanReviews),
<EFBFBD><EFBFBD>: calculateFalsePositiveRate(sample, humanReviews),
<EFBFBD><EFBFBD>: calculateFalseNegativeRate(sample, humanReviews),
// 蛻<>ュ玲ョオ蜃<EFBDB5>。ョ邇<EFBDAE>
<EFBFBD>? FIELD_LIST.map(field => ({
field,
accuracy: calculateFieldAccuracy(field, sample, humanReviews)
}))
};
// 5. 讓。蝙区€ァ閭ス蟇ケ豈<EFBDB9>
const modelPerformance = {
'deepseek-v3': analyzeModelPerformance('deepseek-v3', sample, humanReviews),
'qwen-max': analyzeModelPerformance('qwen-max', sample, humanReviews),
'claude-4.5': analyzeModelPerformance('claude-4.5', sample, humanReviews)
};
// 6. 髣ョ鬚伜<E9AC9A><EFBFBD>
const issues = identifyCommonIssues(sample, humanReviews);
// 7. 謾ケ霑帛サコ隶ョ
const recommendations = generateRecommendations(metrics, issues);
return {
period: { start: startDate, end: endDate },
totalExtractions: weeklyExtractions.length,
sampledExtractions: sampleSize,
metrics,
modelPerformance,
issues,
recommendations,
generatedAt: new Date()
};
}
// 閾ェ蜉ィ隸<EFBDA8>悪蟶ク隗<EFBDB8>琉鬚<E79089>
function identifyCommonIssues(
sample: Extraction[],
humanReviews: HumanReview[]
): Issue[] {
const issues = [];
// 髣ョ鬚<EFBDAE>1<EFBFBD>壽汾荳ェ蟄玲ョオ髞呵ッッ邇<EFBDAF>ォ?
for (const field of FIELD_LIST) {
const fieldErrors = countFieldErrors(field, sample, humanReviews);
if (fieldErrors / sample.length > 0.15) { // 髞呵ッッ邇?15%
issues.push({
type: 'high_field_error_rate',
field,
errorRate: fieldErrors / sample.length,
examples: getErrorExamples(field, sample, humanReviews, 3),
recommendation: `莨伜喧蟄玲ョオ"${field}"逧Пrompt讓。譚ソ謌芳ew-shot譯井セ義
});
}
}
// 髣ョ鬚<EFBDAE>2<EFBFBD>夂音螳夂アサ蝙狗<E89D99>皮ゥカ髞呵ッッ邇<EFBDAF>ォ?
const studyTypeErrors = analyzeByStudyType(sample, humanReviews);
for (const [studyType, errorRate] of Object.entries(studyTypeErrors)) {
if (errorRate > 0.15) {
issues.push({
type: 'high_study_type_error_rate',
studyType,
errorRate,
recommendation: `"${studyType}"<EFBFBD>Ёew-shot譯井セ義
});
}
}
// 髣ョ鬚<EFBDAE>3<EFBFBD>夂音螳壽ィ。蝙玖。ィ邇ー蟾ョ
const modelErrors = analyzeByModel(sample, humanReviews);
for (const [model, errorRate] of Object.entries(modelErrors)) {
if (errorRate > 0.15) {
issues.push({
type: 'model_underperformance',
model,
errorRate,
recommendation: `<EFBFBD>剔隹<EFBFBD>紛讓。蝙<EFBFBD>"${model}"逧<>盾謨ー謌匁峩謐「讓。蝙義
});
}
}
return issues;
}
```
**雍ィ驥乗冠陦ィ遉コ萓<EFBDBA>**<EFBFBD>?
```markdown
# 蜈ィ譁<EFBDA8>、咲ュ幄エィ驥丞ョ。隶。謚・蜻<EFBDA5>
**螳。隶。蜻ィ譛<EFBDA8>**<EFBFBD>?025-11-15 閾?2025-11-22
**諤サ謠仙叙謨ー**<EFBFBD>?48遽?
**謚ス譬キ謨?*<2A>?5遽<35><EFBFBD>10.1%<25>?
## 謨エ菴楢エィ驥乗欠譬<E6ACA0>
| 謖<><E8AC96><EFBFBD> | 譛ャ蜻ィ | 荳雁捉 | 雜句漢 |
|------|------|------|------|
| 蜃<>。ョ邇?| 94.7% | 93.2% | 竊?+1.5% |
| Cohen's Kappa | 0.89 | 0.87 | 竊?+0.02 |
| 蛛<>亠諤ァ邇<EFBDA7> | 3.1% | 4.2% | 竊?-1.1% |
| 蛛<>亢諤ァ邇<EFBDA7> | 2.2% | 2.6% | 竊?-0.4% |
## 蛻<>ュ玲ョオ蜃<EFBDB5>。ョ邇<EFBDAE>
| 蟄玲ョオ | 蜃<>。ョ邇?| 迥カ諤?|
|------|--------|------|
| 遐皮ゥカ隶セ隶。 | 100% | 笨?莨倡ァ€ |
| 髫乗惻蛹匁婿豕?| 93.3% | 笨?濶ッ螂ス |
| 逶イ豕<EFBDB2> | 86.7% | 笞<><E7AC9E><EFBFBD>€謾ケ霑<EFBDB9> |
| 蝓コ郤ソ蜿ッ豈疲€?| 100% | 笨?莨倡ァ€ |
| 扈捺棡螳梧紛諤?| 93.3% | 笨?濶ッ螂ス |
| ... | ... | ... |
## 讓。蝙区€ァ閭ス蟇ケ豈<EFBDB9>
| 讓。蝙<EFBDA1> | 蜃<>。ョ邇?| 蟷ウ蝮<EFBDB3>スョ菫。蠎?| 螟<>炊譌カ髣エ |
|------|--------|-----------|----------|
| DeepSeek-V3 | 92.1% | 0.87 | 45s |
| Qwen3-Max | 94.5% | 0.91 | 38s |
| Claude-4.5<EFBFBD>井サイ陬<EFBFBD><EFBFBD> | 97.2% | 0.94 | 62s |
## 蜿醍鴫逧<E9B4AB>琉鬚?
1. **蟄玲ョオ"逶イ豕<EFBDB2>"髞呵ッッ邇<EFBDAF>¥鬮假シ<E58187>13.3%<25>?*
- 蟶ク隗<EFBDB8>漠隸ッ<E99AB8>壼ー<E5A3BC>"蜊慕峇"隸ッ蛻、荳?螳梧紛"
- 蜴溷屏蛻<E5B18F><EFBFBD>啀rompt譛ェ譏守。ョ蛹コ蛻<EFBDBA>黒逶?蜿檎峇逧<E5B387>エィ驥丞キョ蠑?
- 謾ケ霑帛サコ隶ョ<E99AB6>壽峩譁ーPrompt<70>悟「槫<EFBDA2>?蜊慕峇騾壼クク荳崎カウ莉・髦イ豁「譽€豬句¥蛟?逧<>ッエ譏?
2. **髦溷<E9ABA6>遐皮ゥカ謠仙叙蜃<E58F99>。ョ邇<EFBDAE>ス惹コ山CT<43>?9% vs 96%<25>?*
- 蜴溷屏蛻<E5B18F><EFBFBD>夐弌蛻礼<E89BBB>皮ゥカ逧<EFBDB6>婿豕募ュヲ謠剰ソー譖エ轣オ豢サ<E8B1A2><EFBFBD><E6A2A7>㊥蛹也ィ句コヲ菴?
- 謾ケ霑帛サコ隶ョ<E99AB6>壼「槫<EFBDA2>?荳ェ髦溷<E9ABA6>遐皮ゥカ逧Ёew-shot譯井セ<E4BA95>
## 謾ケ霑帛サコ隶ョ
1. 笨?遶句叉謇ァ陦鯉シ壽峩譁?逶イ豕<EFBDB2>"蟄玲ョオPrompt讓。譚ソ
2. 笞?譛ャ蜻ィ蜀<EFBDA8>シ壼「槫刈髦溷<E9ABA6>遐皮ゥカFew-shot譯井セ句コ?
3. <20>套 荳句捉<E58FA5>夐㍾譁ー隸<EFBDB0>シ?逶イ豕<EFBDB2>"蟄玲ョオ蜃<EFBDB5>。ョ邇?
## 荳句捉逶ョ譬<EFBDAE>
-<>。ョ邇<EFBDAE>シ壺<EFBDBC>?95%
- Cohen's Kappa<70>壺翁 0.90
- "逶イ豕<EFBDB2>"蟄玲ョオ蜃<EFBDB5>。ョ邇<EFBDAE>シ壺<EFBDBC>?93%
```
---
#### 1.4 笨?Prompt迚域悽邂。逅<EFBDA1>
**Git邂。逅<EFBDA1>署遉コ隸肴ィ。譚ソ<E8AD9A>梧髪謖、/B豬玖ッ<E78E96>**<EFBFBD>?
```
backend/prompts/asl/fulltext_screening/
笏懌楳笏€ changelog.md
笏懌楳笏€ fields/
笏? 笏懌楳笏€ 髫乗惻蛹匁婿豕?
笏? 笏? 笏懌楳笏€ v1.0.0-basic.md
笏? 笏? 笏懌楳笏€ v1.1.0-with-examples.md
笏? 笏? 笏懌楳笏€ v1.2.0-cot.md
笏? 笏? 笏披楳笏€ v1.3.0-enhanced-cochrane.md 竊?蠖灘燕迚域悽
笏? 笏懌楳笏€ 逶イ豕<EFBDB2>/
笏? 笏? 笏懌楳笏€ v1.0.0-basic.md
笏? 笏? 笏懌楳笏€ v1.1.0-clarify-single-double.md 竊?謾ケ霑帷<E99C91>?
笏? 笏? 笏披楳笏€ ...
笏? 笏披楳笏€ ...
笏披楳笏€ tests/
笏披楳笏€ benchmark_results.json
```
**謨ー謐ョ蠎楢ョー蠖?*<2A>?
```prisma
model PromptVersion {
id String @id @default(uuid())
field String // "髫乗惻蛹匁婿豕?
version String // "v1.3.0"
content String @db.Text
changelog String // "蠅槫シコCochrane譬<65>㊥謠剰ソー<EFBDBF>梧キサ蜉?荳ェFew-shot譯井セ<E4BA95>"
// 諤ァ閭ス謖<EFBDBD><E8AC96><EFBFBD><EFBFBD>/B豬玖ッ慕サ捺棡<E68DBA>?
accuracy Float? // 0.947
usageCount Int @default(0)
avgConfidence Float?
// 迥カ諤?
isActive Boolean @default(false)
isExperimental Boolean @default(false)
createdAt DateTime @default(now())
deactivatedAt DateTime?
@@map("asl_prompt_versions")
}
```
**A/B豬玖ッ<E78E96>**<EFBFBD>?
```typescript
// 20%豬<>㍼菴ソ逕ィ譁ー迚<EFBDB0>rompt
async function extractFieldWithABTest(
field: string,
content: string
) {
const isExperimentGroup = Math.random() < 0.2;
const promptVersion = isExperimentGroup
? await getPromptVersion(field, 'experimental')
: await getPromptVersion(field, 'stable');
const result = await llmService.chat(
'deepseek-v3',
promptVersion.content,
content
);
// 隶ー蠖穂スソ逕ィ
await trackPromptUsage({
field,
version: promptVersion.version,
isExperiment: isExperimentGroup,
result
});
return result;
}
// 豈丞捉蛻<E68D89>梵A/B豬玖ッ慕サ捺棡
async function analyzeABTest(field: string): Promise<ABTestReport> {
const stableResults = await getPromptUsageStats(field, 'stable');
const experimentResults = await getPromptUsageStats(field, 'experimental');
const improvement = {
accuracy: experimentResults.accuracy - stableResults.accuracy,
confidence: experimentResults.avgConfidence - stableResults.avgConfidence,
processingTime: experimentResults.avgTime - stableResults.avgTime
};
// 扈溯ョ。譏セ闡玲€ァ譽€鬪?
const isSignificant = performTTest(stableResults, experimentResults);
return {
field,
stableVersion: stableResults.version,
experimentVersion: experimentResults.version,
sampleSize: {
stable: stableResults.count,
experiment: experimentResults.count
},
improvement,
isSignificant,
recommendation: isSignificant && improvement.accuracy > 0.02
? 'promote_to_stable' // 謠仙合荳コ遞ウ螳夂沿
: 'continue_testing' // 扈ァ扈ュ豬玖ッ<E78E96>
};
}
```
---
### 莠後€〃2.0謌先悽鬚<EFBFBD><EFBFBD>
**蝨コ譎ッ<E8AD8E>?00遽<30><E981BD><EFBFBD>、咲ュ幢シ磯ォ倩エィ驥城。ケ逶ョ<E980B6><EFBDAE>**
| 邇ッ闃<EFBDAF> | Token豸郁€?| 讓。蝙<EFBDA1> | 謌先悽 |
|------|----------|------|------|
| 12蟄玲ョオ蛻<EFBDB5>ョオ謠仙叙<E4BB99>亥曙讓。蝙具シ?| 12K | DeepSeek-V3 + Qwen3-Max | ツ・0.06/遽?|
| 蜈ィ譁<EFBDA8>コ、蜿蛾ェ瑚ッ<E7919A> | 3K | DeepSeek-V3 | ツ・0.003/遽?|
| 蜈ウ髞ョ蟄玲ョオ荳画ィ。蝙倶サイ陬<EFBDB2><EFBFBD>15%<25>?| 3K | Claude-4.5 | ツ・0.03/遽<>シ井サ?5%<25>?|
| 雍ィ驥丞ョ。隶。<E99AB6>?0%謚ス譟・<E8AD9F>?| 2K | 莠コ蟾・ | 10蛻<30>帖/遽?|
| **100遽<30>€サ謌先<E8AC8C>?* | - | - | **ツ・10 + 莠コ蟾・謌先悽** |
**雍ィ驥乗署蜊<E7BDB2>**<EFBFBD>壼㊥遑ョ邇<EFBFBD> 92% 竊?96%
**謌先悽蠅槫刈**<EFBFBD>堋? 竊?ツ・10<31>?25%<25>御ス<E5BEA1>セセ蛻ー蛹サ蟄ヲ郤ァ譬<EFBDA7><EFBFBD><E38AA5>
---
### 荳峨€〃2.0鬪梧噺譬<EFBFBD>
| 謖<><E8AC96><EFBFBD> | 逶ョ譬<EFBDAE> | 鬪瑚ッ∵婿豕<E5A9BF> |
|------|------|----------|
| 蜃<>。ョ邇<EFBDAE>シ井ク灘ョカ隸<EFBDB6>シー<EFBDBC>?| 竕?96% | 莠コ蟾・謚ス譟・100遽?|
| 莠コ譛コ荳€閾エ諤?| Cohen's Kappa 竕?0.90 | 扈溯ョ。蛻<EFBDA1>梵 |
| 蛛<>亠諤ァ邇<EFBDA7> | 竕?3% | 扈溯ョ。蛻<EFBDA1>梵 |
| 蛛<>亢諤ァ邇<EFBDA7> | 竕?2% | 扈溯ョ。蛻<EFBDA1>梵 |
| 隸∵紺體セ螳梧紛諤?| 100% | 閾ェ蜉ィ譽€譟?|
| 閾ェ蜉ィ蛹門ョ。隶?| 豈丞捉1谺?| 邉サ扈滓冠陦ィ |
| Prompt迚域悽邂。逅<EFBDA1> | 100% | Git蜴<74>彰霑ス雕ェ |
| 隨ヲ蜷<EFBDA6>ochrane譬<65>㊥ | 竕?95% | 荳灘ョカ隶、隸<EFBDA4> |
---
## <20>投 荳蛾亳谿オ蟇ケ豈疲€サ扈<EFBDBB>
| 扈エ蠎ヲ | MVP | V1.0 | V2.0 |
|------|-----|------|------|
| **蜃<>。ョ邇?* | 85% | 92% | 96% |
| **譬ク蠢<EFBDB8>ュ也払** | Nougat+蛻<>ョオ謠仙叙 | +蜈ィ譁<EFBDA8>ェ瑚ッ<E7919A>+騾サ霎題ァ<E9A18C><EFBDA7> | +荳画ィ。蝙倶サイ陬?螳。隶。 |
| **隸∵紺體?* | 蝓コ譛ャ蠑慕畑 | 螳梧紛螳壻ス<E5A3BB> | 螳。隶。郤ァ譌・蠢?|
| **雍ィ驥乗而蛻カ** | 蜿梧ィ。蝙矩ェ瑚ッ?| 蛹サ蟄ヲ騾サ霎大シ墓梼 | HITL+閾ェ蜉ィ螳。隶。 |
| **謌先悽/100遽?* | ツ・6 | ツ・8 | ツ・10 |
| **蠑€蜿大捉譛?* | 3蜻?| 5蜻?| 8蜻?|
| **騾ら畑蝨コ譎ッ** | 蠢ォ騾滄ェ瑚ッ?| 蟶ク隗<EFBDB8>。ケ逶ョ | Cochrane蜿題。ィ |
---
## <20>売 螳樊命霍ッ蠕<EFBDAF>
### 髦カ谿オ1<EFBDB5>哺VP蠑€蜿托シ<E68998>eek 1-3<>?
**Week 1**<EFBFBD>壼渕遑€譫カ譫<EFBFBD>
- [x] PDF蟄伜お譛榊苅<E6A68A>亥キイ螳梧<E89EB3><E6A2A7>俄怛
- [ ] Nougat謠仙叙+遶<>闃りァ」譫<EFBDA3>
- [ ] 12蟄玲ョオ霍ッ逕ア陦ィ隶セ隶?
- [ ] 蝓コ遑€Prompt讓。譚ソ<E8AD9A>?2荳ェ蟄玲ョオ<EFBDAE><EFBDB5>
**Week 2**<EFBFBD><EFBFBD>ク蠢<EFBFBD>粥閭?
- [ ]<>ョオ蟷カ陦梧署蜿<E7BDB2>
- [ ] 蜿梧ィ。蝙玖ー<E78E96><EFBDB0>?
- [ ] 蟄玲ョオ郤ァ蜀イ遯∵」€豬?
- [ ] 蝓コ遑€隸∵紺體?
**Week 3**<EFBFBD>壼燕遶?豬玖ッ<E78E96>
- [ ] 蜑咲ォッ蟾・菴懷<E88FB4>?
- [ ] 蜀イ遯∝ッケ豈碑ァ<E7A291>
- [ ] 莠コ蟾・螟肴<E89E9F>ク逡碁擇
- [ ] 蜉溯<E89C89>豬玖ッ<E78E96>+蜃<>。ョ邇<EFBDAE><EFBFBD>シ?
### 髦カ谿オ2<EFBDB5>啖1.0蠅槫シコ<EFBFBD><EFBFBD>eek 4-8<>?
**Week 4-5**<EFBFBD>夊エィ驥乗署蜊?
- [ ] Cochrane譬<65>㊥Prompt蠅槫シコ
- [ ] Few-shot蛹サ蟄ヲ譯井セ句コ難シ域ッ丞ュ玲ョ?-5荳ェ<E88DB3><EFBDAA>
- [ ] CoT謗ィ逅<EFBDA8>「槫シコ
**Week 6-7**<EFBFBD>夐ェ瑚ッ∵惻蛻?
- [ ] 蜈ィ譁<EFBDA8>コ、蜿蛾ェ瑚ッ<E7919A>
- [ ] 蛹サ蟄ヲ騾サ霎題ァ<E9A18C><EFBDA7>蠑墓梼
- [ ] 螳梧紛隸∵紺體?
**Week 8**<EFBFBD>壻シ伜<EFBFBD>?譁<>。」
- [ ] 諤ァ閭ス莨伜喧
- [ ] A/B豬玖ッ<E78E96>
- [ ]<>。」螳悟埋
### 髦カ谿オ3<EFBDB5>啖2.0螳悟埋<EFBFBD><EFBFBD>eek 9-16<31>?
**Week 9-11**<EFBFBD>夐ォ倡コァ蜉溯<EFBFBD>?
- [ ] 荳画ィ。蝙倶サイ陬?
- [ ] HITL譎コ閭ス蛻<EFBDBD><EFBFBD>
- [ ] Prompt迚域悽邂。逅<EFBDA1>+A/B豬玖ッ<E78E96>
**Week 12-14**<EFBFBD>夊エィ驥丞ョ。隶?
- [ ] 閾ェ蜉ィ螳。隶。邉サ扈<EFBDBB>
- [ ] 雍ィ驥乗冠陦ィ
- [ ] 蠑ょクク譽€豬?
**Week 15-16**<EFBFBD>壼現蟄ヲ荳灘ョカ鬪瑚ッ?
- [ ] Cochrane荳灘ョカ隸<EFBDB6>ョ。
- [ ] 蜈ィ驥乗オ玖ッ<E78E96>
- [ ] 蜿大ク<E5A4A7>枚譯」
---
## <20>答 逶ク蜈ウ譁<EFBDB3>。」
- [<EFBFBD>「俶遭隕∝<EFBFBD>遲幄エィ驥丈ソ晞囿遲也払](./06-雍ィ驥丈ソ晞囿荳主庄霑ス貅ッ遲也払.md)
- [蜈ィ譁<EFBDA8>、咲ュ帛シ€蜿題ョ。蛻綻(../04-蠑€蜿題ョ。蛻?04-蜈ィ譁<EFBDA8>、咲ュ帛シ€蜿題ョ。蛻?md)
- [謨ー謐ョ蠎楢ョセ隶。](./01-謨ー謐ョ蠎楢ョセ隶?md)
- [API隶セ隶。隗<EFBFBD>](./02-API隶セ隶。隗<EFBDA1>激.md)
- [莠大次逕溷シ€蜿題ァ<EFBFBD>](../../../04-蠑€蜿題ァ<E9A18C><EFBDA7>?08-莠大次逕溷シ€蜿題ァ<E9A18C><EFBDA7>?md)
---
**譖エ譁ー譌・蠢<EFBDA5>**<EFBFBD>?
- 2025-11-22: 蛻帛サコ譁<EFBDBA>。」<EFBDA1>悟ョ壻ケ牙<EFBDB9><EFBFBD>、咲ュ帑ク蛾亳谿オ雍ィ驥丈ソ晞囿遲也払
- 蝓コ莠晒ougat扈捺桷蛹?蛻<>ョオ謠仙叙+蜈ィ譁<EFBDA8>ェ瑚ッ∫噪謚€譛ッ譁ケ譯?
- 蜿り€イochrane RoB 2.0譬<EFBFBD>㊥隶セ隶。荳謎ク啀rompt讓。譚ソ
- 蠑コ隹<EFBDBA>ョ梧紛隸∵紺體セ蜥悟庄霑ス貅ッ諤?