Browser-Use AWS Bedrock:云端模型调用配置
概述
AWS Bedrock 是亚马逊云服务(AWS)提供的全托管生成式AI服务,允许开发者通过统一的API访问多个领先的AI模型。Browser-Use 框架深度集成 AWS Bedrock,为自动化浏览器任务提供强大的AI能力支持。
本文将详细介绍如何在 Browser-Use 中配置和使用 AWS Bedrock,包括认证设置、模型选择、参数调优以及最佳实践。
核心优势
安装与依赖
基础安装
# 安装 browser-use 基础包
pip install browser-use
# 安装 AWS 扩展包(推荐)
pip install browser-use[aws]
# 或者安装完整包
pip install browser-use[all]
依赖检查
确保以下Python包已正确安装:
| 包名 | 版本要求 | 功能描述 |
|---|---|---|
boto3 | ≥1.34.0 | AWS SDK for Python |
botocore | ≥1.34.0 | AWS 核心库 |
anthropic | ≥0.25.0 | Anthropic 客户端(可选) |
认证配置
环境变量认证(推荐)
# 设置AWS访问密钥
export AWS_ACCESS_KEY_ID=your_access_key_id
export AWS_SECRET_ACCESS_KEY=your_secret_access_key
export AWS_DEFAULT_REGION=us-east-1
# 可选:设置会话令牌(临时凭证)
export AWS_SESSION_TOKEN=your_session_token
代码内认证
from browser_use.llm import ChatAWSBedrock
# 直接在代码中配置凭证
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_access_key_id="your_access_key_id",
aws_secret_access_key="your_secret_access_key",
aws_region="us-east-1"
)
IAM角色认证
# 使用IAM角色(EC2实例或Lambda函数)
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
# 无需显式凭证,自动使用实例角色
)
可用模型
Browser-Use 支持所有 AWS Bedrock 可用模型:
Anthropic Claude 系列
| 模型标识符 | 描述 | 最大上下文 |
|---|---|---|
anthropic.claude-3-5-sonnet-20240620-v1:0 | Claude 3.5 Sonnet | 200K tokens |
anthropic.claude-3-opus-20240229-v1:0 | Claude 3 Opus | 200K tokens |
anthropic.claude-3-sonnet-20240229-v1:0 | Claude 3 Sonnet | 200K tokens |
anthropic.claude-3-haiku-20240307-v1:0 | Claude 3 Haiku | 200K tokens |
Meta Llama 系列
| 模型标识符 | 描述 | 最大上下文 |
|---|---|---|
meta.llama3-1-405b-instruct-v1:0 | Llama 3.1 405B | 128K tokens |
meta.llama3-1-70b-instruct-v1:0 | Llama 3.1 70B | 128K tokens |
meta.llama3-1-8b-instruct-v1:0 | Llama 3.1 8B | 128K tokens |
其他提供商模型
# AI21 Jurassic系列
model = "ai21.j2-ultra-v1"
model = "ai21.j2-mid-v1"
# Amazon Titan系列
model = "amazon.titan-text-express-v1"
model = "amazon.titan-text-lite-v1"
# Cohere系列
model = "cohere.command-r-plus-v1:0"
model = "cohere.command-r-v1:0"
配置参数详解
基础参数配置
from browser_use.llm import ChatAWSBedrock
llm = ChatAWSBedrock(
# 必需参数
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1",
# 生成参数
max_tokens=4096, # 最大生成token数
temperature=0.7, # 温度参数 (0.0-1.0)
top_p=0.9, # 核心采样参数
seed=42, # 随机种子(可重现结果)
stop_sequences=["\n\n"], # 停止序列
# AWS特定参数
aws_sso_auth=False, # 使用AWS SSO认证
request_params={ # 额外请求参数
"guardrailIdentifier": "your-guardrail-id",
"guardrailVersion": "1"
}
)
温度参数效果对比
| 温度值 | 输出特点 | 适用场景 |
|---|---|---|
| 0.0-0.3 | 确定性高,创造性低 | 事实查询、代码生成 |
| 0.4-0.7 | 平衡创造性和准确性 | 内容创作、对话 |
| 0.8-1.0 | 高创造性,多样性强 | 创意写作、头脑风暴 |
实战示例
基础使用示例
import asyncio
from browser_use import Agent
from browser_use.llm import ChatAWSBedrock
async def basic_bedrock_example():
"""基础AWS Bedrock使用示例"""
# 初始化Bedrock模型
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1",
temperature=0.7,
max_tokens=2048
)
# 创建Agent执行网页任务
agent = Agent(
task="访问知乎并搜索'人工智能发展趋势',总结前3篇文章的主要观点",
llm=llm,
headless=False # 显示浏览器界面
)
# 执行任务
result = await agent.run(max_steps=5)
print(f"任务结果: {result}")
# 运行示例
asyncio.run(basic_bedrock_example())
结构化输出示例
from pydantic import BaseModel, Field
from typing import List
class SearchResult(BaseModel):
"""搜索结果结构化格式"""
title: str = Field(description="文章标题")
author: str = Field(description="作者名称")
summary: str = Field(description="内容摘要")
url: str = Field(description="文章链接")
relevance_score: float = Field(description="相关度评分")
async def structured_output_example():
"""结构化输出示例"""
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
)
agent = Agent(
task="在GitHub搜索Python机器学习项目,返回结构化数据",
llm=llm
)
# 使用结构化输出
result = await agent.run(
max_steps=3,
output_format=List[SearchResult] # 指定输出格式
)
for item in result.completion:
print(f"项目: {item.title}, 作者: {item.author}")
多模型对比示例
async def model_comparison_example():
"""多模型性能对比"""
models = [
("Claude 3.5 Sonnet", "anthropic.claude-3-5-sonnet-20240620-v1:0"),
("Llama 3.1 70B", "meta.llama3-1-70b-instruct-v1:0"),
("Claude 3 Haiku", "anthropic.claude-3-haiku-20240307-v1:0")
]
for model_name, model_id in models:
print(f"\n🔧 测试模型: {model_name}")
llm = ChatAWSBedrock(
model=model_id,
aws_region="us-east-1",
max_tokens=1024
)
agent = Agent(
task="解释机器学习中的过拟合现象",
llm=llm
)
result = await agent.run(max_steps=1)
print(f"响应长度: {len(result.completion)} 字符")
print(f"Token用量: {result.usage.total_tokens if result.usage else 'N/A'}")
高级配置
自定义序列化器
from browser_use.llm.aws.serializer import AWSBedrockMessageSerializer
class CustomAWSSerializer(AWSBedrockMessageSerializer):
"""自定义AWS Bedrock消息序列化器"""
@staticmethod
def _serialize_content_part_image(part):
"""自定义图像处理逻辑"""
# 实现自定义的图像预处理逻辑
return super()._serialize_content_part_image(part)
# 使用自定义序列化器
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
)
错误处理与重试
from browser_use.llm.exceptions import ModelRateLimitError, ModelProviderError
async def robust_bedrock_call():
"""健壮的Bedrock调用示例"""
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
)
max_retries = 3
for attempt in range(max_retries):
try:
agent = Agent(
task="执行重要数据提取任务",
llm=llm
)
result = await agent.run(max_steps=2)
return result
except ModelRateLimitError as e:
print(f"速率限制,等待重试... ({attempt + 1}/{max_retries})")
await asyncio.sleep(2 ** attempt) # 指数退避
except ModelProviderError as e:
print(f"提供商错误: {e}")
break
raise Exception("所有重试尝试均失败")
性能优化
连接池配置
import boto3
from botocore.config import Config
# 自定义boto3配置
boto_config = Config(
max_pool_connections=100, # 最大连接数
retries={'max_attempts': 3}, # 重试策略
read_timeout=30, # 读取超时
connect_timeout=10 # 连接超时
)
# 创建自定义session
session = boto3.Session(
region_name='us-east-1',
aws_access_key_id='your_key',
aws_secret_access_key='your_secret'
)
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
session=session, # 使用自定义session
request_params={'config': boto_config}
)
缓存策略
监控与日志
集成OpenTelemetry
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
# 设置分布式追踪
tracer_provider = TracerProvider()
trace.set_tracer_provider(tracer_provider)
async def monitored_bedrock_call():
"""带监控的Bedrock调用"""
tracer = trace.get_tracer("bedrock.monitor")
with tracer.start_as_current_span("aws_bedrock_inference") as span:
span.set_attribute("model", "claude-3-5-sonnet")
span.set_attribute("region", "us-east-1")
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
)
agent = Agent(
task="监控示例任务",
llm=llm
)
result = await agent.run(max_steps=2)
# 记录用量指标
if result.usage:
span.set_attribute("prompt_tokens", result.usage.prompt_tokens)
span.set_attribute("completion_tokens", result.usage.completion_tokens)
span.set_attribute("total_tokens", result.usage.total_tokens)
return result
成本监控指标
| 指标名称 | 描述 | 监控频率 |
|---|---|---|
bedrock_input_tokens | 输入token数量 | 每次调用 |
bedrock_output_tokens | 输出token数量 | 每次调用 |
bedrock_latency_ms | 请求延迟 | 每次调用 |
bedrock_error_rate | 错误率 | 每分钟 |
bedrock_cost_estimate | 成本估算 | 每小时 |
安全最佳实践
IAM策略配置
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"bedrock:InvokeModel",
"bedrock:InvokeModelWithResponseStream"
],
"Resource": [
"arn:aws:bedrock:us-east-1::foundation-model/anthropic.claude-3-5-sonnet-20240620-v1:0",
"arn:aws:bedrock:us-east-1::foundation-model/meta.llama3-1-70b-instruct-v1:0"
]
},
{
"Effect": "Allow",
"Action": "bedrock:ListFoundationModels",
"Resource": "*"
}
]
}
网络隔离配置
# 使用VPC端点增强安全性
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1",
request_params={
"endpoint_url": "https://bedrock-runtime.us-east-1.amazonaws.com"
}
)
故障排除
常见问题解决
调试模式启用
import logging
import boto3
from botocore.exceptions import ClientError
# 启用详细日志
logging.basicConfig(level=logging.DEBUG)
# 调试AWS调用
try:
llm = ChatAWSBedrock(
model="anthropic.claude-3-5-sonnet-20240620-v1:0",
aws_region="us-east-1"
)
# 模拟调用以测试连接
client = llm._get_client()
response = client.list_foundation_models()
print("连接测试成功")
except ClientError as e:
print(f"AWS客户端错误: {e}")
except Exception as e:
print(f"其他错误: {e}")
总结
Browser-Use 与 AWS Bedrock 的集成为自动化浏览器任务提供了企业级的AI能力。通过本文的详细配置指南,您可以:
- 快速上手:掌握基础认证和模型配置
- 深度定制:使用高级参数优化模型行为
- 确保安全:实施最佳安全实践
- 监控优化:建立完整的监控体系
- 故障排除:快速解决常见问题
AWS Bedrock 的优势在于其模型多样性、成本效益和企业级安全性,结合 Browser-Use 的自动化能力,为各种网页交互场景提供了强大的解决方案。
建议从基础配置开始,逐步探索高级功能,并根据实际业务需求选择合适的模型和配置参数。持续监控使用情况和成本,确保资源的最优利用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



