訂明本例驗收任務
假設本機格式修正最多兩次,先有已核實的非空文字編碼,每次也須有非空文字編碼及布林格式標籤。編碼完全相同,格式為真才完成;即使格式對,改了編碼仍是依據錯誤。兩次都無效便停止,之後的記錄不當作容許範圍內的嘗試。
- 最多查看兩次修正
- 先核保留資料,再看格式
- 列完成或停止原因
改了已核實資料便停止,次數用完仍錯交同事覆核。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 第二次格式修好 | {"verifiedCode":"K7","attempts":[{"code":"K7","valid":false},{"code":"K7","valid":true}]} | {"status":"complete","attemptsUsed":2} | 第二次在上限內通過,並保留 K7。 |
| 格式好了卻改編碼 | {"verifiedCode":"K7","attempts":[{"code":"K9","valid":true}]} | {"status":"fact-changed","attemptsUsed":1} | 格式有效不能批准替換已核實資料。 |
| 文字 false 不是格式布林 | {"verifiedCode":"K7","attempts":[{"code":"K7","valid":"false"}]} | {"status":"invalid-format-label","attemptsUsed":1} | 文字 false 不能按真值當已完成依據。 |
| 兩個編碼都未具備 | {"attempts":[{"valid":true}]} | {"status":"missing-code-evidence","attemptsUsed":0} | undefined 相同不是保留已核實編碼的依據。 |
| 該次欠保留編碼 | {"verifiedCode":"K7","attempts":[{"valid":true}]} | {"status":"missing-code-evidence","attemptsUsed":1} | 格式為真也不能完成欠保留編碼的嘗試。 |
| 第三次超過上限 | {"verifiedCode":"K7","attempts":[{"code":"K7","valid":false},{"code":"K7","valid":false},{"code":"K7","valid":true}]} | {"status":"stopped","attemptsUsed":2} | 第三次雖成功,也超出本例兩次規則。 |
逐步處理 third-attempt-too-late 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"status":"stopped","attemptsUsed":2}。第三次雖成功,也超出本例兩次規則。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(typeof x.verifiedCode!=='string'||!x.verifiedCode.trim())return {status:'missing-code-evidence',attemptsUsed:0};
for(let i=0;i<Math.min(2,x.attempts.length);i++){const a=x.attempts[i];if(typeof a.code!=='string'||!a.code.trim())return {status:'missing-code-evidence',attemptsUsed:i+1};if(a.code!==x.verifiedCode)return {status:'fact-changed',attemptsUsed:i+1};if(typeof a.valid!=='boolean')return {status:'invalid-format-label',attemptsUsed:i+1};if(a.valid)return {status:'complete',attemptsUsed:i+1};}
return {status:x.attempts.length>=2?'stopped':'needs-next-attempt',attemptsUsed:Math.min(2,x.attempts.length)};
}
const cases = [
{
"id": "second-format-pass",
"input": {
"verifiedCode": "K7",
"attempts": [
{
"code": "K7",
"valid": false
},
{
"code": "K7",
"valid": true
}
]
},
"expected": {
"status": "complete",
"attemptsUsed": 2
}
},
{
"id": "format-pass-fact-change",
"input": {
"verifiedCode": "K7",
"attempts": [
{
"code": "K9",
"valid": true
}
]
},
"expected": {
"status": "fact-changed",
"attemptsUsed": 1
}
},
{
"id": "text-format-label",
"input": {
"verifiedCode": "K7",
"attempts": [
{
"code": "K7",
"valid": "false"
}
]
},
"expected": {
"status": "invalid-format-label",
"attemptsUsed": 1
}
},
{
"id": "verified-code-absent",
"input": {
"attempts": [
{
"valid": true
}
]
},
"expected": {
"status": "missing-code-evidence",
"attemptsUsed": 0
}
},
{
"id": "attempt-code-absent",
"input": {
"verifiedCode": "K7",
"attempts": [
{
"valid": true
}
]
},
"expected": {
"status": "missing-code-evidence",
"attemptsUsed": 1
}
},
{
"id": "third-attempt-too-late",
"input": {
"verifiedCode": "K7",
"attempts": [
{
"code": "K7",
"valid": false
},
{
"code": "K7",
"valid": false
},
{
"code": "K7",
"valid": true
}
]
},
"expected": {
"status": "stopped",
"attemptsUsed": 2
}
}
];
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)}));
保留各次容許嘗試及候選結果。此本機流程不涉及網絡重試、供應商時間或模型可靠度;增加次數便是改規則。