对自动推理策略进行故障排除和完善 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

对自动推理策略进行故障排除和完善

当自动推理策略测试失败时(实际结果与预期结果不符),问题要么出在翻译(自然语言映射到错误的变量或值)或规则中(策略逻辑与您的域名不匹配)。本页提供了一种系统化的方法来诊断和修复这两种类型的问题。

在开始故障排除之前,请务必了解中描述的两步验证流程(先翻译,再进行验证)。翻译:从自然语言到形式逻辑这种区别是高效调试的关键。

注意

教程视频:要详细了解 step-by-step如何完善自动推理策略并对其进行故障排除,请观看以下教程:

教程演示 3:完善自动推理策略

调试工作流程

当测试失败时,使用实际结果来确定问题类型并跳至相关部分。

实际结果 可能的原因 去哪里看
TRANSLATION_AMBIGUOUS 翻译模型在如何解释输入内容上存在分歧。通常是由重叠的变量、模糊的描述或不明确的输入文本引起的。 修复翻译问题
NO_TRANSLATIONS 无法将输入映射到任何策略变量。要么输入是题外话,要么政策缺少上述概念的变量。 修复翻译问题
TOO_COMPLEX 输入或策略超过了处理限制。通常是由非线性算术或具有太多交互规则的策略引起的。 限制和注意事项
IMPOSSIBLE 前提相互矛盾,或者政策本身包含相互矛盾的规则。 修复不可能的结果
VALIDINVALID、或SATISFIABLE(但不是你所期望的) 请先检查调查结果中的翻译。如果为正确的变量分配了正确的值,则问题出在您的规则中。如果翻译错误,则问题出在您的变量描述中。 翻译错误:修复翻译问题. 规则错误:修复规则问题.
提示

务必先检查翻译。在大多数情况下,数学验证(步骤 2)是正确的 — 问题在于如何将自然语言转换为形式逻辑(步骤 1)。与更改规则相比,修复变量描述更快,风险也更低。

修复翻译问题

当自动推理检查无法可靠地将自然语言映射到您的政策变量时,就会出现翻译问题。最明显的症状是TRANSLATION_AMBIGUOUS结果,但是翻译问题也可能导致错误的VALIDINVALID、,或者在分配错误的变量或值时导致SATISFIABLE结果。

诊断翻译_结果模棱两可

一项TRANSLATION_AMBIGUOUS发现包括两个关键字段,可帮助您理解分歧:

  • options— 相互竞争的逻辑解释(最多 2 个)。每个选项都包含自己的翻译,包括前提、主张和信心。比较各个选项,看看翻译模型在哪些方面存在分歧。

  • differenceScenarios— 场景(最多 2 个),说明不同的解释在含义上有何不同,变量赋值突显了歧义的实际影响。

检查这些字段以确定歧义的具体来源,然后应用以下列表中的相应修复方法。

重叠的变量定义

当多个变量可以合理地表示同一个概念时,翻译模型在使用哪一个变量上会存在分歧。

症状:TRANSLATION_AMBIGUOUS调查结果options中的显示了分配给不同变量的相同概念。例如,一个选项将 “2 年服务期” 分配给,tenureMonths = 24而另一个选项则将其分配给。monthsOfService = 24

修复:将重叠的变量合并为具有全面描述的单个变量。更新所有引用已删除变量的规则以使用其余变量。

示例

之前(重叠) 之后(合并)

tenureMonths: “员工在几个月内工作了多长时间。”

monthsOfService: “员工的服务月数。”

tenureMonths:“员工连续受雇的完整月数。当用户提及服务年限时,请转换为月(例如,2 年 = 24 个月)。该变量包含所有与雇佣期限、服务年限、在公司任职时间或资历相关的参考信息。”

(删除monthsOfService和更新规则。)

变量描述不完整

变量描述缺乏用户在日常语言中如何引用概念的细节,因此很难将输入映射到正确的变量。

症状:options显示正确的变量但具有不同的值,或者翻译分配的值与用户所说的值不符。例如,“2 年” 被翻译为,tenureMonths = 2而不是tenureMonths = 24

修复:更新变量描述以包括单位换算规则、同义词和替代短语。撰写全面的变量描述有关详细指导,请参阅。

示例

