在将生成式AI应用部署到生产环境时,许多组织都面临着在安全性与准确性、性能和成本之间寻求平衡的挑战。过于严格的防护会阻止合法用户请求,导致客户流失;而过于宽松的防护则会使应用暴露于有害内容、提示词攻击或意外数据泄露的风险中。找到恰当的平衡点不仅仅是启用功能,更需要深思熟虑的配置和持续的优化。
某机构服务防护机制提供了实施负责任AI的强大工具:涵盖文本和图像的内容过滤(包括提示词攻击预防)、主题分类、敏感信息保护、上下文相关性检查以及自动推理检查。本文将展示如何配置这些功能以获得更高效的性能,实施最佳实践以保护应用,并有效监控部署,在安全性和用户体验之间维持恰当的平衡。
为充分发挥某机构服务防护机制的作用,建议采纳以下最佳实践。
在生产工作流中选择哪些防护策略取决于具体的应用场景,但以下基础策略能为大多数应用提供适宜的保护。
从与核心安全和合规要求相符的基础策略开始,然后根据特定用例需求添加专业策略。定期审查和调整策略有助于改进保护,同时维持所需的功能。
防护机制目前为内容策略、提示词攻击预防和主题策略提供两个保护层级:经典层级和标准层级。对于大多数用例,标准层级是更佳选择。它提供了更强的鲁棒性、更高的准确性、更广泛的语言支持、更高的配额,并通过根据负载将流量引导至不同区域来提高可用性。
在让防护机制干预生产应用之前,可以使用防护检测模式在真实客户流量上测试其行为。在此模式下,防护机制会评估所有内容并在跟踪响应中报告识别结果,但不会执行任何拦截操作。通过检测模式,可以了解防护机制在真实流量上的表现,并根据需要更新配置。对行为满意后,即可将防护更新为适当的拦截或屏蔽模式。
某机构服务防护机制内容策略提供四种过滤强度级别,以帮助在内容安全与应用功能之间取得平衡:无、低、中、高。不同的过滤强度反映了防护机制对输入包含有害内容的置信度。如果配置为低过滤强度,防护机制将仅在其对输入有害性具有高置信度时进行拦截。相应地,若配置为高过滤强度,则即使是低置信度的输入也可能被拦截。
过滤强度 | 拦截的置信度内容 |
|---|---|
无 | 不过滤 |
低 | 仅高置信度 |
中 | 高和中置信度 |
高 | 高、中和低置信度 |
对于某些应用,提供的内容过滤器类别或内置个人身份信息类型可能无法完全覆盖防护需求。此时,有两个选择:
某机构服务防护机制提供多种方式来保护应用,每种方式适用于不同的架构模式和控制需求。
对话式AI中最常见的陷阱之一是对对话历史过度应用防护。如果每一轮都评估整个聊天历史中的每一条消息,那么对话早期一个被拦截的主题可能会阻碍用户继续对话,即使后续的新问题是完全有效的。
设想一个配置了拦截“香蕉”讨论的防护场景:
用户:你们卖香蕉吗?
聊天机器人:抱歉,模型无法回答您的问题。
用户:我能预订航班吗?
如果防护评估整个对话历史,第二个问题也会被拦截——仅仅因为“香蕉”仍然存在于聊天记录中。用户因此被卡住,无法从一次失误中恢复。
解决方案:与其检查完整对话历史,不如将防护配置为仅评估最新的用户输入或有限数量的最近几轮对话。这种方法允许对话自然流动,让用户从被拦截的交互中恢复。此外,通过避免在不同轮次中多次评估相同内容,可以降低成本和延迟。
如果在防护中仅评估最后一轮对话(此例中为“我能预订航班吗?”),那么对话将继续顺畅进行,用户可以无障碍地越过之前的防护干预。使用此策略,可以通过保持对话自然来维持对话流畅性并改善用户体验。
LiteLLM、LangChain AWS等工具中的防护集成要么默认仅评估对话的最后一轮,要么提供一个标志来执行此操作。
使用带guardContent的Converse API进行多轮对话
以下示例演示了如何通过在guardContent块中包装仅最新用户消息,在多轮对话中选择性评估最新消息。在此方法中,对话历史作为普通文本传递(不会被防护评估),而只有最新的用户输入被包装在guardContent中:
import boto3
bedrock = boto3.client("bedrock-runtime", region_name="<aws region>")
# 对话历史(先前的消息不会被防护评估)
messages = [
{
"role": "user",
"content": [
{"text": "你们卖香蕉吗?"}
]
},
{
"role": "assistant",
"content": [
{"text": "抱歉,我无法帮助处理这个主题。"}
]
},
{
"role": "user",
"content": [
{ # 只有这个块会被防护评估
"guardContent": { "text":
{ "text": "我能预订去巴黎的航班吗?" }
}
}
]
}
]
response = bedrock.converse(
modelId="<bedrock_model_id>",
guardrailConfig={
"guardrailIdentifier": "your-guardrail-id",
"guardrailVersion": "1",
"trace": "enabled" },
messages=messages
)
# 对话自然进行,因为只有“我能预订去巴黎的航班吗?”被评估,而不是先前被拦截的香蕉话题
print(response['output']['message']['content'][0]['text'])在此示例中,即使对话历史包含先前被拦截的主题(“香蕉”),用户也能自然继续对话,因为只有包装在guardContent中的最新查询被防护评估。需评估的最佳对话轮次可能因用例和安全要求而异,某些攻击可能跨越多个对话轮次。建议从单轮评估开始,并根据应用需求进行调整。
创建防护时,某机构服务会自动创建一个标记为“草稿”的版本。可以通过CreateGuardrailVersion API创建额外的数值版本(版本1、版本2)。版本号由服务在创建新版本时自动递增。每个数值版本都是创建时“草稿”防护版本策略的不可变快照。对“草稿”版本策略的任何修改都不会影响现有的数值版本。强烈建议在生产应用中使用数值版本而非“草稿”版本。“草稿”版本专为开发和测试设计,在生产中使用可能导致以下问题:
要在ApplyGuardrail调用中使用数值版本,请将guardrailVersion字段的值设置为版本号。
通过在生产中使用数值版本,有助于保持防护更一致和可预测的行为,同时保留在“草稿”版本中测试和迭代新策略的灵活性。
有效实施某机构服务防护机制需要深思熟虑的配置和对应用独特风险状况的深刻理解。通过选择合适的策略和保护层级、通过迭代测试调整配置、选择适合架构的实施方式、以及使用数值版本安全部署,可以在安全性、成本和用户体验之间取得平衡。将防护视为一个活的系统——从强大的基线开始,在真实流量上使用检测模式进行测试,并随着应用的演进进行调整。遵循这些经过实战检验的实践,将有助于确保生成式AI应用保持安全、高性能,并准备好自信地扩展到生产环境。FINISHED
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。