本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
對自動化理由政策進行故障診斷和精簡
當自動推理政策測試失敗時 — 實際結果不符合預期結果 — 問題不在翻譯中 (自然語言映射到錯誤的變數或值) 或在規則中 (政策邏輯不符合您的網域)。此頁面提供系統性方法來診斷和修正這兩種類型的問題。
開始疑難排解之前,請確定您了解 中所述的兩步驟驗證程序 (翻譯,然後驗證)翻譯:從自然語言到正式邏輯。此區別是有效偵錯的關鍵。
注意
教學課程影片:如需精簡和疑難排解自動推理政策的逐步解說,請觀看下列教學課程:
偵錯工作流程
當測試失敗時,請使用實際結果來識別問題類型並跳至相關區段。
| 實際結果 | 可能原因 | 要查看的位置 |
|---|---|---|
TRANSLATION_AMBIGUOUS |
翻譯模型對於如何解譯輸入有不同意見。通常是由重疊的變數、模糊的描述或模棱兩可的輸入文字所造成。 | 修正翻譯問題 |
NO_TRANSLATIONS |
輸入無法映射至任何政策變數。輸入不是主題,或政策缺少所提及概念的變數。 | 修正翻譯問題 |
TOO_COMPLEX |
輸入或政策超過處理限制。通常是由非線性算術或具有太多互動規則的政策所造成。 | 限制及考量 |
IMPOSSIBLE |
內部部署彼此矛盾,或政策本身包含衝突的規則。 | 修正不可能的結果 |
VALID、 INVALID或 SATISFIABLE(但不是您的預期) |
首先檢查調查結果中的翻譯。如果使用正確的值指派正確的變數,問題就在您的規則中。如果翻譯錯誤,問題就在您的變數描述中。 | 翻譯錯誤:修正翻譯問題。規則錯誤:修正規則問題。 |
提示
一律先檢查翻譯。在大多數情況下,數學驗證 (步驟 2) 是正確的 — 問題在於自然語言如何翻譯為正式邏輯 (步驟 1)。修正變數描述比變更規則更快且風險更低。
修正翻譯問題
當自動推理檢查無法可靠地將自然語言映射到政策的變數時,就會發生轉譯問題。最明顯的徵狀是TRANSLATION_AMBIGUOUS結果,但在指派錯誤變數或值時VALID,轉譯問題也可能導致不正確的 INVALID、 或 SATISFIABLE結果。
診斷 TRANSLATION_AMBIGUOUS 結果
TRANSLATION_AMBIGUOUS 調查結果包含兩個關鍵欄位,可協助您了解分歧:
-
options— 競爭邏輯解釋 (最多 2 個)。每個選項都包含自己的翻譯,其中包含內部部署、宣告和可信度。比較選項以查看翻譯模型的不一致之處。 -
differenceScenarios— 案例 (最多 2 個),說明不同的解釋在意義上有何不同,而變數指派強調模棱兩可的實際影響。
檢查這些欄位以識別模棱兩可的特定來源,然後從下列清單套用適當的修正。
重疊的變數定義
當多個變數可合理代表相同的概念時,轉譯模型會與要使用的變數不同。
徵狀:TRANSLATION_AMBIGUOUS調查結果options中的 會顯示指派給不同變數的相同概念。例如,一個選項會將「2 年服務」指派給 tenureMonths = 24,另一個選項則將其指派給 monthsOfService = 24。
修正:將重疊的變數合併為具有完整描述的單一變數。更新參考已刪除變數的所有規則,以使用剩餘的變數。
範例:
| 之前 (重疊) | 之後 (合併) |
|---|---|
|
|
(刪除 |
未完成的變數描述
缺少使用者如何以日常語言參考概念詳細資訊的變數描述,使得將輸入映射到正確的變數變得困難。
徵狀: options會顯示正確的變數,但具有不同的值,或轉譯會指派與使用者所說內容不相符的值。例如,「2 年」會翻譯為 tenureMonths = 2而非 tenureMonths = 24。
修正:更新變數描述以包含單位轉換規則、同義詞和替代措辭。如需詳細指引撰寫完整的變數描述,請參閱 。
範例:
| 之前 (不完整) | After (全方位) |
|---|---|
isFullTime:「全職狀態」。 |
isFullTime:「員工是全職 (true) 還是兼職 (false) 工作。當使用者提到 'full-time'、工作 'full hours' 或每週工作超過 40 小時時,設為 true。當使用者提到「兼職」、工作「減少時數」或每週工作少於 40 小時時,設定為 false。」 |
不一致的值格式
當系統不確定如何格式化數字、日期或百分比等值時,可能會發生翻譯模棱兩可的情況。
徵狀: options顯示相同的變數,但值格式不同。例如,一個選項將 "5%" 轉譯為 interestRate = 5,另一個選項將其轉譯為 interestRate = 0.05。
修正:更新變數描述以指定預期的格式並包含轉換規則。請參閱 在變數描述中指定單位和格式。
輸入文字不明確
有時輸入本身是真正的模棱兩可的,它包含模糊的代名詞、不清楚的參考,或可以以多種方式解釋的陳述式。
徵狀: options顯示相同文字的基本上不同解釋。例如,「他們可以休假嗎?」 可以參考任何員工類型。
修正:如果這是測試,請重寫輸入以更具體。在執行時間,您的應用程式應在收到TRANSLATION_AMBIGUOUS結果時要求使用者釐清。如需整合模式,請參閱 在您的應用程式中整合自動推理檢查。
調整可信度閾值
如果您看到邊界不明確的輸入TRANSLATION_AMBIGUOUS結果,您可以調整可信度閾值。降低閾值可讓具有較少模型協議的翻譯繼續進行驗證、減少TRANSLATION_AMBIGUOUS結果,但會增加不正確翻譯的風險。
重要
調整閾值應該是最後一個手段。在大多數情況下,改善變數描述或移除重疊變數是更好的解決方法,因為它可以解決根本原因。如需閾值如何運作的詳細資訊,請參閱 可信度閾值。
修正規則問題
當轉譯正確,但政策邏輯與您的網域不相符時,就會發生規則問題。您已確認使用正確的值指派正確的變數,但驗證結果仍然錯誤。
當您預期 INVALID 時取得 VALID
政策沒有禁止宣告的規則。回應與您的網域知識相衝突,但政策允許。
診斷:查看調查結果supportingRules中的 。這些是證明宣告有效的規則。檢查這些規則是否正確,或規則是否遺失。
常見原因和修正:
-
缺少規則。您的政策沒有涵蓋此條件的規則。新增擷取限制條件的新規則。例如,如果政策允許所有全職員工的親職休假,但應該需要 12 個月的保留期,請新增:
(=> (and isFullTime (<= tenureMonths 12)) (not eligibleForParentalLeave)) -
規則過於寬鬆。現有的規則允許超過應有的量。編輯規則以新增缺少的條件。例如,
(=> isFullTime eligibleForParentalLeave)將 變更為(=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave) -
缺少變數。政策沒有用來擷取相關概念的變數。新增變數、撰寫明確的描述,並建立參考它的規則。
當您預期 VALID 時取得 INVALID
政策的規則錯誤地禁止宣告。
診斷:查看調查結果contradictingRules中的 。這些是拒絕宣告的規則。檢查這些規則是否正確。
常見原因和修正:
-
規則太嚴格。現有的規則會封鎖有效的案例。編輯規則以放寬條件或新增例外狀況。例如,如果規則需要 24 個月的期限,但政策應該只需要 12,請更新閾值。
-
規則被錯誤擷取。自動化理由檢查會錯誤解譯您的來源文件。編輯規則以符合預期的邏輯,或刪除規則並手動新增正確的規則。
當您預期 VALID 時取得滿意
在某些情況下,回應是正確的,但不是全部。政策有回應未定址的其他規則。
診斷:比較調查結果claimsFalseScenario中的 claimsTrueScenario和 。兩者之間的差異顯示回應未提及的條件。
常見原因和修正:
-
回應不完整。測試輸出未提及政策所需的所有條件。更新測試輸出以包含遺失條件,或者
SATISFIABLE如果您的使用案例可接受不完整的回應,請將預期結果變更為 。 -
政策具有不必要的規則。此政策需要與此案例無關的條件。檢閱是否應套用其他規則,如果不套用則將其移除。
修正不可能的結果
IMPOSSIBLE 結果表示自動推理檢查無法評估宣告,因為內部部署是矛盾的,或政策本身包含衝突的規則。有兩個不同的原因。
輸入中的矛盾
測試輸入包含互相矛盾的陳述式。例如,「我是全職員工,也是兼職」isFullTime = false同時設定 isFullTime = true和 ,這在邏輯上是不可能的。
診斷:檢查調查結果中的translation內部部署。尋找指派給矛盾值的變數。
修正:如果這是測試,請重寫輸入以移除衝突。在執行時間,您的應用程式應要求使用者釐清其輸入,以處理IMPOSSIBLE結果。
政策中的衝突
該政策包含相互矛盾的規則,使得自動推理檢查無法得出涉及衝突規則的輸入結論。
診斷:如果輸入有效 (沒有矛盾的現場部署),問題就位於政策中。檢查調查結果中的 contradictingRules 欄位,以識別哪些規則發生衝突。同時檢查品質報告 (請參閱 使用品質報告) — 它會自動標記衝突的規則。
常見原因和修正:
-
矛盾的規則。對於相同的條件,兩個規則會得到相反的結論。例如,一個規則表示全職員工符合休假資格,另一個規則則表示第一年的員工不符合資格,而不指定第一年全職員工會發生什麼情況。將規則合併為具有明確條件的單一規則:
(=> (and isFullTime (> tenureMonths 12)) eligibleForLeave) -
裸露聲明。類似 的裸露聲明
(= eligibleForLeave true)使得任何輸入都無法宣告使用者不符合資格。重寫裸露聲明做為影響。請參閱 使用影響 (=>) 來建構規則。 -
循環相依性。以建立邏輯迴圈的方式相互依賴的規則。簡化規則以中斷週期,或使用中繼變數使邏輯明確。
使用註釋來修復您的政策
註釋是您在測試失敗時套用到政策的目標更正。除了手動編輯規則和變數之外,您可以使用註釋來描述您想要的變更,並讓自動原因檢查套用它。註釋可透過 主控台和 API 使用。
在主控台中套用註釋
-
開啟失敗的測試並檢閱問題清單以了解問題。
-
修改測試條件 (例如,新增內部部署或變更預期結果) 並重新執行測試。如果修改的測試傳回您預期的結果,您可以將此修改套用為註釋。
-
選擇套用註釋。自動化理由檢查會啟動建置工作流程,以根據您的意見回饋將變更套用至您的政策。
-
在檢閱政策變更畫面上,檢閱政策規則、變數和類型的提議變更。然後選取接受變更。
使用 API 套用註釋
搭配 使用 StartAutomatedReasoningPolicyBuildWorkflow APIREFINE_POLICY,以程式設計方式套用註釋。將完整的目前政策定義與註釋一起傳遞。
註釋類型包括:
-
變數註釋:
addVariable、updateVariable、deleteVariable— 新增缺少的變數、改善描述或移除重複項目。 -
規則註釋:
addRule、updateRule、deleteRule、addRuleFromNaturalLanguage— 修正不正確的規則、新增缺少的規則,或移除衝突的規則。使用addRuleFromNaturalLanguage以純英文描述規則,並讓自動推理檢查將其轉換為正式邏輯。 -
類型註釋:
addType、updateType、deleteType— 管理自訂類型 (列舉)。 -
意見回饋註釋:
updateFromRulesFeedback、updateFromScenarioFeedback— 提供有關特定規則或案例的自然語言意見回饋,並讓自動化理由檢查推斷必要的變更。
範例:使用註釋新增缺少的變數和規則
aws bedrock start-automated-reasoning-policy-build-workflow \ --policy-arn "arn:aws:bedrock:us-east-1:111122223333:automated-reasoning-policy/lnq5hhz70wgk" \ --build-workflow-type REFINE_POLICY \ --source-content "{ \"policyDefinition\":EXISTING_POLICY_DEFINITION_JSON, \"workflowContent\": { \"policyRepairAssets\": { \"annotations\": [ { \"addVariable\": { \"name\": \"tenureMonths\", \"type\": \"int\", \"description\": \"The number of complete months the employee has been continuously employed. When users mention years of service, convert to months (for example, 2 years = 24 months).\" } }, { \"addRuleFromNaturalLanguage\": { \"naturalLanguage\": \"If an employee is full-time and has more than 12 months of tenure, then they are eligible for parental leave.\" } } ] } } }"
註釋範例
範例 1:修正缺少的保留期需求
問題:政策會核准所有全職員工的親職休假,但來源文件需要 12 個月以上的保留期。
| Before | 註釋後 |
|---|---|
|
規則: 無 |
新變數: 已更新規則: |
範例 2:修正導致 TRANSLATION_AMBIGUOUS 的重疊變數
問題:兩個變數 (tenureMonths 和 monthsOfService) 代表相同的概念,導致翻譯不一致。
註釋:
-
deleteVariable適用於monthsOfService。 -
updateVariable的tenureMonths具有改善的描述,涵蓋使用者可能參考雇用期間的所有方式。 -
updateRule對於參考 的任何規則monthsOfService,請將它們變更為使用tenureMonths。
範例 3:修正造成 IMPOSSIBLE 結果的裸露聲明
問題:規則(= eligibleForParentalLeave true)是一種隱含聲明,使得任何輸入都無法宣告使用者不符合資格。
註釋:
-
deleteRule用於裸露聲明。 -
addRuleFromNaturalLanguage:「如果員工是全職員工,並且超過 12 個月,則他們有資格申請親職休假。」
使用品質報告
品質報告會在每個建置工作流程之後產生,並識別政策中可能導致測試失敗的結構問題。在 主控台中,品質報告問題會在定義頁面上顯示為警告。透過 API,GetAutomatedReasoningPolicyBuildWorkflowResultAssets搭配 使用 --asset-type QUALITY_REPORT。
品質報告會標記下列問題:
衝突規則
針對同一組條件,兩個或多個規則會得到矛盾的結論。衝突規則會導致您的政策IMPOSSIBLE針對涉及衝突規則的所有驗證請求傳回 。
範例:規則 A 表示 (=> isFullTime eligibleForLeave),規則 B 表示 (=> (<= tenureMonths 6) (not eligibleForLeave))。對於 3 個月的全職員工,規則 A 表示符合資格,規則 B 表示不符合資格 — 矛盾。
修正:將規則合併為具有明確條件的單一規則:(=> (and isFullTime (> tenureMonths 6)) eligibleForLeave)。或者,如果其中一個衝突規則被錯誤擷取,請將其刪除。
未使用的變數
任何規則未參考的變數。未使用的變數會增加轉譯程序的雜訊,當它們與相同概念的類似作用中變數競爭時,可能會導致TRANSLATION_AMBIGUOUS結果。
修正:除非您打算新增在未來反覆運算中參考它們的規則,否則請刪除未使用的變數。
未使用的類型值
任何規則未參考的自訂類型 (列舉) 中的值。例如,如果您的列舉具有 PARENTAL、MEDICAL、BEREAVEMENT LeaveType 和 Personal 的值,但沒有規則參考 Personal,則會將其標記為未使用。
修正:新增參考未使用值的規則,或從列舉中移除。如果輸入提及概念但沒有規則處理,未使用的值可能會導致轉譯問題。
取消連接規則集
不共用任何變數的規則群組。取消聯結規則集不一定是問題 – 您的政策可能會刻意涵蓋獨立主題 (例如,留下資格和費用補償)。不過,它們可以指出變數缺少相關規則之間的連線。
何時採取行動:如果取消聯結規則集應該相關 (例如,它們都處理員工利益,但針對相同的概念使用不同的變數名稱),請合併重疊的變數來連接它們。如果規則集是真正獨立的,則不需要任何動作。
使用 Kiro CLI 進行政策精簡
Kiro CLI 提供互動式聊天介面,用於診斷和修正政策問題。它可以載入您的政策定義和品質報告、解釋測試失敗的原因、建議變更,以及套用註釋 - 所有這些都是透過自然語言對話。
Kiro CLI 特別適用於:
-
了解失敗。要求 Kiro CLI 載入失敗的測試,並解釋它未傳回預期結果的原因。Kiro CLI 將分析政策定義、測試結果和品質報告,以識別根本原因。
-
解決品質報告問題。要求 Kiro CLI 摘要品質報告,並針對衝突規則、未使用的變數和重疊的變數描述提出修正建議。
-
建議規則變更。描述您預期的行為,並要求 Kiro CLI 提議必要的變數和規則變更。檢閱建議並指示 Kiro CLI 將其套用為註釋。
工作流程範例:
You: The test with ID test-12345 is not returning the expected result. Can you load the test definition and findings, look at the policy definition, and explain why this test is failing? Kiro: [analyzes the test and policy] The test expects VALID but gets INVALID because rule R3 requires 24 months of tenure, while the test input specifies 18 months. The source document says 12 months. Rule R3 appears to have been misextracted. You: Can you suggest changes to fix this? Kiro: I suggest updating rule R3 to change the tenure threshold from 24 to 12 months. Here's the updated rule: ... You: Looks good. Can you use the annotation APIs to submit these changes? Kiro: [applies annotations via the API]
如需設定和使用 Kiro CLI 搭配自動推理政策的完整說明,請參閱 搭配自動推理政策使用 Kiro CLI。