之前(不完整) 之后(全面)
isFullTime: “全职状态。” isFullTime:“员工是全职工作(真)还是兼职(假)。当用户提到 “全职”、“全时工作” 或每周工作 40 小时以上时,设置为 true。当用户提到'兼职'、'减少工作时间'或每周工作少于40小时时,设置为false。”

值格式不一致

当系统不确定如何格式化数字、日期或百分比等值时,可能会出现翻译歧义。

症状:options显示的变量相同,但值格式不同。例如,一个选项将 “5%” 转换为,interestRate = 5而另一个选项则将其转换为。interestRate = 0.05

修复:更新变量描述以指定预期格式并包括转换规则。请参阅在变量描述中指定单位和格式

输入文本模棱两可

有时,输入本身确实含糊不清——它包含模糊的代词、不明确的参考文献或可以用多种方式解释的陈述。

症状:options节目对同一段文字的解释截然不同。例如,“他们能请假吗?” 可以指任何类型的员工。

修复:如果这是测试,请重写输入以使其更具体。在运行时,您的应用程序在收到TRANSLATION_AMBIGUOUS结果时应要求用户进行澄清。有关集成模式,请参阅在您的应用程序中集成自动推理检查

调整置信度阈值

如果您看到的输入TRANSLATION_AMBIGUOUS结果不明确,则可以调整置信阈值。降低阈值允许模型协议较少的翻译继续进行验证,从而减少TRANSLATION_AMBIGUOUS结果,但会增加错误翻译的风险。

重要

调整阈值应该是最后的手段。在大多数情况下,改进变量描述或删除重叠变量是更好的解决方法,因为它可以解决根本原因。有关阈值工作原理的更多信息,请参阅置信度阈值

修复规则问题

当翻译正确但策略逻辑与您的域名不匹配时,就会出现规则问题。您已确认为正确的变量分配了正确的值,但是验证结果仍然是错误的。

在你预期的时候生效无效

该保单没有禁止索赔的规则。回复与您的领域知识相矛盾,但政策允许这样做。

诊断:看看调查结果supportingRules中的。这些是证明索赔有效的规则。检查这些规则是否正确或是否缺少规则。

常见原因和解决方法:

  • 缺少规则。您的保单没有涵盖这种情况的规则。添加一条捕获约束条件的新规则。例如,如果政策允许所有全职雇员休育儿假,但应要求有12个月的任期,请添加:(=> (and isFullTime (<= tenureMonths 12)) (not eligibleForParentalLeave))

  • 规则过于宽松。现有规则允许的内容超出了应有的范围。编辑规则以添加缺失的条件。例如,更改(=> isFullTime eligibleForParentalLeave)(=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave)

  • 缺少变量。该策略没有用于捕捉相关概念的变量。添加变量,写出清晰的描述,然后创建引用该变量的规则。

在你预期的有效时变为无效

该政策有一条错误地禁止索赔的规则。

诊断:看看调查结果contradictingRules中的。这些规则反驳了这一说法。检查这些规则是否正确。

常见原因和解决方法:

  • 规则过于严格。现有规则会阻止有效的场景。编辑规则以放宽条件或添加例外。例如,如果规则要求24个月的任期,但政策只要求12个月的任期,则更新阈值。

  • 规则提取错误。自动推理检查误解了您的源文档。编辑规则以匹配预期的逻辑,或者将其删除并手动添加正确的规则。

在你期望的时候变得可满意 VALID

在某些条件下,答案是正确的,但不是所有条件下都是正确的。该政策还有响应中未涉及的其他规则。

诊断:比较发现claimsFalseScenario中的claimsTrueScenario和。它们之间的区别显示了响应中未提及的条件。

常见原因和解决方法:

  • 回复不完整。测试结果未提及政策要求的所有条件。更新测试输出以包含缺失的条件,或者将预期结果更改为 “SATISFIABLE如果您的用例可以接受不完整的响应”。

  • 政策有不必要的规则。该政策要求的条件与此场景无关。查看附加规则是否应适用,如果不适用,则将其删除。

修复不可能的结果

IMPOSSIBLE结果意味着自动推理检查无法评估索赔,因为前提相互矛盾或政策本身包含相互矛盾的规则。有两个截然不同的原因。

输入中的矛盾

测试输入包含相互矛盾的语句。例如,“我是一名全职员工,也是兼职员工” isFullTime = false 同时设isFullTime = true定,这在逻辑上是不可能的。

