Browser-Use AWS Bedrock:云端模型调用配置

Browser-Use AWS Bedrock:云端模型调用配置

【免费下载链接】browser-use 它可以让AI像人类一样浏览网页、点击按钮、填写表单、甚至处理复杂的任务,比如自动填写简历、或者从网页中提取信息。源项目地址:https://github.com/browser-use/browser-use 【免费下载链接】browser-use 项目地址: https://gitcode.com/GitHub_Trending/br/browser-use

概述

AWS Bedrock 是亚马逊云服务(AWS)提供的全托管生成式AI服务,允许开发者通过统一的API访问多个领先的AI模型。Browser-Use 框架深度集成 AWS Bedrock,为自动化浏览器任务提供强大的AI能力支持。

本文将详细介绍如何在 Browser-Use 中配置和使用 AWS Bedrock,包括认证设置、模型选择、参数调优以及最佳实践。

核心优势

mermaid

安装与依赖

基础安装

# 安装 browser-use 基础包
pip install browser-use

# 安装 AWS 扩展包(推荐)
pip install browser-use[aws]

# 或者安装完整包
pip install browser-use[all]

依赖检查

确保以下Python包已正确安装:

包名版本要求功能描述
boto3≥1.34.0AWS SDK for Python
botocore≥1.34.0AWS 核心库
anthropic≥0.25.0Anthropic 客户端(可选)

认证配置

环境变量认证(推荐)

# 设置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:0Claude 3.5 Sonnet200K tokens
anthropic.claude-3-opus-20240229-v1:0Claude 3 Opus200K tokens
anthropic.claude-3-sonnet-20240229-v1:0Claude 3 Sonnet200K tokens
anthropic.claude-3-haiku-20240307-v1:0Claude 3 Haiku200K tokens

Meta Llama 系列

模型标识符描述最大上下文
meta.llama3-1-405b-instruct-v1:0Llama 3.1 405B128K tokens
meta.llama3-1-70b-instruct-v1:0Llama 3.1 70B128K tokens
meta.llama3-1-8b-instruct-v1:0Llama 3.1 8B128K 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}
)

缓存策略

mermaid

监控与日志

集成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"
    }
)

故障排除

常见问题解决

mermaid

调试模式启用

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能力。通过本文的详细配置指南,您可以:

  1. 快速上手:掌握基础认证和模型配置
  2. 深度定制:使用高级参数优化模型行为
  3. 确保安全:实施最佳安全实践
  4. 监控优化:建立完整的监控体系
  5. 故障排除:快速解决常见问题

AWS Bedrock 的优势在于其模型多样性、成本效益和企业级安全性,结合 Browser-Use 的自动化能力,为各种网页交互场景提供了强大的解决方案。

建议从基础配置开始,逐步探索高级功能,并根据实际业务需求选择合适的模型和配置参数。持续监控使用情况和成本,确保资源的最优利用。

【免费下载链接】browser-use 它可以让AI像人类一样浏览网页、点击按钮、填写表单、甚至处理复杂的任务,比如自动填写简历、或者从网页中提取信息。源项目地址:https://github.com/browser-use/browser-use 【免费下载链接】browser-use 项目地址: https://gitcode.com/GitHub_Trending/br/browser-use

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值