訂明本例驗收任務
假設診斷有非空所需文件清單、實際內容編號及同事標出的答案是否正確。內容欠項先列搜尋缺口;只有內容齊備而答案錯,才列生成缺口。即使答對,欠內容仍不是已證實有完整依據的成功。
- 先核對必需內容
- 內容齊後才用答案標籤
- 記錄缺口階段及欠項
所需清單或答案標籤未備好,先補資料再診斷。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 欠所需依據 | {"required":["D1"],"context":["X"],"correct":false} | {"stage":"retrieval","missing":["D1"]} | D1 沒進入內容;只改答案不能證明搜尋已修好。 |
| 有依據仍答錯 | {"required":["D1"],"context":["D1"],"correct":false} | {"stage":"generation","missing":[]} | 所訂內容要求齊備,已標出的錯答案指向後一步。 |
| 欠答案標籤 | {"required":["D1"],"context":["D1"]} | {"error":"answer-label"} | 沒有同事布林標籤,不能判答案正確或不正確。 |
| 答對卻欠依據 | {"required":["D1","D2"],"context":["D1"],"correct":true} | {"stage":"retrieval","missing":["D2"]} | 答案標正確也不能抹掉內容欠 D2。 |
逐步處理 lucky-answer-gap 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"stage":"retrieval","missing":["D2"]}。答案標正確也不能抹掉內容欠 D2。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(!x.required.length)return {stage:'unresolved'};
if(typeof x.correct!=='boolean')return {error:'answer-label'};
const missing=[...new Set(x.required)].filter(id=>!x.context.includes(id)).sort();
return {stage:missing.length?'retrieval':x.correct?'pass':'generation',missing};
}
const cases = [
{
"id": "missing-context",
"input": {
"required": [
"D1"
],
"context": [
"X"
],
"correct": false
},
"expected": {
"stage": "retrieval",
"missing": [
"D1"
]
}
},
{
"id": "wrong-generation",
"input": {
"required": [
"D1"
],
"context": [
"D1"
],
"correct": false
},
"expected": {
"stage": "generation",
"missing": []
}
},
{
"id": "missing-answer-label",
"input": {
"required": [
"D1"
],
"context": [
"D1"
]
},
"expected": {
"error": "answer-label"
}
},
{
"id": "lucky-answer-gap",
"input": {
"required": [
"D1",
"D2"
],
"context": [
"D1"
],
"correct": true
},
"expected": {
"stage": "retrieval",
"missing": [
"D2"
]
}
}
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
分開階段時沿用相同來源及問題。此檢查按提供的標籤,不推斷模型內部原因,也不自行證明答案語意正確。