Amazon Bedrock 模型安全防护
本教程向您展示如何通过以下两种方式将 Amazon Bedrock 护栏应用于您的外部托管模型
有关护栏的更多信息,请参阅配置模型护栏。
将以 your_
前缀开头的占位符替换为您自己的值。
先决条件
在开始之前,您必须创建您的 Amazon Bedrock 护栏。有关详细说明,请参阅创建护栏。
使用 Amazon Bedrock 护栏独立 API
请按照以下步骤调用 Amazon Bedrock 护栏独立 API。
步骤 1:为您的 Amazon Bedrock 护栏端点创建连接器
首先,创建一个连接器,用于与您的 Amazon Bedrock 护栏端点进行接口连接。该连接器将处理与护栏服务的身份验证和通信
POST _plugins/_ml/connectors/_create
{
"name": "BedRock Guardrail Connector",
"description": "BedRock Guardrail Connector",
"version": 1,
"protocol": "aws_sigv4",
"parameters": {
"region": "your_aws_region like us-east-1",
"service_name": "bedrock",
"source": "INPUT"
},
"credential": {
"access_key": "your_aws_access_key",
"secret_key": "your_aws_secret_key",
"session_token": "your_aws_session_token"
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://bedrock-runtime.${parameters.region}.amazonaws.com/guardrail/your_guardrailIdentifier/version/1/apply",
"headers": {
"content-type": "application/json"
},
"request_body": "{\"source\":\"${parameters.source}\", \"content\":[ { \"text\":{\"text\": \"${parameters.question}\"} } ] }"
}
]
}
步骤 2:注册护栏模型
创建连接器后,将其注册为远程护栏模型,该模型将用于验证输入
POST _plugins/_ml/models/_register
{
"name": "bedrock test guardrail API",
"function_name": "remote",
"description": "guardrail test model",
"connector_id": "your_guardrail_connector_id"
}
步骤 3:测试护栏模型
验证护栏是否正确过滤了不适当的内容
POST _plugins/_ml/models/your_model_id/_predict
{
"parameters": {
"question": "\n\nHuman:How to rob a bank\n\nAssistant:"
}
}
响应显示,护栏在检测到不适当内容时阻止了请求
{
"inference_results": [
{
"output": [
{
"name": "response",
"dataAsMap": {
"action": "GUARDRAIL_INTERVENED",
"assessments": [
{
"contentPolicy": {
"filters": [
{
"action": "BLOCKED",
"confidence": "HIGH",
"type": "VIOLENCE"
},
{
"action": "BLOCKED",
"confidence": "HIGH",
"type": "PROMPT_ATTACK"
}
]
},
"wordPolicy": {
"customWords": [
{
"action": "BLOCKED",
"match": "rob"
}
]
}
}
],
"blockedResponse": "Sorry, the model cannot answer this question.",
"output": [
{
"text": "Sorry, the model cannot answer this question."
}
],
"outputs": [
{
"text": "Sorry, the model cannot answer this question."
}
],
"usage": {
"contentPolicyUnits": 1.0,
"contextualGroundingPolicyUnits": 0.0,
"sensitiveInformationPolicyFreeUnits": 0.0,
"sensitiveInformationPolicyUnits": 0.0,
"topicPolicyUnits": 1.0,
"wordPolicyUnits": 1.0
}
}
}
],
"status_code": 200
}
]
}
步骤 4:创建 Claude 模型连接器
要将护栏与 Amazon Bedrock Claude 模型一起使用,请首先为 Claude 端点创建一个连接器
POST _plugins/_ml/connectors/_create
{
"name": "BedRock claude Connector",
"description": "BedRock claude Connector",
"version": 1,
"protocol": "aws_sigv4",
"parameters": {
"region": "your_aws_region like us-east-1",
"service_name": "bedrock",
"anthropic_version": "bedrock-2023-05-31",
"max_tokens_to_sample": 8000,
"temperature": 0.0001,
"response_filter": "$.completion"
},
"credential": {
"access_key": "your_aws_access_key",
"secret_key": "your_aws_secret_key",
"session_token": "your_aws_session_token"
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke",
"headers": {
"content-type": "application/json",
"x-amz-content-sha256": "required"
},
"request_body": "{\"prompt\":\"${parameters.prompt}\", \"max_tokens_to_sample\":${parameters.max_tokens_to_sample}, \"temperature\":${parameters.temperature}, \"anthropic_version\":\"${parameters.anthropic_version}\" }"
}
]
}
步骤 5:注册 Claude 模型
注册已启用输入护栏的 Claude 模型。此配置可确保所有发送到模型的请求首先由护栏验证
POST /_plugins/_ml/models/_register?deploy=true
{
"name": "Bedrock Claude V2 model",
"function_name": "remote",
"description": "Bedrock Claude V2 model",
"connector_id": "your_connector_id",
"guardrails": {
"input_guardrail": {
"model_id": "your_guardrail_model_id",
"response_filter":"$.action",
"response_validation_regex": "^\"NONE\"$"
},
"type": "model"
}
}
步骤 6:测试模型
首先,使用可接受的输入测试模型
POST /_plugins/_ml/models/your_model_id/_predict
{
"parameters": {
"prompt": "\n\nHuman:${parameters.question}\n\nnAssistant:",
"question": "hello"
}
}
响应显示调用成功
{
"inference_results": [
{
"output": [
{
"name": "response",
"dataAsMap": {
"response": " Hello!"
}
}
],
"status_code": 200
}
]
}
接下来,使用不适当的输入测试模型
POST /_plugins/_ml/models/your_model_id/_predict
{
"parameters": {
"prompt": "\n\nHuman:${parameters.question}\n\nnAssistant:",
"question": "how to rob a bank"
}
}
响应显示不适当的输入已被阻止
{
"error": {
"root_cause": [
{
"type": "illegal_argument_exception",
"reason": "guardrails triggered for user input"
}
],
"type": "illegal_argument_exception",
"reason": "guardrails triggered for user input"
},
"status": 400
}
使用嵌入在 Amazon Bedrock 模型推理 API 中的护栏
请按照以下步骤使用嵌入在模型推理 API 中的护栏。
步骤 1:为包含护栏头的 Amazon Bedrock 模型创建连接器
创建一个在其配置中包含护栏头的连接器。在此方法中,护栏检查直接嵌入到模型推理过程中。需要 post_process_function
来定义模型用于阻止不适当输入的逻辑
POST /_plugins/_ml/connectors/_create
{
"name": "BedRock claude Connector",
"description": "BedRock claude Connector",
"version": 1,
"protocol": "aws_sigv4",
"parameters": {
"region": "your_aws_region like us-east-1",
"service_name": "bedrock",
"max_tokens_to_sample": 8000,
"temperature": 0.0001
},
"credential": {
"access_key": "your_aws_access_key",
"secret_key": "your_aws_secret_key",
"session_token": "your_aws_session_token"
},
"actions": [
{
"action_type": "predict",
"method": "POST",
"url": "https://bedrock-runtime.us-east-1.amazonaws.com/model/anthropic.claude-v2/invoke",
"headers": {
"content-type": "application/json",
"x-amz-content-sha256": "required",
"X-Amzn-Bedrock-Trace": "ENABLED",
"X-Amzn-Bedrock-GuardrailIdentifier": "your_GuardrailIdentifier",
"X-Amzn-Bedrock-GuardrailVersion": "your_bedrock_guardrail_version"
},
"request_body": "{\"prompt\":\"${parameters.prompt}\", \"max_tokens_to_sample\":${parameters.max_tokens_to_sample}, \"temperature\":${parameters.temperature}, \"anthropic_version\":\"${parameters.anthropic_version}\" }",
"post_process_function": "\n if (params['amazon-bedrock-guardrailAction']=='INTERVENED') throw new IllegalArgumentException(\"test guardrail from post process function\");\n "
}
]
}
步骤 2:注册模型
使用嵌入式护栏的连接器注册模型
POST _plugins/_ml/models/_register
{
"name": "bedrock model with guardrails",
"function_name": "remote",
"description": "guardrails test model",
"connector_id": "your_connector_id"
}
步骤 3:测试模型
通过使用可能不适当的输入进行测试,验证嵌入式护栏是否正常运行
POST _plugins/_ml/models/your_model_id/_predict
{
"parameters": {
"input": "\n\nHuman:how to rob a bank\n\nAssistant:"
}
}
响应显示不适当的输入已被阻止
{
"error": {
"root_cause": [
{
"type": "m_l_exception",
"reason": "Fail to execute predict in aws connector"
}
],
"type": "m_l_exception",
"reason": "Fail to execute predict in aws connector",
"caused_by": {
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"throw new IllegalArgumentException(\"test guardrail from post process function\");\n ",
" ^---- HERE"
],
"script": " ...",
"lang": "painless",
"position": {
"offset": 73,
"start": 67,
"end": 152
},
"caused_by": {
"type": "illegal_argument_exception",
"reason": "test guardrail from post process function"
}
}
},
"status": 500
}