本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将自动推理检查集成到您的应用程序中
在护栏中部署自动推理策略后(请参阅在应用程序中部署自动推理策略),您可以在运行时使用它来验证 LLM 响应并根据反馈采取行动。本页介绍如何调用验证 API,如何以编程方式解释发现结果,以及如何实现常见的集成模式,例如重写无效的响应和提出澄清问题。
自动推理检查仅在检测模式下运行——它们返回结果和反馈,而不是屏蔽内容。您的应用程序负责决定如何处理调查结果:提供响应、重写响应、要求澄清或回退到默认行为。
自动推理检查如何评估内容
Automated Reasoning 检查会将你提交的内容转化为逻辑含义(if/then“” 关系),然后根据你的政策规则检查这种含义。翻译会生成两种逻辑语句:
-
前提 — “如果” 方面:为推理设定背景的先前条件和场景事实(例如,用户陈述自己的情况的事实,或者响应的答案所依赖的条件)。场所是可选的。
-
索赔 — “然后” 方面:根据您的保单规则进行验证的断言(通常是模型回复中的实质性陈述)。
自动推理检查在翻译内容时决定哪些陈述是前提,哪些是主张,分割不是直接从输入字段中提取的。您可以通过 API 控制每段内容是作为用户端输入(问题或陈述的条件)还是代理端输入(验证的响应)输入。query限定符将内容标记为用户端;guardContent(或未加标签的文本)将其标记为代理端;groundingSource自动推理检查会忽略。然后,翻译从合并的输入中得出前提和主张。
是否必须标记内容以及如何标记内容取决于您使用的 API。
| API | 需要标记? | 内容如何进入自动推理检查 |
|---|---|---|
ApplyGuardrail |
否(可选) | 对您通过的所有内容进行评估。无论是作为用户端 (query) 还是代理端 () 的输入输入,每个内容块都是qualifiers设置的;没有限定符的块默认为代理端。guard_content ApplyGuardrail不会代表您附加模型回复,因此您的内容必须包含至少一个代理方(声明)区块。 |
Converse(仅限纯文本) |
是 | 普通text方块没有标记,因此自动推理检查没有要评估的内容,因此会被跳过 (automatedReasoningPolicyUnits: 0)。使用方guardContent块选择加入。 |
Converse(带有 guardContent) |
是 | qualifiers在guardContent方块上使用来标记用户端和代理端的内容。模型的响应会自动附加为代理端(声明)块。 |
InvokeModel |
是 | 用 XML 标签包装输入文本,并在请求配置tagSuffix中进行设置。模型的响应会自动附加为代理端(声明)块。 |
API 之间的主要区别
-
在 an
InvokeModeld 上Converse,模型的响应会自动附加为代理方(声明)块。因此,只有您标记的输入query仍会运行自动推理检查,即响应会提供索赔。 -
在开启时
InvokeModel省略标签或仅发送纯文本不会产生错误,但不会应用自动推理检查。Converse响应中用表示了这一点automatedReasoningPolicyUnits: 0。 -
开启
InvokeModel,不带限定符的护栏 XML 标签之间的文本默认为代理端(声明)内容。 -
自动推理检查会评估响应(代理端内容);它们不会在仅限独立
INPUT的评估中运行。 -
使用
ApplyGuardrail时,不会为您附加模型回复,因此您提交的内容必须至少包含一个代理方(声明)块。如果不是,则请求返回ValidationException。
集成概述
在运行时,集成遵循以下流程:
User question ──► LLM generates response ──► Validate response │ ┌─────────┴─────────┐ │ │ VALID Not VALID │ │ ▼ ▼ Serve response Inspect findings to user │ ┌────────┴────────┐ │ │ OTHER FINDING TRANSLATION_ TYPES AMBIGUOUS / SATISFIABLE │ │ ▼ ▼ Rewrite using Ask user for AR feedback clarification │ │ ▼ ▼ Validate again Validate with clarified input
自动推理结果将通过任何支持 Amazon Bedrock Guardrails 配置的 API 返回:
-
ApplyGuardrail— 独立验证 API。如果您想独立于 LLM 调用验证内容,请使用此选项。这是自动推理检查的推荐方法,因为它可以让你完全控制哪些内容需要验证以及何时进行验证。 -
Converse以及InvokeModel— 带护栏配置的 LLM 调用 API。自动推理结果将在响应trace字段中返回。
ApplyGuardrail 使用自动推理检查致电
ApplyGuardrail评估您通过的所有内容。标记是可选的:默认情况下,每个内容块都被视为代理端(声明)内容,并根据您的策略规则进行验证,这是最简单的集成路径。为了给自动推理检查提供额外的上下文,你可以在内容块qualifiers上设置以将其标记为用户端 (query) 输入。与Converse和不同InvokeModel,ApplyGuardrail它不会为您附加模型回复,因此您提交的内容必须至少包含一个索赔块;否则请求将返回。ValidationException
请求结构
guardrailIdentifier(必需)-
护栏 ID 或 ARN。使用附有自动推理策略的护栏。
guardrailVersion(必需)-
护栏版本号(例如,
1)。对生产工作负载使用编号版本,不是DRAFT。 source(必需)-
OUTPUT在验证 LLM 响应时设置为。验证用户提示INPUT时设置为。对于自动推理检查,通常需要验证 LLM 输出。 content(必需)-
要验证的内容块数组。每个区块都包含一个包含要检查内容的
text字段。您可以将用户问题和 LLM 响应作为单独的内容块传递,也可以将它们组合成一个块。
示例:使用验证 LLM 响应 AWS CLI
aws bedrock-runtime apply-guardrail \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --source OUTPUT \ --content '[ { "text": { "text": "User: Am I eligible for parental leave if I have been working here for 2 years full-time?\nAssistant: Yes, you are eligible for parental leave." } } ]'
示例:使用 Python (boto3) 验证 LLM 响应
import boto3 import json bedrock_runtime = boto3.client("bedrock-runtime", region_name="us-east-1") response = bedrock_runtime.apply_guardrail( guardrailIdentifier="your-guardrail-id", guardrailVersion="1", source="OUTPUT", content=[ { "text": { "text": ( "User: Am I eligible for parental leave if I have been " "working here for 2 years full-time?\n" "Assistant: Yes, you are eligible for parental leave." ) } } ], ) # The AR findings are in the assessments for assessment in response.get("assessments", []): ar_assessment = assessment.get("automatedReasoningPolicy", {}) findings = ar_assessment.get("findings", []) for finding in findings: # Each finding is a union — exactly one key is present # Possible keys: valid, invalid, satisfiable, impossible, # translationAmbiguous, tooComplex, noTranslations print(json.dumps(finding, indent=2, default=str))
响应结构
ApplyGuardrail响应包含一个assessments数组。每个评估都包含一个带有findings数组的automatedReasoningPolicy对象。每个发现都是一种联合类型,恰好存在以下键之一:
validinvalidsatisfiableimpossibletranslationAmbiguoustooComplexnoTranslations
有关每种查找结果类型及其字段的详细说明,请参见调查结果和验证结果。
使用自动推理检查致电 Converse
只有当Converse请求至少包含一个guardContent区块时,才会对请求进行自动推理检查。仅发送普通请求text不会运行自动推理检查。
仅限纯文本(已跳过自动推理检查)
如果您的Converse请求仅使用普通text方块(不使用方guardContent块),则不会标记文本以进行护栏评估,因此 Automated Reasoning 检查无需评估,因此会被跳过:
{ "messages": [{"role": "user", "content": [{"text": "Apply a 20% discount to my order"}]}] }
此请求返回automatedReasoningPolicyUnits: 0。其他防护政策(内容、主题、文字和敏感信息)仍会对内容进行评估;仅跳过自动推理检查。要运行自动推理检查,请使用下一节所示的guardContent方块。
重要
跳过自动推理检查后,请求仍然成功且没有错误,因此配置错误的请求可能会静默失效。请务必通过检查大automatedReasoningPolicyUnits于响应0中的配置来确认您的配置。值为,0表示即使请求成功了,自动推理检查也没有运行(例如,因为内容未被标记)。
使用 GuardContent 块
要运行自动推理检查Converse,请将要评估的内容封装在一个guardContent区块中并设置其限定符。这就是你如何标记哪些内容是用户端的,哪些是代理端的。
注意
ConverseAPI 使用 snake_case 作为限定符字符串 (guard_content,grounding_source),而 XML InvokeModel 标签使用 camelCase (,)。guardContent groundingSource它们映射到相同的底层角色。
下表显示了每个限定词如何为自动推理检查标记内容。
| 限定符字符串(snake_case) | XML 标签等效项(驼峰大写) | 自动推理输入角色 |
|---|---|---|
"query" |
query |
User-side— 用户的问题或陈述的条件。提供翻译可以借鉴的上下文。 |
"guard_content" |
guardContent |
Agent-side— 要根据您的政策进行验证的内容。提供翻译检查的索赔。 |
"grounding_source" |
groundingSource |
被自动推理检查(上下文基础检查使用)忽略。 |
限定符仅设定内容是用户端还是代理端;Automated Reasoning 检查在翻译组合输入时会得出实际前提和主张。未指定限定符的区块默认为guard_content(代理端)。你可以在一个区块上指定多个限定符。优先顺序是guard_content > query > grounding_source。
注意
开Converse启后,模型的响应会自动附加为代理端(声明)块,因此仅使用区块的请求query仍会运行自动推理检查。(当你ApplyGuardrail直接调用时,不会附加任何响应,因此你必须自己提供至少一个代理端区块,否则请求会返回 a.)ValidationException
示例:使用自动推理限定符调用 Converse AWS CLI
aws bedrock-runtime converse \ --model-id "model-id" \ --guardrail-config '{ "guardrailIdentifier": "your-guardrail-id", "guardrailVersion": "1", "trace": "enabled" }' \ --messages '[ { "role": "user", "content": [ { "guardContent": { "text": { "text": "Apply a 20% discount to my order and confirm it is done.", "qualifiers": ["query"] } } } ] } ]'
自动推理检查运行时
下表汇总了是否针对每个Converse请求形状运行自动推理检查。在它们运行的每种情况下,模型的响应都会附加为代理端(声明)块。
| 请求形状 | 自动推理检查正在运行? |
|---|---|
只有普通text方块,没有 guardContent |
否 — 内容未加标签,因此会跳过检查 () automatedReasoningPolicyUnits: 0 |
有带guard_content或没有预选赛的guardContent方块 |
是 |
只有guardContent方块才有 query |
是 — 随附的模型回复提供了索赔 |
只有guardContent方块才有 grounding_source |
是 — 随附的模型回复提供了索赔。grounding_source区块本身会被忽略(它既没有提供前提也没有提供声明),但是请求仍然运行,因为响应提供了声明内容。 |
InvokeModel 使用自动推理检查致电
警告
您必须使用 XML 护栏标签标记您的输入,以便进行自动推理检查,以评估响应。如果没有标签,自动推理检查就会返回 automatedReasoningPolicyUnits: 0 — 不会引发错误,也不会进行评估。
工作原理
InvokeModel自动推理检查需要两样东西:
-
A
tagSuffix在人体的amazon-bedrock-guardrailConfig物体中。 -
用使用该后缀的 XML 标签包装的输入文本。
XML 标签格式如下所示:
<amazon-bedrock-guardrails-QUALIFIER_SUFFIX>text</amazon-bedrock-guardrails-QUALIFIER_SUFFIX>
其中:
-
QUALIFIER是queryguardContent、或groundingSource(XML 中的驼峰大写)之一。 -
SUFFIX与请求正文中的tagSuffix值相匹配。 -
tagSuffix必须匹配模式^[a-zA-Z0-9][a-zA-Z0-9-_]{0,18}[a-zA-Z0-9]$(2—20 个字符)。
自动推理检查的标签角色
| XML 标签限定符 | 自动推理输入角色 | 含义 |
|---|---|---|
query |
User-side | 用户的问题或陈述的条件。提供翻译可以借鉴的上下文。 |
guardContent |
Agent-side | 要根据您的政策进行验证的内容。提供翻译检查的索赔。 |
groundingSource |
Ignored | 不用于自动推理检查(用于上下文基础检查)。 |
限定符仅设置标记的文本是用户端还是代理端输入;自动推理检查在翻译组合输入时会得出前提和声明。使用标记用户提示query以提供检查上下文。模型的输出会自动附加为代理端(声明)块,因此query仅用标记提示符就足以运行检查。
注意
不带限定符的护栏标签之间的文本默认为代理方(声明)内容。由于InvokeModel将模型的响应作为索赔追加,因此仅为提示添加标签的请求query仍会运行自动推理检查。(这与直接调用不同,直接ApplyGuardrail呼叫不附加任何回应,因此ValidationException如果您没有提供索赔内容,则返回。)
Multi-tag 优先级和嵌套规则
单个文本段可以用多种嵌套标签类型包装。当多个标签应用于同一内容时,优先级决定自动推理角色:guardContent > query > groundingSource。如果内容同时使用guardContent和标记query,则将其视为版权主张。
以下嵌套规则适用:
-
可以嵌套不同类型的标签(例如,
<amazon-bedrock-guardrails-query_arp><amazon-bedrock-guardrails-guardContent_arp>text</amazon-bedrock-guardrails-guardContent_arp></amazon-bedrock-guardrails-query_arp>)。 -
相同类型的标签不能自嵌套,并且标签必须按照与打开顺序相反的顺序关闭。无效的标签结构会返回
ValidationException。
示例:使用 “自动推理” 标签进行呼叫 InvokeModel AWS CLI
aws bedrock-runtime invoke-model \ --model-id "model-id" \ --guardrail-identifier "your-guardrail-id" \ --guardrail-version "1" \ --trace "ENABLED" \ --cli-binary-format raw-in-base64-out \ --body '{ "anthropic_version": "bedrock-2023-05-31", "max_tokens": 256, "amazon-bedrock-guardrailConfig": { "tagSuffix": "arp" }, "messages": [ { "role": "user", "content": [ { "type": "text", "text": "<amazon-bedrock-guardrails-query_arp>Apply a 20% discount to my order and confirm it is done.</amazon-bedrock-guardrails-query_arp>" } ] } ] }' \ output.json
此请求返回automatedReasoningPolicyUnits: 1,自动推理结果正在追踪中。
默认行为(不带标签)
没有 XML 标签的同一个请求使用纯文本:
"text": "Apply a 20% discount to my order and confirm it is done."
此请求返回 automatedReasoningPolicyUnits: 0 — 自动推理检查未运行,也未引发任何错误。护栏仍会评估其他策略(内容、主题、单词和敏感信息),但完全跳过了自动推理检查。
在运行时解释自动推理结果
要以编程方式对自动推理结果采取行动,您的应用程序需要提取结果类型、翻译详细信息以及支持或相互矛盾的规则。以下各节说明了如何解析结果的每个部分。
确定查找类型
每个发现都是一个结合——只有一个钥匙存在。检查存在哪个密钥以确定查找类型:
def get_finding_type(finding): """Return the finding type and its data from an AR finding union.""" for finding_type in [ "valid", "invalid", "satisfiable", "impossible", "translationAmbiguous", "tooComplex", "noTranslations" ]: if finding_type in finding: return finding_type, finding[finding_type] return None, None
阅读翻译
大多数查找类型都包含一个translation对象,该对象显示自动推理检查如何将自然语言输入转换为形式逻辑。翻译包含:
-
premises— 从输入中提取的条件(例如,isFullTime = true,tenureMonths = 24)。 -
claims— 要验证的断言(例如,eligibleForParentalLeave = true)。 -
untranslatedPremises— 无法映射到策略变量的部分输入。这些部分未经验证。 -
untranslatedClaims— 无法映射到保单变量的索赔。
检查untranslatedPremisesuntranslatedClaims并了解验证的范围。VALID结果仅涵盖已翻译的声明,未翻译的内容未经过验证。
阅读支持或相互矛盾的规则
根据查找结果的类型,查找结果包括解释结果的规则:
-
valid调查结果包括supportingRules——证明索赔正确性的保单规则。 -
invalid调查结果包括contradictingRules——索赔违反的政策规则。 -
satisfiable调查结果包括aclaimsTrueScenario和aclaimsFalseScenario——显示了主张的真实和错误的条件。
这些规则和场景是中描述的重写模式的关键输入。使用 AR 反馈重写无效的回复
确定聚合结果
单个验证请求可以返回多个结果。要确定总体结果,请按严重程度对结果进行排序,然后选择最差的结果。从最差到最佳的严重性顺序为:translationAmbiguousimpossible、invalid、、satisfiable、valid。
SEVERITY_ORDER = { "tooComplex": 0, "translationAmbiguous": 0, "impossible": 1, "invalid": 2, "satisfiable": 3, "valid": 4, "noTranslations": 5, } def get_aggregate_result(findings): """Return the worst finding type from a list of findings.""" worst = None worst_severity = float("inf") for finding in findings: finding_type, _ = get_finding_type(finding) severity = SEVERITY_ORDER.get(finding_type, 0) if severity < worst_severity: worst_severity = severity worst = finding_type return worst
在应用程序中处理验证结果
使用汇总结果来决定您的应用程序接下来要做什么。下表汇总了每种结果类型的建议操作。
| 结果 | 含义 | 推荐操作 |
|---|---|---|
valid |
考虑到前提和您的政策规则,该答案在数学上被证明是正确的。 | 向用户提供响应。记录调查结果以供审计(请参阅建立审计记录)。 |
invalid |
回复与您的政策规则相矛盾。该contradictingRules字段标识违反了哪些规则。 |
使用自动推理反馈重写回复(请参阅使用 AR 反馈重写无效的回复)。如果多次尝试后重写失败,请屏蔽响应并返回备用消息。 |
satisfiable |
在某些条件下,答案是正确的,但不是所有条件下都是正确的。这没有错,但它不完整——它没有提及所有要求。 | 重写响应以包含缺失的条件。使用claimsFalseScenario来识别缺少的内容。或者,你可以让你的法学硕士询问用户澄清问题。 |
impossible |
前提相互矛盾,或者政策包含相互矛盾的规则。 | 要求用户澄清他们的输入(请参阅提出澄清问题)。如果问题仍然存在,则可能表明存在政策问题,请查看质量报告。 |
translationAmbiguous |
输入有多种有效解释。翻译模型在如何将自然语言映射到政策变量上存在分歧。 | 要求用户进行澄清以解决模棱两可之处。使用options和differenceScenarios字段生成有针对性的澄清问题。 |
tooComplex |
输入超出了逻辑分析的处理限制。 | 通过将输入分成较小的部分来简化输入,或者返回一条说明无法验证响应的备用消息。 |
noTranslations |
输入的内容与您的政策的域名无关。无法映射任何策略变量。 | 内容与本政策无关紧要。在没有 AR 验证的情况下提供响应,或者使用其他护栏组件(例如主题策略)来处理题外内容。 |
使用 AR 反馈重写无效的回复
Automated Reasoning 检查最强大的集成模式是重写循环:当响应为invalid或时satisfiable,您的应用程序会构造一个包含原始响应、具体发现和策略规则的提示,然后要求 LLM 重写响应以使其与策略保持一致。再次验证重写的响应,循环将继续,直到响应达到valid或达到最大迭代次数。
重写循环流程
LLM generates initial response │ ▼ Validate with ApplyGuardrail ◄──────────────────┐ │ │ ▼ │ ┌─────┴─────┐ │ │ │ │ VALID Not VALID │ │ │ │ ▼ ▼ │ Done Construct rewriting prompt │ with findings + rules │ │ │ ▼ │ LLM rewrites response │ │ │ ▼ │ Max iterations? ──── No ────────────────┘ │ Yes │ ▼ Return best response with warning
构造重写提示
重写提示应包含 AR 发现的三条信息:
-
未通过验证的原始响应。
-
具体调查结果——包括翻译后的前提、索赔以及相互矛盾或支持规则。
-
重写响应以使其与策略规则一致的指令。
重写提示模板示例:
The following response was checked against our policy and found to be {finding_type}. Original response: {original_response} The validation found the following issue: - Premises (what was understood from the input): {premises} - Claims (what was asserted): {claims} - Contradicting rules: {contradicting_rules} Please rewrite the response so that it is consistent with the policy document. Keep the same helpful tone and answer the user's question accurately based on the rules. If you cannot provide an accurate answer without more information, explain what additional information is needed.
提示
务必在重写请求或策略规则中包含检索增强生成 (RAG) 内容,以便 LLM 在重写时拥有所需的所有上下文。重写提示模板提供了具体的发现细节,而系统提示则提供了更广泛的策略背景。这种双上下文方法在开源重写聊天机器人示例
重写最佳实践
-
设置最大迭代次数。重写循环应该有一个硬限制(通常是 2-5 次迭代),以防止无限循环。如果响应仍未
valid达到最大迭代次数,则返回带有警告的最佳响应或回退到默认消息。 -
按优先顺序处理调查结果。当返回多个发现结果时,请先解决最严重的发现。严重性顺序为:
translationAmbiguous、impossible、invalid、satisfiable、valid。 -
在系统提示符中包含策略上下文。LLM 需要访问源文档或完整政策规则才能准确地重写。您可以使用知识库将您的文档包含在生成请求中,也可以使用
ExportAutomatedReasoningPolicyVersionAPI 检索策略定义并将其格式化为 LLM。 -
记录每次迭代。记录每次迭代的原始响应、调查结果、重写提示和重写的响应。此审计跟踪对于调试和合规性非常有用(请参阅建立审计记录)。
提出澄清问题
当自动推理检查返回translationAmbiguoussatisfiable、或impossible结果时,法学硕士可能没有足够的信息来准确地重写响应。在这些情况下,您的应用程序可以要求用户进行澄清,然后将答案纳入下一次验证尝试中。
何时要求澄清
-
translationAmbiguous— 输入有多种有效解释。该options字段显示了相互竞争的解释,该differenceScenarios字段显示了它们在实践中的不同之处。使用它们来生成有关特定歧义的有针对性的问题。 -
satisfiable— 在某些条件下,响应是正确的,但不是所有条件下都是正确的。claimsFalseScenario显示了在何种情况下响应会不正确。向用户询问这些具体情况。 -
impossible— 输入内容包含相互矛盾的陈述。要求用户澄清矛盾。 -
重写失败 — 如果 LLM 无法在多次尝试
valid后重写响应,则可能需要用户提供其他上下文。要求法学硕士根据调查结果提出澄清性问题。
澄清模式
澄清流程的工作原理如下:
-
从 AR 结果中提取模棱两可的变量或缺失的条件。
-
生成澄清问题 — 可以从查找字段中以编程方式生成问题,也可以要求法学硕士根据发现提出问题。
-
向用户提出问题并收集答案。
-
将答案整合到上下文中并生成新的回应。
-
使用验证新的响应
ApplyGuardrail。
示例:根据satisfiable调查结果生成澄清问题
def generate_clarifying_questions(finding_data, user_question): """Ask the LLM to generate clarifying questions from a SATISFIABLE finding.""" claims_true = json.dumps( finding_data.get("claimsTrueScenario", {}), indent=2, default=str ) claims_false = json.dumps( finding_data.get("claimsFalseScenario", {}), indent=2, default=str ) prompt = ( f"A user asked: {user_question}\n\n" f"The answer is correct when these conditions hold:\n{claims_true}\n\n" f"But incorrect when these conditions hold:\n{claims_false}\n\n" f"Generate 1-3 short, specific questions to ask the user to determine " f"which conditions apply to their situation. Format each question on " f"its own line." ) return generate_response(prompt, "You are a helpful assistant.")
Open-source 重写聊天机器人示例
有关本页所述模式的完整生产风格实现,请参阅自动推理检查重写
-
一个迭代重写循环,根据自动推理反馈自动更正无效的响应。
-
Follow-up 当 LLM 需要用户提供其他上下文才能准确重写时,会提出问题。
-
一种超时机制,当用户不回答澄清问题时,它会自动恢复处理。
-
向 LLM 提示注入策略上下文,这样 LLM 就可以在重写过程中引用完整的策略规则。
-
每次验证迭代的 JSON 审计日志,以实现合规性和调试。
该示例使用带有 React 前 Python/Flask 端的后端,并通过 API 与 Amazon Bedrock 通信进行法学硕士推断,与 Amazon Bedrock Guardrails 通信进行验证。ApplyGuardrail
注意
示例应用程序在 LLM 生成提示中直接包含策略内容,无需上传文档即可支持任何自动推理策略。在生产部署中,您通常会使用 RAG 内容或向 LLM 提供原始的自然语言文档,而不是自动推理策略源代码。
建立审计记录
自动推理结果提供了数学上可验证的有效性证据。对于受监管的行业和合规场景,这种证明是一个关键的差异化因素——你可以证明,人工智能响应是根据具有特定变量分配的特定政策规则进行验证的,而不仅仅是模式匹配或概率评估。
要建立有效的审计跟踪,请记录每个验证请求的以下信息:
-
时间戳和请求 ID。验证发生的时间和请求的唯一标识符。
-
输入内容。经过验证的用户问题和 LLM 回复。
-
查找类型和详细信息。验证结果(
valid、等)invalid、翻译后的前提和索赔以及支持或相互矛盾的规则。 -
已采取行动。你的应用程序对调查结果做了什么 —— 提供了回复、重写了回复、要求澄清或屏蔽了回复。
-
重写历史。如果响应被重写,则记录每次迭代:原始响应、重写提示、重写响应以及每次迭代的验证结果。
-
策略版本。用于验证的护栏版本和策略版本。这样可以确保您以后可以重现验证结果。
示例:审计日志条目结构
{ "timestamp": "2025-07-21T14:30:00Z", "request_id": "req-abc123", "guardrail_id": "your-guardrail-id", "guardrail_version": "1", "user_question": "Am I eligible for parental leave?", "llm_response": "Yes, you are eligible for parental leave.", "validation_result": "valid", "findings": [ { "type": "valid", "premises": "isFullTime = true, tenureMonths = 24", "claims": "eligibleForParentalLeave = true", "supporting_rules": ["A1B2C3D4E5F6"] } ], "action_taken": "served_response", "rewrite_iterations": 0 }
提示
将审核日志存储在耐用、防篡改的存储中,例如启用对象锁定的 Amazon L CloudWatch ogs 或 Amazon S3。对于合规性场景,可以考虑使用 Lake 来查询整个组织的审计日志。