本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Server-side 工具的使用
如果您使用 Responses API 来调用模型,那么除了我们之前讨论的客户端工具调用外,它还可以使用服务器端工具调用。 Server-side 工具调用是一种机制,其中工具(API、函数、工作流程)在可信的后端环境中执行,而不是在客户端上执行。这改善了应用程序的安全性、可靠性和治理状况。在 Amazon Bedrock 执行实现工具使用的 Lambda 函数之前,它会确保 Lambda 函数具有与调用该函数的应用程序相同的 IAM 政策。由于 Amazon Bedrock 负责工具执行,因此客户可以专注于实现其业务逻辑,而不是添加工具功能。亚马逊 Bedrock 还支持符合 ISO、SOC 和 HIPAA 条件的最高治理标准。您可以提交自己的自定义 Lambda 函数来运行该工具,也可以使用现有的预定义工具,例如笔记和任务。 Server-side 使用响应 API 的工具从 GPT OSS 20B/120B 模型开始可用,对其他模型的支持也即将推出。您可以使用模型 API 来发现可用于响应 API 的可用模型。有关响应 API 的更多详细信息,请参阅使用 OpenAI API bedrock/latest/userguide/bedrock-mantle.html 生成响应。
您可以将两种类型的工具用于亚马逊 Bedrock:使用 Lambda 的自定义工具或亚马逊 Bedrock 支持的预定义工具。本节介绍如何使用响应 API 创建自定义 Lambda 工具。以下各节详细描述了每种类型。
在响应 API 中使用 Lambda 的自定义工具
通过在 Amazon Bedrock 中使用 Lambda 函数作为自定义工具,您可以通过将自定义 Lambda 函数集成为工具来扩展代理的功能。借助它,您可以创建无服务器、可扩展的工具,这些工具可由 AI 助手和其他应用程序通过模型上下文协议 (MCP) 调用。以下是此功能的优点:
扩展功能:添加自定义业务逻辑、API 集成或数据处理功能。
安全运行工具:Lambda 允许工具访问 VPC 内的资源,而无需授予完整 VPC 访问权限。
无服务器架构:无需基础设施管理,Lambda 可自动处理扩展。
成本效益:仅为执行时间付费,不为闲置资源付费。
易于集成:Lambda 函数可无缝地与内置工具一起显示。
要让 Amazon Bedrock 中的模型使用工具完成对消息的响应,您需要将消息和一个或多个工具的定义发送给该模型。根据您的应用程序的提示,如果模型确定其中一个工具可以帮助生成响应,它将返回请求 Amazon Bedrock 使用该工具并将工具结果发送回模型。然后,模型会使用这些结果生成对原始消息的响应。
以下步骤显示了如何使用带有响应 API 的工具。
工作原理
Lambda 函数:创建实现 MCP 协议的 Lambda 函数
工具发现:Bedrock 调用您的 Lambda 函数来发现可用工具
工具注册:您的工具已在 Bedrock 中注册
工具执行:当代理请求您的工具时,Bedrock 会调用您的 Lambda 函数
响应处理:结果通过标准接口返回给代理
第 1 步:定义 Lambda 函数以获取最受欢迎的歌曲
创建实现 MCP 协议的 Lambda 函数。以下是一个简单的 Python 示例:
import json def lambda_handler(event, context): # Parse JSON-RPC request method = event.get('method') params = event.get('params', {}) request_id = event.get('id') if method == 'tools/list': return { "jsonrpc": "2.0", "id": request_id, "result": { "tools": [ { "name": "my_custom_tool", "description": "My custom business logic tool", "inputSchema": { "type": "object", "properties": { "input": { "type": "string", "description": "Input text to process" } }, "required": ["input"] } } ] } } elif method == 'tools/call': tool_name = params.get('name') arguments = params.get('arguments', {}) if tool_name == 'my_custom_tool': # Your custom logic here result = f"Processed: {arguments.get('input', '')}" return { "jsonrpc": "2.0", "id": request_id, "result": { "content": [ { "type": "text", "text": result } ] } } # Error response for unsupported methods return { "jsonrpc": "2.0", "id": request_id, "error": { "code": -32601, "message": "Method not found" } }
第 2 步:部署 Lambda 函数
接下来,使用您的 IAM 角色部署此 Lambda 函数以获取 ARN。您可以在 Lambda 开发人员指南的 Lambda 入门中阅读更多内容。
# Example using AWS CLI aws lambda create-function \ --function-name my-custom-tool \ --runtime python3.14 \ --role arn:aws:iam::YOUR-ACCOUNT:role/lambda-execution-role \ --handler lambda_function.lambda_handler \ --zip-file fileb://function.zip
假设你的 ARN 是:arn:aws:lambda:us-west-2:123456789012:function:my-custom-tool
第 3 步:在推理请求中定义消息和工具定义
要发送消息和工具定义,您可以使用响应 API 操作。Amazon Bedrock 使用响应 API 的connector_id字段中,您可以传入您在上一步中创建的 Lambda ARN。您无需提供授权证书,因为 Amazon Bedrock 使用与调用模型的应用程序相同的 IAM 角色和策略。以下是一个工具的示例架构,该工具可以获取电台播放的最受欢迎的歌曲。
from openai import OpenAI client = OpenAI() resp = client.responses.create( model="oss-gpt-120b", tools=[ { "type": "mcp", "server_label": "xamzn_arn", "connector_id": "arn:aws:lambda:us-west-2:123456789012:function:my-custom-tool", "require_approval": "never", }, ], input="My custom prompt.", ) print(resp.output_text)
第 4 步:Bedrock 调用该工具并将响应传回模型
支持响应 API 的模型中提供了使用连接器工具的功能
当您在tools参数中指定 Lambda 函数时,API 将尝试从服务器获取工具列表。如果成功检索工具列表,则新的mcp_list_tools输出项将出现在模型响应输出中。此对象的tools属性将显示成功导入的工具。模型获得这些工具定义的访问权限后,它可能会根据模型上下文中的内容选择调用它们。当模型决定调用 Lambda 工具时,API 将向 Lambda 函数发出调用该工具的请求,并将其输出放入模型的上下文中。您可以在 OpenAI 文档
{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "Tool execution failed", "data": "Additional error details" } }
使用响应 API 中 AWS 提供的工具
openai.gpt-oss-20b和openai.gpt-oss-120b模型中内置了两个 AWS 提供的工具: Note-taking 功能(备注工具)和任务管理(任务工具)。这些工具是自动可用的,您无需在tools参数中定义它们。
备注工具概述
该notes工具允许模型在同一个对话会话中存储笔记。这为维护多次交互的上下文提供了一种简单的记忆机制。内存仅限于当前会话。
当模型使用注释工具时,它会发出name设置为"notes"的mcp_call输出。该模型根据您的请求确定适当的参数。
你可以使用任何一种自然语言(例如 “记住我最喜欢的颜色是蓝色”、“关于我最喜欢的颜色,我跟你说了什么?”,“存储我更喜欢早间会议的事实”,“回想一下我所说的关于会议偏好的话”),或者你可以在提示中使用直接调用工具(“使用备忘工具将我的电子邮件存储为 john@example.com”,“查看我的电子邮件地址的备注”)。
任务工具概述
该tasks工具为管理对话会话中的任务提供了堆栈。您可以将任务推送到堆栈中并将其弹出,这使其可用于管理工作流程、提醒或分层任务管理。任务贯穿整个对话会话。内存仅限于当前会话。
当模型使用任务工具时,它会发出name设置为"tasks"的mcp_call输出。该模型根据您的请求确定适当的参数(例如methodtask.title、和task.description)。
你可以使用自然语言来调用任务工具(例如 “添加任务以审查预算”、“推送提醒给客户打电话”、“我接下来要做什么任务?”,“弹出最新的任务”,“从我的堆栈中获取最新任务”),或者你可以直接在提示符中调用该工具(“使用任务工具推送'完成演示文稿'”,“从堆栈中弹出任务”,“将'安排会议'添加到我的任务列表”)。
代码示例:使用备注和任务工具
备注和任务工具内置于openai.gpt-oss-20b和openai.gpt-oss-120b模型中。您无需在tools参数中明确定义它们,只需在提示符中引用它们即可:
from openai import OpenAI client = OpenAI( base_url="https://bedrock-mantle.us-east-1.api.aws/v1" ) # The notes tool is built-in — just ask the model to use it resp = client.responses.create( model="openai.gpt-oss-120b", input="Use the notes tool to store that my preferred language is Python.", ) print(resp.output) # The model automatically calls the notes tool via mcp_call # Use the tasks tool to push a task resp = client.responses.create( model="openai.gpt-oss-120b", input="Use the tasks tool to push a task: review the API documentation", ) print(resp.output)
Server-side 与 Gateway 的工具使用集成 AgentCore
Amazon Bedrock 现在支持 AgentCore Gateway 作为服务器端工具调用集成类型。借助此功能,您可以将模型直接连接到 AgentCore 网关端点,以便无缝访问通过网关基础设施管理的工具。
AgentCore 网关集成遵循与 Lambda 函数集成相同的模式,但有一个关键区别。
Lambda 集成:
使用 Lambda 函数 ARN
直接调用 Lambda 函数 AWS
AgentCore 网关集成:
使用 AgentCore 网关 ARN
通过 AgentCore 网关基础设施路由工具调用
提供集中式工具管理和发现
配置
请求结构
将 AgentCore 网关配置为工具源时,请在响应 API 请求的tools数组中使用以下结构。
{ "type":"mcp", "server_label":"agentcore_tools", "connector_id":"arn:aws:bedrock-agentcore:us-west-2:342789630635:gateway/agentcore-intro-gateway-v2-swvq44sovp", "server_description":"AgentCore Gateway providing custom tools", "require_approval":"never" }
参数
| 参数 | Type | 必需 | 描述 |
|---|---|---|---|
type |
字符串 | 是 | 必须设置为 mcp |
server_label |
字符串 | 是 | 您的请求中此工具连接器的唯一标识符 |
connector_id |
字符串 | 是 | 您的 AgentCore 网关的 ARN |
server_description |
字符串 | 否 | Human-readable 此网关提供的工具的描述 |
require_approval |
字符串 | 是 | 字段必须是 "never" |
完整请求示例
{ "model":"openai.gpt-oss-120b", "stream":true, "background":false, "store":false, "tools": [ { "type":"mcp", "server_label":"agentcore_tools", "connector_id":"arn:aws:bedrock-agentcore:us-west-2:342789630635:gateway/agentcore-intro-gateway-v2-swvq44sovp", "server_description":"AgentCore Gateway providing custom tools", "require_approval":"never" } ], "input": [ { "type":"message", "role":"user", "content": [ { "type":"input_text", "text":"What is the weather in Seattle?" } ] } ] }
先决条件
在使用 AgentCore 网关集成之前,请确保:
使用已配置的 AgentCore 目标(Lambda 函数、API 网关阶段、OpenAPI 架构或 MCP 服务器)创建了网关
已配置 IAM 权限,允许您的 Bedrock 服务角色调用网关。请注意,Bedrock 仅支持具有 IAM 身份验证的网关。
正确格式的网关 ARN
AgentCore 网关集成的好处
集中式工具管理:通过单个网关端点管理所有工具
工具发现:代理可以通过网关动态发现可用工具
安全:通过 IAM 和网关策略进行 Built-in 身份验证和授权
可观测性:全面监控和记录工具调用
灵活性:支持多种目标类型(Lambda、API 网关、OpenAPI、MCP 服务器)
IAM 权限
您的 Bedrock 执行角色需要权限才能调用 AgentCore 网关:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "bedrock-agentcore:InvokeGateway" ], "Resource": "arn:aws:bedrock-agentcore:us-west-2:342789630635:gateway/agentcore-intro-gateway-v2-swvq44sovp" } ] }