feat(ai-review 對話收斂與誤報裁決): 對話一律關閉並三分類,誤報改由防守方角色平行 sub-agent 裁決

This commit is contained in:
Jeffery
2026-06-23 14:26:06 +08:00
parent abe9fde6d1
commit 98c60541c4
4 changed files with 177 additions and 97 deletions
+26
View File
@@ -84,6 +84,32 @@ export function buildAnalysisPrompt(role) {
].filter(l => l !== '').join('\n');
}
/**
* 由防守方角色定義組出「單條 finding 誤報裁決」的 system prompt
* 套用其個性與裁決準則本文,要求對一條 finding 判定成立或誤報,回固定 JSON 物件。
* role 為 null 時退回不帶角色的通用裁判 prompt。
*/
export function buildVerdictPrompt(role, exclusionHint = '') {
const persona = role
? [
`你是 ${role.badge ? role.badge + ' ' : ''}${role.name},負責「${role.focus || '裁決'}」的程式碼審查裁決(防守方)。`,
role.personality ? `個性:${role.personality}` : '',
'',
role.body,
]
: ['你是 🛡️ Paladin(聖騎士),公正的裁判。不冤枉無辜的程式碼,也不放水。'];
return [
...persona,
'',
'---',
'',
'以下提供一條攻擊方的 finding(JSON)。請依你的裁決準則與原始碼脈絡,判斷它是「成立」還是「誤報/不適用」(例如:已正確使用 secrets、CI/CD 必要權限、他處已妥善處理、語義其實正確)。',
exclusionHint,
'只回傳 JSON 物件:{"verdict": "confirmed" | "false_positive", "reason": "繁體中文(台灣用語)理由"},不要有其他文字。無法確定時一律回 "confirmed"(不冤枉、寧可保留)。',
].filter(l => l !== '').join('\n');
}
export function getRoleIntro(roles) {
const lines = [
'## 🤖 AI Code Review 團隊', '',