诊断:检查发现中的translation场所。查找分配了相互矛盾值的变量。

修复:如果这是测试,请重写输入以消除矛盾。在运行时,您的应用程序应通过要求用户澄清其输入来处理IMPOSSIBLE结果。

政策中的冲突

该政策包含相互矛盾的规则,这使得自动推理检查无法就涉及相互冲突的规则的输入得出结论。

诊断:如果输入有效(没有矛盾的前提),则问题出在政策中。检查调查结果中的contradictingRules字段,确定哪些规则存在冲突。另请查看质量报告(请参阅使用质量报告),它会自动标记相互冲突的规则。

常见原因和解决方法:

  • 相互矛盾的规则。对于相同的条件,有两条规则得出相反的结论。例如,一条规定全职员工有资格休假,而另一条规定第一年的员工没有资格休假,但没有具体说明全职员工在第一年的情况。将这些规则合并为一条带有明确条件的规则:(=> (and isFullTime (> tenureMonths 12)) eligibleForLeave)

  • 纯粹的断言。像这样的赤裸裸的断言(= eligibleForLeave true)使得任何输入都无法声称用户符合资格。将赤裸的断言重写为含义。请参阅使用含义 (=>) 来构造规则

  • 循环依赖。以创建逻辑循环的方式相互依赖的规则。简化规则以打破循环,或者使用中间变量来明确逻辑。

使用注释来修复您的政策

注释是您在测试失败时应用于政策的有针对性的更正。与其手动编辑规则和变量,不如使用注释来描述所需的更改,然后让自动推理检查应用它。注释可通过控制台和 API 获得。

在控制台中应用注释

  1. 打开失败的测试并查看结果以了解问题。

  2. 修改测试条件(例如,添加前提或更改预期结果),然后重新运行测试。如果修改后的测试返回了您期望的结果,则可以将此修改作为注释应用。

  3. 选择 “应用批注”。自动推理检查会启动构建工作流程,根据您的反馈将更改应用于您的政策。

  4. 在 “查看政策变更” 屏幕上,查看对策略规则、变量和类型的拟议更改。然后选择接受更改

使用 API 应用注释

使用 StartAutomatedReasoningPolicyBuildWorkflow API REFINE_POLICY 以编程方式应用注释。将完整的当前策略定义与注释一起传递。

注释类型包括:

  • 变量注释:addVariableupdateVariable、、deleteVariable — 添加缺失的变量、改进描述或删除重复项。

  • 规则注释:addRuleupdateRuledeleteRuleaddRuleFromNaturalLanguage — 修复不正确的规则、添加缺失的规则或移除冲突的规则。用于addRuleFromNaturalLanguage用通俗易懂的英语描述规则,然后让自动推理检查将其转换为形式逻辑。

  • 类型注释:addTypeupdateTypedeleteType — 管理自定义类型(枚举)。

  • 反馈注释:updateFromRulesFeedbackupdateFromScenarioFeedback— 提供有关特定规则或场景的自然语言反馈,让自动推理检查推断出必要的更改。

示例:使用注释添加缺失的变量和规则

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 注释后

规则:(=> isFullTime eligibleForParentalLeave)

没有tenureMonths变量。

新变量:tenureMonths(int)— “员工连续受雇的完整月数。”

更新了规则:(=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave)

示例 2:修复导致翻译模糊的重叠变量

问题:两个变量(tenureMonthsmonthsOfService)代表相同的概念,导致翻译不一致。

注释:

  1. 用于 monthsOfServicedeleteVariable

  2. updateVariable因为tenureMonths其描述有所改进,涵盖了用户可能提及雇佣期限的所有方式。

  3. updateRule对于任何引用的规则monthsOfService,将其更改为使用tenureMonths

示例 3:修复导致不可能结果的裸露断言

问题:该规则(= eligibleForParentalLeave true)是一个纯粹的断言,使得任何输入都无法声称用户不符合资格。

注释:

  1. deleteRule简而言之。

  2. 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结果。

修复:删除未使用的变量,除非您计划在将来的迭代中添加引用它们的规则。

未使用的类型值

自定义类型(枚举)中未被任何规则引用的值。例如,如果你的LeaveType枚举具有父母、医疗、丧亲和个人的值,但没有规则引用 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 与自动推理策略配合使用