在前面的文章中,我们了解了 Bedrock 是什么、能做什么。但纸上得来终觉浅——真正掌握一个服务,最好的方式就是动手实践。
今天这篇文章,就带你从零开始,用代码调用 Bedrock 的 API,并一步步构建一个真正的智能应用。无论你是想给自己的网站加上 AI 功能,还是想开发一个智能助手,这篇教程都会是很好的起点。
准备工作:让账号「做好接收大模型的准备」
在开始写代码之前,有几个前置步骤需要先完成。整个过程大约 10-15 分钟 。
第一步:登录 AWS 控制台并进入 Bedrock
登录 AWS 管理控制台,在搜索框中输入 "Bedrock",点击进入 Amazon Bedrock 服务页面 。
第二步:申请模型访问权限
这是新手最常卡住的一步。在 Bedrock 控制台的左侧导航栏中,点击 "Model access"(模型访问) 。
你会看到各大模型供应商的列表——Anthropic(Claude 系列)、Meta(Llama)、Amazon(Nova 系列)等。找到你想使用的模型(建议新手从 Claude 3.5 Sonnet 或 Amazon Nova Lite 开始),点击 "Edit access",勾选对应模型后提交申请 。
💡 大多数模型申请后几分钟内就会批准。如果显示"待审核",可以稍等片刻刷新页面 。
第三步:配置 IAM 权限
要让代码能调用 Bedrock,需要给当前使用的身份(IAM 用户或角色)授予 Bedrock 的调用权限。最直接的方式是添加一个内联策略:
json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "BedrockFullAccess",
"Effect": "Allow",
"Action": ["bedrock:*"],
"Resource": "*"
}
]
}⚠️ 安全提示:
bedrock:*权限适合学习和测试阶段。生产环境中,建议按最小权限原则限制到具体模型和操作 。
核心 API 调用:用 10 行代码让大模型「开口说话」
准备工作就绪后,让我们开始写代码。
安装 AWS SDK
首先确保安装了 boto3(AWS 的 Python SDK):
bash
pip install boto3最简调用示例
下面这段代码就是调用 Bedrock 的"最小原型"——发送一句提示词,拿到模型的回复 :
python
import json
import boto3
# 1. 创建 Bedrock 客户端
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
# 2. 定义模型 ID(这里用 Claude 3.5 Sonnet 为例)
model_id = "us.anthropic.claude-3-5-sonnet-20241022-v2:0"
# 3. 构建请求体
prompt = "用一句话解释什么是人工智能"
body = {
"anthropic_version": "bedrock-2023-05-31",
"max_tokens": 512,
"messages": [
{"role": "user", "content": prompt}
],
}
# 4. 调用 API
response = bedrock.invoke_model(
modelId=model_id,
contentType="application/json",
accept="application/json",
body=json.dumps(body)
)
# 5. 解析返回结果
result = json.loads(response["body"].read())
answer = result["content"][0]["text"]
print(f"Q: {prompt}")
print(f"A: {answer}")运行这段代码,你会看到类似这样的输出 :
text
Q: 用一句话解释什么是人工智能
A: 人工智能是开发能够执行通常需要人类智能的任务的计算机系统,如学习、推理、问题解决和理解语言。关键参数解读
参数含义说明modelId模型 ID决定了用哪个模型。可以在控制台的"基础模型"页面找到 max_tokens最大输出长度控制回复的字数上限messages对话消息支持多轮对话,按顺序放入即可
进阶实践:让 AI「有工具可用」——构建智能应用
上面的示例只是"对话",但如果想让 AI 真正帮你做事,还需要给它工具——比如查天气、搜文档、调用外部 API。
需求场景
假设我们要构建一个智能助手,它能:
回答用户的问题
在需要时调用外部数据(比如实时价格、天气信息)
核心思路:让模型学会「使用工具」
AI 本身不联网,不知道实时数据 。解决方案是:定义一组工具(函数),让 AI 在需要时调用它们 。
以下是一个简化版的实现思路,使用 Bedrock 的 Converse API 配合工具调用 :
python
import json
import boto3
from datetime import datetime
bedrock = boto3.client("bedrock-runtime", region_name="us-east-1")
# 1. 定义工具(告诉模型"你能用这些工具")
tools = [
{
"toolSpec": {
"name": "get_current_time",
"description": "获取当前日期和时间",
"inputSchema": {
"json": {
"type": "object",
"properties": {},
"required": []
}
}
}
},
{
"toolSpec": {
"name": "get_weather",
"description": "获取某城市的天气",
"inputSchema": {
"json": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
}
}
]
# 2. 发送用户消息 + 工具定义
response = bedrock.converse(
modelId="us.anthropic.claude-3-5-sonnet-20241022-v2:0",
messages=[
{"role": "user", "content": [{"text": "现在几点了?北京天气怎么样?"}]}
],
tools=tools
)
# 3. 检查模型是否想用工具
output = response["output"]["message"]
for content in output["content"]:
if "toolUse" in content:
tool = content["toolUse"]
print(f"模型想调用工具: {tool['name']}")
print(f"参数: {tool['input']}")
# 实际执行工具调用...
# 然后把结果返回给模型,让它生成最终回复五种集成模式速览
根据项目复杂度,Bedrock 应用可以从简单到复杂分为五个层次 :
模式适用场景复杂度Converse API简单问答、内容生成、原型验证⭐ 最低Inline Agents自定义工具调用、灵活控制⭐⭐ 中低Bedrock Agents基础架构化管理、CI/CD 集成⭐⭐⭐ 中高Lambda + LangGraph复杂工作流、精细可观测性⭐⭐⭐ 高AgentCore + LangGraph生产级 Agent 部署、完整指标⭐⭐⭐⭐ 最高
新手建议:从 Converse API 开始,熟悉后逐步升级到 Inline Agents 模式 。
实战案例参考
如果你需要更完整的项目参考,这里有三个开源示例可供学习:
智能客服聊天机器人:使用 Bedrock Agents 与实时数据集成,展示如何让 AI 访问外部 API
多模态 WhatsApp 助手:支持图片、视频、文档分析,使用 Amazon Nova 模型和 Bedrock Agents 维持对话上下文
语音 AI 酒店服务系统:使用 Amazon Nova 2 Sonic 处理语音交互,适用于需要语音输入输出的场景
Bedrock 让大模型 API 的调用变得非常简单——本质上就是 "发一段文字,收一段文字" 。从最基础的 invoke_model 调用,到带工具函数的智能 Agent,Bedrock 提供了完整的进阶路径。掌握这些实践方法,你就拥有了在 AWS 上构建生成式 AI 应用的核心能力。