建議 model:opus/effort:medium — 改的是 AI 判斷品質的直接輸入,且要同時動套件與容器。
本卡屬 FR-107(母卡 CM-1843)第 .5 棒(子需求卡 CM-1848),子任務 T-5.3:把送給 AI 的指令改成從設定組出來,容器程式裡不再出現 CMMC 這個字。
容器程式現在有一段寫死的 AI 指令(container_entrypoint.py:504 build_system_block()),開頭就是「你是 CMMC 2.0 Level 1 評估專家」。這張卡把它改成從外面組好、寫成一個檔案掛進去。
組裝分三段(design.md §6.5):
段 來源 缺省(沒設定時)
① persona classification_profiles.persona 內建:「You are a compliance assessment
角色 expert. Classify each evidence file
against the assessment objectives
listed below.」🔴 不含任何框架名
② guidance classification_profiles.guidance 內建通用判準三句(證據要能直接證明該
判斷指引 檢查點;一檔可對多項;不確定就低信心)
③ 動態 catalog.json(T-5.2 的輸出) 無 hints 就只列檢查點清單
檢查點 + evidence_hints 對應到清單內
清單 part_id/group_id 的提示併入各項
組好的東西寫成 /job/prompt.json 掛給容器,容器只負責讀它拼接。同時把整條線的檢查點代號從字母格式改成 part_id,容器回傳前還要驗「這個 part_id 真的在清單裡」。
組裝結果也存一份進分類結果表的 prompt_snapshot,之後除錯與稽核時看得到當時實際送了什麼。
套件(走 path dependency 開發)
~/Projects/Jedicogy/module/jedi-python-package/jedi-evidence-classification/
.../app/service/evidence_classification_service.py
run_batch(...) ← T-3.2 做的最小版 prompt.json,這裡改成真的三段組裝
並把結果存進 run 的 prompt_snapshot
.../docker/container_entrypoint.py ← T-2.3 搬過來的
:504 build_system_block() ← 🔴 改成純讀 /job/prompt.json 拼接
不再有任何字串常數提到 CMMC
:109 ao_id = f"{ctrl['id']}[{ao['letter']}]" ← 🔴 改成用 part_id
← 回傳前驗 part_id ∈ catalog
/job/prompt.json
{
"persona": "……",
"guidance": "……",
"hints_by_part_id": {
"AC.L1-3.1.1_obj.2": ["帳號清單", "AD 截圖"],
...
}
}
容器 build_system_block() 改成:
讀 prompt.json → persona + guidance + 從 catalog.json 列出檢查點
(每個檢查點若在 hints_by_part_id 有提示就併進該項)
🔴 函式內不得有任何硬編碼的框架名稱或檢查點內容
容器回傳的結果 JSON,matches 的 key 一律是 part_id:
{"files":[{"file_uid":"...","matches":[{"part_id":"AC.L1-3.1.1_obj.2","confidence":0.82}],
"primary":"...","error":null}], "usage":{...}, "estimated_cost_usd":...}
build_system_block() 改成純讀檔拼接。改完 grep -in "cmmc" container_entrypoint.py 要零命中(這是驗收項)。ao_id 全線改 part_id(:109)。注意這會改變容器回傳結果的形狀,T-3.2 寫進 run 的那段要對得上。part_id ∈ catalog:AI 有可能瞎掰一個不存在的代號,驗一下把它濾掉或標成錯誤,不要讓髒資料進資料庫。prompt_snapshot 存的是「實際送出去的那份」,不是「設定表裡的內容」——如果之後有人改了設定,快照還是當時的。part_id 也可以是 group_id(表結構允許兩種):group_id 的提示要套用到該領域底下所有檢查點。