使用 Elastic 实现 LLM 可观察性:使用 Amazon Bedrock 的 Guardrails 驯服 LLM
2025年3月11日 | by mebius
作者:来自 ElasticAgi K Thomas及Daniela Tzvetkova
Elastic 针对可观察性增强的 Amazon Bedrock 集成现在包括 Guardrails 监控,可提供对 AI 安全机制的实时可见性。使用预先构建的仪表板跟踪 guardrail 性能、使用情况和政策干预。了解如何设置 Guardrails 的可观察性并监控关键信号,以加强对幻觉、有害内容和违反政策的防范。
在之前的博客中,我们向你展示了如何使用 Elastic 的集成为托管在 Amazon Bedrock 上的模型设置可观察性。现在,你可以使用增强的 Elastic Amazon Bedrock 集成轻松地为你的 Amazon Bedrock guardrails 启用可观察性。如果你之前已加入 Amazon Bedrock 集成,只需升级它,你就会自动获得所有与 guardrail 相关的更新。增强的集成提供了一个带有两个面板的单一仪表板 – 一个面板专注于整体 Bedrock 可视化,另一个面板专用于 Guardrails。你现在可以提取和可视化特定于 Guardrails 的指标和日志,例如护栏调用次数、调用延迟、文本单元利用率、与干预相关的护栏策略类型等等。
在这篇博客中,我们将向你展示如何设置 Amazon Bedrock Guardrails 的可观察性,如何使用增强型仪表板以及对哪些关键信号发出警报以有效地对 Bedrock 护栏进行可观察性覆盖。
先决条件
要关注本博客,请确保你已:
- Elastic Cloud上的帐户和 AWS 中部署的堆栈(请参阅此处的说明)。确保你使用的是 8.16.2 或更高版本。或者,你可以使用 Elastic Cloud Serverless,这是一种完全托管的解决方案,可消除基础设施管理,根据使用情况自动扩展,并让你完全专注于从数据中提取价值。
- 具有从 tgcodeAWS 提取必要数据的权限的 AWS 账户。请参阅我们的文档中的详细信息。
为 Amazon Bedrock 创建 Guardrail 的步骤
在设置 Guardrails 的可观察性之前,确保你已经为你的模型配置了 Guardrails。按照以下步骤创建 Amazon Bedrock Guardrail:
-
访问 Amazon Bedrock 控制台
使用适当的权限登录 AWS 管理控制台,并导航到 Amazon Bedrock 控制台。 -
导航到 Guardrails
在左侧菜单中,选择 Guardrails。 -
创建新 Guardrail
选择 Create guardrail。 -
提供描述性名称
输入 Guardrail 的名称,可以添加简短描述,并指定当 Guardrail 阻止用户提示时显示的消息。
示例:Sorry, I am not configured to answer such questions. Kindly ask a different question.。 -
配置 Guardrail 策略
- Content Filters/内容过滤器:调整设置以阻止有害内容和提示攻击。
- Denied Topics/禁止话题:指定要阻止的主题。
- Word Filters/词汇过滤器:定义要阻止的特定单词或短语。
- Sensitive Information Filters/敏感信息过滤器:设置过滤器以检测和移除敏感信息。
-
Contextual Grounding:/上下文基础:
- 配置 Grounding Threshold 设置最低信心水平,确保事实准确性。
- 设置 Relevance Threshold 确保回答与用户查询一致。
-
审查并创建
审核你的设置,选择 Create 以完成 Guardrail 的创建。 -
创建 Guardrail 版本
在 Version 部分,选择 Create。
可选择添加描述,然后选择 Create Version。
在创建 Guardrail 版本之后,重要的是记下 Guardrail ID 和 Guardrail Version Name。这些标识符在将 Guardrail 集成到你的应用程序时至关重要,因为在调用 Guardrail 时,你需要指定这些标识符。
示例代码:与 Amazon Bedrock Guardrails 集成
将 Amazon Bedrock 的 ChatBedrock 集成到你的 Python 应用程序中,可以启用具有可定制安全措施的高级语言模型交互。通过配置 guardrails(安全屏障),你可以确保模型遵守预定义的政策,防止其生成不适当或敏感的内容。
以下代码演示了如何将 Amazon Bedrock 与 guardrails 集成,以在 AI 生成的响应中强制执行上下文基础。它使用 AWS 凭证设置 Bedrock 客户端,定义一个参考基础语句,并使用 ChatBedrock API 处理带有上下文约束的用户查询。converse_with_guardrails
函数将用户查询与预定义的基础参考一起发送,确保生成的响应与提供的知识源一致。
设置环境变量
在运行脚本之前,配置所需的 AWS 凭证和 guardrail 设置为环境变量。这些变量允许脚本与 Amazon Bedrock 进行身份验证,并应用必要的 guardrails,以实现安全和受控的 AI 交互。
在与脚本相同的目录中创建一个 .env
文件,并添加以下内容:
AWS_ACCESS_KEY="your-access-key"
AWS_SECRET_KEY="your-secret-key"
AWS_REGION="your-aws-region"
GUARDRAIL_ID="your-guardrail-id"
GUARDRAIL_VERSION="your-guardrail-version"
创建并运行 Python 脚本
使用下面的代码创建一个 Python 脚本,并执行它与你设置的 Amazon Bedrock Guardrails 进行交互。
import os
import boto3
from dotenv import load_dotenv
from langchain_aws import ChatBedrock
import json
from botocore.exceptions import ClientError
# Load environment variables
load_dotenv()
# Function to check for hallucinations using contextual grounding
def check_hallucination(response):
output_assessments = response.get("trace", {}).get("guardrail", {}).get("outputAssessments", {})
# Iterate over all assessments
for key, assessments in output_assessments.items():
for assessment in assessments:
contextual_policy = assessment.get("contextualGroundingPolicy", {})
if "filters" in contextual_policy:
grounding = relevance = None
grounding_threshold = relevance_threshold = None
for filter_result in contextual_policy["filters"]:
filter_type = filter_result.get("type")
if filter_type == "RELEVANCE":
relevance = filter_result.get("score", 0)
relevance_threshold = filter_result.get("threshold", 0)
elif filter_type == "GROUNDING":
grounding = filter_result.get("score", 0)
grounding_threshold = filter_result.get("threshold", 0)
if relevance
识别幻觉与上下文基础
上下文基础功能通过将模型的响应与参考信息进行比较,证明在识别潜在幻觉方面是有效的。相关性和基础评分提供了量化的指标,用于评估模型输出的准确性。
下面是 Python 脚本运行输出,展示了Grounding Score如何帮助检测幻觉:
============================================================
Guardrail Assessment
============================================================
**Model Response:**
Sorry, I am not configured ttgcodeo answer such questions. Kindly ask a different question.
**Guardrail Assessment:**
Is Hallucination : True
**Contextual Grounding Policy Scores:**
- Relevance Score : 1.00 (Threshold: 0.99)
- Grounding Score : 0.03 (Threshold: 0.99)
============================================================
在这里,基础评分为 0.03,显著低于配置的阈tgcode值 0.99,这表明响应缺乏事实准确性。由于评分低于阈值,系统将该响应标记为幻觉,强调了监控 guardrail 输出以确保 AI 安全的重要性。
配置 Amazon Bedrock Guardrails 的指标与日志收集
Elastic 使得从 Amazon Bedrock Guardrails 收集日志和指标变得简单,通过 Amazon Bedrock 集成,你可以轻松收集所需的日志和指标。默认情况下,Elastic 提供了一套精选的日志和指标,但你可以根据需求自定义配置。该集成支持使用 Amazon S3 和 Amazon CloudWatch Logs 收集日志,并能够从你选择的 AWS 区域按指定间隔收集指标。
按照以下步骤启用指标和日志的收集:
-
导航到 Amazon Bedrock 设置
在 AWS 控制台中,进入 Amazon Bedrock,并打开设置部分。
-
选择日志发送目标
选择是否将日志发送到 Amazon S3 或 Amazon CloudWatch Logs。
-
提供所需详细信息
- 使用 Amazon S3 时:可以通过 S3 通知事件中引用的对象(通过读取 SQS 队列)或通过直接轮询 S3 存储桶来收集日志。
- 使用 CloudWatch Logs 时:你需要创建一个 CloudWatch 日志组并记录其 ARN,因为在配置 Amazon Bedrock 和 Elastic Amazon Bedrock 集成时,这个 ARN 是必需的。
-
提供所需详细信息
- 在 Elastic 中设置 Amazon Bedrock 集成,确保日志目标与在 Amazon Bedrock 中配置的目标一致。你选择的日志来源的日志和来自你AWS 区域的指标将会自动收集。
- 接受默认设置或自定义设置
Elastic 提供了默认的日志和指标收集配置。你可以接受这些默认设置,也可以根据需要调整设置,例如收集间隔,以更好地满足你的需求。
了解 Amazon Bedrock Guardrails 的预配置仪表板
你可以通过以下任一方式访问 Amazon Bedrock Guardrails 仪表板:
-
导航到仪表板菜单
选择 Elastic 中的Dashboard菜单选项,搜索 [Amazon Bedrock] Guardrails,以打开仪表板。 -
导航到集成菜单
打开 Elastic 中的Integrations菜单,选择 Amazon Bedrock,转到Assets标签页,从仪表板资产中选择 [Amazon Bedrock] Guardrails。
Elastic 集成中的 Amazon Bedrock Guardrails 仪表板提供了有关 Guardrail 性能的深入分析,跟踪总调用次数、API 延迟、文本单元使用情况和干预率。它分析基于政策的干预,突出显示趋势、文本消耗和频繁触发的政策。仪表板还展示了 Guardrails 修改或阻止响应的实例,并提供按政策和内容源的详细调用数据。
Guardrail 调用概述
此仪表板部分提供了与 Guardrail 性能和使用相关的关键指标的全面概述:
- 总 Guardrails API 调用次数:显示 Guardrails 被调用的总体次数。
- 平均 Guardrails API 调用延迟:显示 Guardrails API 调用的平均响应时间,提供有关系统性能的洞察。
- 总文本单元使用量:指示在 Guardrail 调用期间处理的文本量。有关文本单元定价,请参阅 Amazon Bedrock 定价页面。
- 调用情况 – 有与没有 Guardrail 干预:饼图表示,展示了根据 Guardrail 活动的 LLM 调用分布情况。它显示了没有发生 Guardrail 干预、发生了政策违规并触发了干预的调用数量,以及发生了干预但未发现违规的调用数量。
这些指标有助于用户评估 Guardrail 的有效性,跟踪干预模式,并优化配置,以确保政策执行的同时保持系统性能。
Guardrail 策略类型干预
本部分提供了 Guardrail 政策干预及其影响的全面视图:
- 按策略类型的干预:条形图显示了应用于用户输入和模型输出的干预次数,按政策类型分类(例如,Contextual Grounding Policy, Word Policy, Content Policy, Sensitive Information Policy, Topic Policy)。
- 按策略类型的文本单元使用情况:面板突出显示了各种政策干预所消耗的文本单元,分别针对用户输入和模型输出。
- 策略使用趋势:词云可视化展示了最常应用的策略类型,提供干预模式的见解。
通过分析干预次数、文本单元使用情况和政策趋势,用户可以识别频繁触发的政策,优化 Guardrail 设置,并确保 LLM 交互符合合规性和安全性要求。
Prompt 和响应中 Guardrails 干预的情况
此仪表板部分显示了原始 LLM 提示、来自不同来源的输入(如 API 调用、应用程序或聊天接口)以及相应的 Guardrail 响应。文本面板展示了提示和应用 Guardrail 干预后模型的响应。当输入评估或模型响应违反配置的策略时,这些干预就会发生,导致输出被阻止或屏蔽。
该部分还包括附加细节,以增强对 Guardrail 操作的可见性。它指示是否检测到违规行为,以及违规类型(例如,GROUNDING、RELEVANCE)和采取的措施(BLOCKED、NONE)。对于 contextual grounding 检查,仪表板还显示了筛选阈值,它定义了响应被认为有效所需的最小置信度,以及置信度分数(confidence score),它反映了响应与预期标准的一致性。
通过分析违规、采取的措施和置信度分数,用户可以调整 Guardrail 阈值,在阻止不安全响应和允许有效响应之间找到平衡,从而确保最佳的准确性和合规性。此过程对于检测和减轻幻觉尤为关键 —— 即模型生成的、未与源数据对接的信息。实施背景基础检查可以帮助识别这些未接地或不相关的内容,增强像检索增强生成(RAG)这样的应用的可靠性。
Guardrail 调用按 Guardrail 策略
此部分提供了有关 Guardrails API 调用的深入信息,包括整体延迟、按不同 Guardrail 策略(通过 Guardrail ARN 标识)分类的总文本单元数以及策略版本。
Guardrail 调用按内容来源(输入和输出)
此部分提供了有关 Guardrail 性能和使用的关键指标的详细概览。包括总的 Guardrail 调用次数、应用策略的干预调用次数、在这些干预过程中消耗的文本单元量(分别针对用户输入和模型输出)以及平均 Guardrail API 调用延迟。
这些见解帮助用户理解 Guardrails 在不同策略和内容来源中的运作方式。通过分析调用次数、延迟和文本单元消耗,用户可以评估政策的有效性,跟踪干预模式,并优化配置。评估 Guardrails 如何与用户输入和模型输出交互,确保一致的执行,帮助调整阈值并改进合规策略。
配置 SLO 和警报
为了创建一个监控上下文基础准确性的 SLO,可以定义一个自定义查询 SLI,其中良好事件是满足上下文基础标准的模型响应,确保事实准确性并与提供的参考一致。
用于跟踪良好事件的查询示例如下:
gen_ai.prompt : "*qualifiers["grounding_source"]*" and
(gen_ai.compliance.violation_detected : false or
not gen_ai.compliance.violation_detected : *)
总查询考虑所有相关的交互,并进行上下文基础检查的查询示例如下:
gen_ai.prompt : "*qualifiers["grounding_source"]*"
设定一个 99.5% 的 SLO 目标,确保绝大多数响应保持事实基础。这有助于实时检测幻觉和不一致的输出。通过持续监控上下文基础准确性,你可以在不一致性影响最终用户之前,主动解决问题,重新训练模型或优化 RAG 流水线。
Elastic 的警报功能可以主动监控关键性能指标。例如,通过设置一个关于 aws_bedrock.guardrails.invocation_latency
平均值的警报,并设置 500 毫秒的阈值,你可以及时识别和解决性能瓶颈,确保政策执行保持高效而不会导致意外延迟。
结论
Elastic 的 Amazon Bedrock 集成使你可以轻松收集一套针对 LLM 驱动的应用程序(包括 Guardrails)所需的度量指标和日志。它提供了一个开箱即用的仪表盘,你可以根据特定需求进一步自定义。
如果你还没有完成这些步骤,请阅读我们之前的博客,了解如何使用 Amazon Bedrock 集成,设置你的 Bedrock 模型的 guardrails,并启用 Bedrock 集成,今天就开始监控你的 Bedrock 模型和 guardrails!
文章来源于互联网:使用 Elastic 实现 LLM 可观察性:使用 Amazon Bedrock 的 Guardrails 驯服 LLM
相关推荐: Elasticsearch 自动补全搜索 – autocomplete
作者:来自 ElasticAmit Khandelwal 探索处理自动完成的不同方法,从基础到高级,包括输入时搜索、查询时间、完成建议器和索引时间。 在本文中,我们将介绍如何避免严重的性能错误、Elasticsearch 默认解决方案为何不适用以及重要的实施注…