本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
自动推理检查概念
本页介绍自动推理检查的组成部分。了解这些概念将有助于您创建有效的策略、解释测试结果和调试问题。要详细了解自动推理检查的作用以及何时使用它们,请参阅Rules。
策略
自动推理策略是您的 AWS 账户中的一种资源,它包含一组形式逻辑规则、变量架构和可选的自定义类型。该政策对您要验证LLM响应的业务规则、法规或指导方针进行了编码。
政策是根据用自然语言描述规则的原始文档(例如人力资源手册、合规手册或产品规范)创建的。创建策略时,自动推理检查会从文档中提取规则和变量,并将它们转换为可以进行数学验证的形式逻辑。
策略、护栏和您的应用程序之间的关系如下所示:
Source Document ──► Automated Reasoning Policy ──► Guardrail ──► Your Application (natural (rules + variables + (references (calls guardrail language) custom types) a policy APIs to validate version) LLM responses)
政策的主要特征:
-
每项策略均由亚马逊资源名称 (ARN) 标识,并存在于特定的 AWS 区域中。
-
策略有一个
DRAFT版本(在控制台中称为 “工作草稿”),供您在开发期间编辑,以及为部署创建的编号不可变版本。 -
护栏可以参考草稿政策或特定的编号版本。使用编号版本意味着您可以在
DRAFT不影响已部署的护栏的情况下更新。 -
每项政策都应侧重于特定的领域(例如,人力资源福利、贷款资格、产品退货规则),而不是试图涵盖多个无关的领域。
有关创建策略的分步说明,请参阅创建自动推理策略。
富达报告
保真度报告衡量提取的策略代表其生成的源文档的准确程度。当您根据源文档创建策略时,会自动生成该报告。它提供了两个关键分数以及详细的基础信息,可将每个规则和变量与源内容中的特定陈述联系起来。
保真度报告旨在帮助非技术主题专家在无需理解形式逻辑的情况下探索和验证政策。在控制台中,源文档选项卡将保真度报告显示为从文档中提取的带编号的原子语句的表格,显示每个语句所依据的规则和变量。您可以按特定规则或变量进行筛选,并在语句中搜索内容。
保真度报告包括两个分数,每个分数介于 0.0 到 1.0 之间:
-
承保范围分数 — 表示保单对来源文件中陈述的覆盖程度。分数越高意味着政策中包含的源内容越多。
-
准确度分数 — 表示政策规则对原始材料的忠实程度。分数越高意味着提取的规则更符合原始文档的意图。
除了总分外,保真度报告还为政策中的每条规则和变量提供了详细的依据:
-
规则报告 — 对于每条规则,报告会从支持该规则的来源文件(基础陈述)中确定具体陈述,解释这些陈述如何证明规则的合理性(基本理由),并提供个人准确性分数和理由。
-
变量报告 -对于每个变量,该报告会确定支持变量定义的来源陈述,解释理由,并提供单独的准确度分数。
-
文件来源 — 源文件被分解为原子语句——从文本中提取的个别的、不可分割的事实。文档内容带有行号注释,因此您可以将每个规则和变量追溯到原始文档中的确切位置。
Rules
规则是自动推理策略的核心。每条规则都是捕获变量之间关系的形式逻辑表达式。规则使用语法子集表达,SMT-LIB
大多数规则应遵循 if-then(含蓄的)格式。这意味着规则应该有一个条件(“if” 部分)和一个由含义运算符=>连接的结论(“然后” 部分)。
Well-formed 规则(if-then 格式):
;; If the employee is full-time AND has worked for more than 12 months, ;; then they are eligible for parental leave. (=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave) ;; If the loan amount is greater than 500,000, then a co-signer is required. (=> (> loanAmount 500000) requiresCosigner)
裸露的断言(没有 if-then 结构的规则)会产生公理——这些陈述永远是正确的。这对于检查边界条件(例如账户余额为正值)很有用,但也可能使某些条件在逻辑上变得不可能,并在验证期间导致意想不到IMPOSSIBLE的结果。例如,纯粹的断言(= eligibleForParentalLeave true)意味着自动推理检查将其视为用户有资格休育儿假的事实。任何提及不符合条件的输入都会产生验证结果,IMPOSSIBLE因为它与这个公理相矛盾。
;; GOOD: Useful to check impossible conditions such as ;; negative account balance (>= accountBalance 0) ;; BAD: This asserts eligibility as always true, regardless of conditions. eligibleForParentalLeave
规则支持以下逻辑运算符:
| 运算符 | 含义 | 示例 |
|---|---|---|
=> |
含义(如果是) | (=> isFullTime eligibleForBenefits) |
and |
逻辑 AND | (and isFullTime (> tenure 12)) |
or |
逻辑 OR | (or isVeteran isTeacher) |
not |
不合逻辑 | (not isTerminated) |
= |
等于 | (= employmentType FULL_TIME) |
>, <, >=, <= |
比较 | (>= creditScore 700) |
有关编写有效规则的最佳实践,请参阅自动推理策略最佳实践。
变量
变量代表您的领域中的概念,自动推理检查使用这些概念将自然语言转化为形式逻辑和评估规则。每个变量都有名称、类型和描述。
自动推理检查支持以下变量类型:
| Type | 说明 | 示例 |
|---|---|---|
BOOL |
True 或 false 值 | isFullTime— 员工是否全职工作 |
INT |
整数 | tenureMonths— 员工工作的月数 |
NUMBER |
十进制数 | interestRate— 十进制年利率(0.05 表示 5%) |
| 自定义类型(枚举) | 定义集合中的一个值 | leaveType— 其中之一:父母、医疗、丧亲、个人 |
警告
仅使用上表中的变量类型对域进行建模。避免设计依赖于不支持的数据(例如原始字符串或自由格式文本)或需要转换步骤来计算或解释值的策略。旨在将翻译的复杂性降至最低。
自动推理检查旨在解释自然语言,并不适用于所有形式的验证。例如,验证密码是否满足一组要求最好由基于规则的确定性代码来处理,因为这取决于逐个字符评估原始值,而不是推理而不是自然语言。
注意
在策略定义中,变量名称、自定义类型名称和在自定义类型中定义的值都共享一个命名空间。这些名称在所有三个类别中都必须是唯一的。不能对变量和类型使用相同的名称,并且相同的值不能出现在多个自定义类型中。例如,如果一个LeaveType类型定义了一个OTHER值,则不能定义任何其他类型(例如Severity)OTHER,也不能命名任何变量OTHER。当你需要在多个类型中使用相似的值时,在它前面加上类型名称,以保持每个名称的唯一性,同时保留其含义——例如,LeaveType_OTHER和Severity_OTHER。
变量描述的关键作用
变量描述是影响翻译准确性的最重要因素。当自动推理检查将自然语言转换为形式逻辑时,它使用变量描述来确定哪些变量对应于文本中提到的概念。模糊或不完整的描述会导致TRANSLATION_AMBIGUOUS结果或不正确的变量分配。
示例:描述如何影响翻译
假设一位用户问:“我在这里工作了两年。我有资格享受育儿假吗?”
| 模糊的描述(可能失败) | 详细描述(可能会成功) |
|---|---|
tenureMonths:“员工工作了多长时间。” |
tenureMonths:“员工连续受雇的完整月数。当用户提及服务年限时,将其转换为月(例如,2 年 = 24 个月)。对于新员工,设置为 0。” |
由于描述模糊,自动推理检查可能不知道将 “2 年” 转换为 24 个月,或者可能根本不分配变量。有了详细的描述,翻译就毫不含糊了。
良好的变量描述应该:
-
用通俗的语言解释变量代表什么。
-
指定单位和格式(例如,“以月为单位”,“为十进制,其中 0.15 表示 15%”)。
-
包括用户可能使用的不明显的同义词和备选措辞(例如,“当用户提及'全职'或全时工作时设置为 true”)。
-
描述边界条件(例如,“为新员工设置为 0”)。
自定义类型(枚举)
自定义类型定义变量可以采用的一组命名值。它们等同于编程语言中的枚举(枚举)。当变量表示具有一组固定可能值的类别时,使用自定义类型。
示例:
| 键入名称 | 可能的值 | 使用案例 |
|---|---|---|
LeaveType |
父母, 医疗, 丧亲, 个人 | 对员工申请的休假类型进行分类 |
Severity |
关键、主要、次要 | 对问题或事件的严重程度进行分类 |
何时使用枚举与布尔值:
-
当值互斥时使用枚举 ——一个变量一次只能是一个值。例如,
leaveType可以是家长或医疗,但不能同时是两者。 -
当状态可以共存时,使用单独的布尔变量。例如,一个人既可以是资深人士,也可以是教师。使用枚举
customerType = {VETERAN, TEACHER}会强制在它们之间做出选择,当两者都适用时,就会产生逻辑矛盾。相反,使用两个布尔值:isVeteran和。isTeacher
提示
如果变量可能没有枚举中的任何值,请添加OTHER或NONE值。这样可以防止输入与任何定义值都不匹配时出现翻译问题。
翻译:从自然语言到形式逻辑
翻译是自动推理检查将自然语言(用户问题和 LLM 答案)转换为形式逻辑表达式的过程,这些表达式可以根据您的政策规则进行数学验证。了解此过程是调试问题和制定有效策略的关键。
自动推理检查通过两个不同的步骤验证内容:
-
翻译 — 自动推理检查使用基础模型 (LLM) 将自然语言输入转换为形式逻辑。此步骤将文本中的概念映射到策略的变量,并将关系表示为逻辑陈述。由于此步骤使用 LLM,因此可能包含错误。自动推理检查使用多个 LLM 来翻译输入文本,然后使用冗余翻译的语义等效性来设定置信度分数。翻译质量取决于您的变量描述与输入中使用的语言的匹配程度。
-
验证 — 自动推理检查使用数学技术(通过 SMT 求解器)来检查转换后的逻辑是否与您的策略规则一致。这个步骤在数学上是合理的 ——如果翻译正确,验证结果将是一致的。
重要
这种两步区分对于调试至关重要。如果您确定策略中的规则是正确的,那么当测试失败或返回意外结果时,问题很可能出在步骤 1(翻译),而不是步骤 2(验证)。数学验证是合理的,如果翻译正确地反映了输入的含义,则验证结果将是正确的。将调试工作重点放在改进变量描述上,并确保翻译为正确的变量分配正确的值。
示例:实际翻译
给定一个包含变量 isFullTime (BOOL)、tenureMonths (INT) 和 eligibleForParentalLeave (BOOL) 的策略以及输入:
-
问题:“我是一名全职员工,我已经在这里工作了18个月。我可以休育儿假吗?”
-
回答:“是的,你有资格享受育儿假。”
步骤 1(翻译)生成:
Premises: isFullTime = true, tenureMonths = 18 Claims: eligibleForParentalLeave = true
第 2 步(验证)根据策略规则检查这些分配(=> (and isFullTime (> tenureMonths 12)) eligibleForParentalLeave)并确认索赔是VALID。
为了提高翻译的准确性:
-
编写详细的变量描述,涵盖用户如何引用日常语言中的概念。
-
移除可能会混淆翻译的重复或接近重复的变量(例如,
tenureMonths和monthsOfService)。 -
删除未被任何规则引用的未使用变量——它们会增加翻译过程的噪音。
-
使用问答测试通过真实的用户输入来验证翻译的准确性。有关更多信息,请参阅 测试自动推理策略。
调查结果和验证结果
当自动推理检查验证内容时,它会生成一系列结果。每项发现都代表从输入中提取的事实主张,以及验证结果、使用的变量分配以及支持该结论的政策规则。总体(汇总)结果是通过按严重性顺序对发现结果进行排序并选择最差结果来确定的。从最差到最佳的严重性顺序是:TRANSLATION_AMBIGUOUSIMPOSSIBLE、INVALID、、SATISFIABLE、VALID。
调查结果的结构
结果类型决定查找结果中存在哪些字段。有关每种发现类型的深入描述,请参阅本验证结果参考节。但是,大多数查找类型共享一个包含以下组件的公共translation对象:
premises-
从输入中提取的影响索赔评估方式的背景、假设或条件。在问答格式中,前提通常是问题本身。答案还可以包含建立限制的前提。例如,在 “我是一名服务了18个月的全职员工” 中,前提是
isFullTime = true和tenureMonths = 18。 claims-
自动推理检查的事实陈述的准确性。在问答格式中,声明通常是答案。例如,在 “是的,你有资格享受育儿假” 中,索赔是
eligibleForParentalLeave = true。 confidence-
从 0.0 到 1.0 的分数表示某些自动推理检查是如何检查从自然语言到形式逻辑的翻译的。分数越高表示确定性越高。置信度为 1.0 表示所有翻译模型都同意相同的解释。
untranslatedPremises-
对原始输入文本中与前提相对应但无法转换为形式逻辑的部分的引用。这些重点介绍了自动推理认为相关但无法映射到策略变量的部分输入。
untranslatedClaims-
对原始输入文本中与索赔相对应但无法转换为形式逻辑的部分的引用。
VALID结果仅涵盖已翻译的索赔——未经翻译的索赔不予验证。
验证结果参考
每种发现都恰好是以下类型之一。该类型决定了结果的含义、查找结果中可用的字段以及应用程序的推荐操作。所有包含translation字段的查找结果类型还包括一个logicWarning字段,当翻译包含与政策规则无关的逻辑问题(例如,始终为真或始终为假的陈述)时,该字段就会出现。
| 结果 | 查找字段 | 推荐操作 |
|---|---|---|
VALID |
|
向用户提供响应。记录supportingRules并claimsTrueScenario用于审计目的——它们提供可数学验证的有效性证明。检查untranslatedPremises并untranslatedClaims检查输入中未经验证的部分。 |
INVALID |
|
不要提供回应。使用translation(查看声明的内容)和contradictingRules(查看违反了哪些规则)来重写或屏蔽响应。在重写循环中,将相互矛盾的规则和不正确的声明传递给 LLM 以生成更正的响应。 |
SATISFIABLE |
|
比较claimsTrueScenario并claimsFalseScenario确定缺失的条件。重写响应以包括生成响应所需的额外信息VALID,要求用户澄清缺失的条件,或者在提供响应时注意可能不完整。 |
IMPOSSIBLE |
|
检查输入是否包含矛盾的陈述(例如,“我是全职的,也是兼职的”)。如果输入有效,则您的政策中可能存在矛盾——检查contradictingRules并查看质量报告。请参阅对自动推理策略进行故障排除和完善。 |
TRANSLATION_AMBIGUOUS |
不包含
|
检查options以了解分歧。改进变量描述以减少歧义,合并或删除重叠的变量,或要求用户进行澄清。您也可以调整置信度阈值,请参阅置信阈值。 |
TOO_COMPLEX |
不包含 |
通过将输入分成更小的部分来缩短输入,或者通过减少变量的数量来简化策略,并避免复杂的算术(例如指数或非理数)。您可以将保单分成规模更小、更有针对性的政策。 |
NO_TRANSLATIONS |
不包含 |
每当其他调查结果中包括未经翻译的房舍或索赔时,就会将一项调查结果包括在产出中。NO_TRANSLATIONS查看其他发现,看看输入的哪些部分没有被翻译。如果内容应该是相关的,请在政策中添加变量以捕捉缺失的概念。如果内容偏离主题,可以考虑在内容到达自动推理检查之前使用主题策略对其进行过滤。 |
注意
VALID结果仅涵盖通过翻译后的场所和索赔中的保单变量捕获的部分输入。超出政策变量范围的声明未经过验证。例如,如果保单没有可变因素来说明医生的记录是否是假的,“我可以延迟提交作业,因为我有一份假医生的笔记” 可能会被视为有效。自动推理检查可能会将 “假医生的笔记” 作为未经翻译的前提纳入其调查结果。将未翻译的内容和NO_TRANSLATIONS发现视为警告信号。
置信阈值
自动推理检查使用多个基础模型将自然语言转化为形式逻辑。每个模型都独立生成自己的翻译。置信度分数代表这些翻译之间的一致性水平,具体而言,产生语义等效解释的模型的百分比。
置信度阈值是您设置的值(从 0.0 到 1.0),它确定了翻译被视为足够可靠以进行验证所需的最低一致性级别。它控制了覆盖范围和准确性之间的权衡:
-
更高的阈值(例如,0.9):需要翻译模型之间达成高度的一致性。产生的发现更少,但准确性更高。更多输入将被标记为。
TRANSLATION_AMBIGUOUS -
较低的阈值(例如,0.5):接受协议较少的翻译。产生更多的发现,但翻译不正确的风险更高。较少的输入将被标记为。
TRANSLATION_AMBIGUOUS
阈值的工作原理:
-
多个基础模型分别对输入进行转换。
-
得到等于或高于阈值的模型百分比支持的翻译会成为具有明确结果(
VALIDINVALID、等)的高置信度结果。 -
如果一个或多个翻译低于阈值,则自动推理检查将显示额外的
TRANSLATION_AMBIGUOUS发现。该发现包括有关模型之间差异的详细信息,您可以使用这些细节来改进变量描述或要求用户进行澄清。
提示
从默认阈值开始,然后根据测试结果进行调整。如果您看到的TRANSLATION_AMBIGUOUS结果太多,而这些输入本应毫不含糊,请专注于改进变量描述,而不是降低阈值。降低阈值可能会降低TRANSLATION_AMBIGUOUS结果,但会增加错误验证的风险。