View a markdown version of this page

Server-side 工具使用 - Amazon Bedrock

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Server-side 工具使用

如果您使用 Responses API 来调用模型,那么除了我们之前讨论的客户端工具调用之外,它还可以使用服务器端工具调用。 Server-side 工具调用是一种机制,在这种机制中,工具(API、函数、工作流程)是在可信的后端环境中执行的,而不是在客户端上执行的。这提高了应用程序的安全性、可靠性和治理状况。在 Amazon Bedrock 执行实现工具使用的 Lambda 函数之前,它会确保 Lambda 函数与调用该函数的应用程序具有相同的 IAM 策略。由于 Amazon Bedrock 正在推动工具的执行,客户可以专注于实现其业务逻辑,而不是添加工具功能。Amazon Bedrock 还支持最高的治理标准,例如符合 ISO、SOC 和 HIPAA 资格。客户可以提交自己的自定义 Lambda 函数来运行该工具,也可以使用现有的预定义工具,例如备注和任务。 Server-side 使用 Responses API 的工具从 OpenAI 的 GPT OSS 20B/120B 模型开始可用,对其他模型的支持即将推出。您可以使用模型 API 来发现可用于响应 API 的可用模型。有关响应 API 的更多详细信息,请参阅使用 OpenAI API 生成响应

您可以在 Amazon Bedrock 上使用两种类型的工具:使用 Lambda 的自定义工具或 Bedrock 支持的预定义工具。在本节中,我们将介绍如何使用响应 API 创建自定义 Lambda 工具。让我们详细讨论两者。

在响应 API 中使用 Lambda 的自定义工具

通过在 Bedrock 中将 Lambda 函数用作自定义工具,您可以通过将自定义 AWS Lambda 函数集成为工具来扩展代理的功能。这使您能够创建无服务器、可扩展的工具,AI 助手和其他应用程序可以通过模型上下文协议 (MCP) 调用这些工具。以下是此功能的优点:

  • 扩展功能:添加自定义业务逻辑、API 集成或数据处理功能。

  • 安全运行工具:Lambda 允许工具访问 VPC 内的资源,而无需授予完整的 VPC 访问权限。

  • 无服务器架构:无需基础设施管理,Lambda 会自动处理扩展。

  • 成本效益:仅为执行时间付费,不为闲置资源付费。

  • 易于集成:Lambda 函数与内置工具无缝显示。

要让 Amazon Bedrock 中的模型使用工具完成对消息的响应,您需要将消息以及一个或多个工具的定义发送给模型。根据应用程序的提示,如果模型确定其中一个工具可以帮助生成响应,则它会返回请求 Bedrock 使用该工具并将工具结果发送回模型。然后,模型会使用这些结果生成对原始消息的响应。

以下步骤展示了如何使用带有响应 API 的工具。

工作原理

  1. Lambda 函数:创建实现 MCP 协议的 Lambda 函数

  2. 工具发现:Bedrock 调用你的 Lambda 函数来发现可用的工具

  3. 工具注册:您的工具已在 Bedrock 中注册

  4. 工具执行:当代理请求您的工具时,Bedrock 会调用您的 Lambda 函数

  5. 响应处理:结果通过标准接口返回给代理

第 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 函数的更多信息。

# 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 的连接器和远程 MCP 服务器功能来提供工具使用功能。该工具的定义是您在 mcp 请求参数中传递给创建操作的 JSON 架构。在响应连接器 API 的connector_id字段中,您可以传入您在上一步中创建的 Lambda ARN。您无需提供授权证书,因为 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 的模型中提供了使用连接器工具的功能。在此处查看哪些工具支持您的模型。当您使用 Responses API 使用工具时,您只需为导入工具定义或调用工具时使用的令牌付费。每次调用工具不涉及任何额外费用。

当您在tools参数中指定 Lambda 函数时,API 将尝试从服务器获取工具列表。如果成功检索工具列表,则模型响应mcp_list_tools输出中将出现一个新的输出项目。此对象的tools属性将显示成功导入的工具。一旦模型可以访问这些工具定义,它就可以根据模型的上下文选择调用它们。当模型决定调用 Lambda 工具时,API 将向 Lambda 函数发出请求,要求其调用该工具,并将其输出放入模型的上下文中。你可以在 OpenAI 文档中阅读更多关于列表工具和调用工具的信息。请注意,您的 Lambda 函数必须具有与在 Bedrock 中调用模型的应用程序相同的 IAM 角色和策略,否则 Lambda 函数将失败。以下是错误定义。

{ "jsonrpc": "2.0", "id": 1, "error": { "code": -32000, "message": "Tool execution failed", "data": "Additional error details" } }

在响应 API 中使用 AWS 提供的工具

openai.gpt-oss-20bopenai.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-20bopenai.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

  • 直接调用 AWS Lambda 函数

AgentCore 网关集成:

  • 使用 AgentCore 网关 ARN

  • 通过 AgentCore 网关基础设施路由工具呼叫

  • 提供集中式工具管理和发现

配置

请求结构

将 AgentCore Gateway 配置为工具源时,请在响应 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 字符串 您的网关的 ARN AgentCore
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 网关集成之前,请确保:

  1. 使用已配置@@ 的 AgentCore 目标(Lambda 函数、API 网关阶段、OpenAPI 架构或 MCP 服务器)创建了网关

  2. 已配置 IAM 权限,允许您的 Bedrock 服务角色调用网关。请注意,Bedrock 仅支持采用 IAM 身份验证的网关。

  3. 格式正确的网关 ARN

AgentCore 网关集成的好处

  • 集中式工具管理:通过单个网关端点管理所有工具

  • 工具发现:代理可以通过网关动态发现可用工具

  • 安全:通过 IAM 和网关策略进行 Built-in 身份验证和授权

  • 可观察性:全面监控和记录工具调用

  • 灵活性:支持多种目标类型(Lambda、API Gateway、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" } ] }

后续步骤