Amazon Bedrock

OpenClaw có thể dùng model Amazon Bedrock thông qua Bedrock Converse streaming provider của pi‑ai. Bedrock auth sử dụng AWS SDK default credential chain, không phải API key.

pi‑ai hỗ trợ gì

  • Provider: amazon-bedrock
  • API: bedrock-converse-stream
  • Auth: AWS credentials (env vars, shared config, hoặc instance role)
  • Region: AWS_REGION hoặc AWS_DEFAULT_REGION (mặc định: us-east-1)

Tự động phát hiện model

Nếu phát hiện có AWS credentials, OpenClaw có thể tự động phát hiện các model Bedrock hỗ trợ streamingtext output. Quá trình phát hiện dùng bedrock:ListFoundationModels và được cache (mặc định: 1 giờ).

Các tùy chọn config nằm trong models.bedrockDiscovery:

{
  models: {
    bedrockDiscovery: {
      enabled: true,
      region: "us-east-1",
      providerFilter: ["anthropic", "amazon"],
      refreshInterval: 3600,
      defaultContextWindow: 32000,
      defaultMaxTokens: 4096,
    },
  },
}

Lưu ý:

  • enabled mặc định là true khi có AWS credentials.
  • region mặc định lấy từ AWS_REGION hoặc AWS_DEFAULT_REGION, sau đó là us-east-1.
  • providerFilter khớp với tên provider Bedrock (ví dụ anthropic).
  • refreshInterval tính bằng giây; đặt thành 0 để tắt caching.
  • defaultContextWindow (mặc định: 32000) và defaultMaxTokens (mặc định: 4096) được dùng cho các model được phát hiện (ghi đè nếu bạn biết giới hạn của model).

Setup (thủ công)

  1. Đảm bảo AWS credentials có sẵn trên gateway host:
export AWS_ACCESS_KEY_ID="AKIA..."
export AWS_SECRET_ACCESS_KEY="..."
export AWS_REGION="us-east-1"
# Tùy chọn:
export AWS_SESSION_TOKEN="..."
export AWS_PROFILE="your-profile"
# Tùy chọn (Bedrock API key/bearer token):
export AWS_BEARER_TOKEN_BEDROCK="..."
  1. Thêm Bedrock provider và model vào config của bạn (không cần apiKey):
{
  models: {
    providers: {
      "amazon-bedrock": {
        baseUrl: "https://bedrock-runtime.us-east-1.amazonaws.com",
        api: "bedrock-converse-stream",
        auth: "aws-sdk",
        models: [
          {
            id: "anthropic.claude-opus-4-5-20251101-v1:0",
            name: "Claude Opus 4.5 (Bedrock)",
            reasoning: true,
            input: ["text", "image"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 200000,
            maxTokens: 8192,
          },
        ],
      },
    },
  },
  agents: {
    defaults: {
      model: { primary: "amazon-bedrock/anthropic.claude-opus-4-5-20251101-v1:0" },
    },
  },
}

EC2 Instance Roles

Khi chạy OpenClaw trên EC2 instance có gắn IAM role, AWS SDK sẽ tự động dùng instance metadata service (IMDS) để xác thực. Tuy nhiên, hiện tại OpenClaw chỉ kiểm tra credential detection qua biến môi trường, không qua IMDS credentials.

Cách giải quyết: Đặt AWS_PROFILE=default để báo hiệu rằng AWS credentials đã có sẵn. Xác thực thực tế vẫn dùng instance role qua IMDS.

# Thêm vào ~/.bashrc hoặc shell profile của bạn
export AWS_PROFILE=default
export AWS_REGION=us-east-1

Quyền IAM cần thiết cho EC2 instance role:

  • bedrock:InvokeModel
  • bedrock:InvokeModelWithResponseStream
  • bedrock:ListFoundationModels (cho tự động phát hiện)

Hoặc gắn managed policy AmazonBedrockFullAccess.

Setup nhanh:

# 1. Tạo IAM role và instance profile
aws iam create-role --role-name EC2-Bedrock-Access \
  --assume-role-policy-document '{
    "Version": "2012-10-17",
    "Statement": [{
      "Effect": "Allow",
      "Principal": {"Service": "ec2.amazonaws.com"},
      "Action": "sts:AssumeRole"
    }]
  }'

aws iam attach-role-policy --role-name EC2-Bedrock-Access \
  --policy-arn arn:aws:iam::aws:policy/AmazonBedrockFullAccess

aws iam create-instance-profile --instance-profile-name EC2-Bedrock-Access
aws iam add-role-to-instance-profile \
  --instance-profile-name EC2-Bedrock-Access \
  --role-name EC2-Bedrock-Access

# 2. Gắn vào EC2 instance của bạn
aws ec2 associate-iam-instance-profile \
  --instance-id i-xxxxx \
  --iam-instance-profile Name=EC2-Bedrock-Access

# 3. Trên EC2 instance, bật discovery
openclaw config set models.bedrockDiscovery.enabled true
openclaw config set models.bedrockDiscovery.region us-east-1

# 4. Đặt các biến môi trường workaround
echo 'export AWS_PROFILE=default' >> ~/.bashrc
echo 'export AWS_REGION=us-east-1' >> ~/.bashrc
source ~/.bashrc

# 5. Kiểm tra xem model đã được phát hiện chưa
openclaw models list

Lưu ý

  • Bedrock yêu cầu model access được bật trong AWS account/region của bạn.
  • Tự động phát hiện cần quyền bedrock:ListFoundationModels.
  • Nếu bạn dùng profiles, hãy đặt AWS_PROFILE trên gateway host.
  • OpenClaw ưu tiên nguồn credential theo thứ tự: AWS_BEARER_TOKEN_BEDROCK, sau đó AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY, sau đó AWS_PROFILE, rồi mới đến default AWS SDK chain.
  • Hỗ trợ reasoning phụ thuộc vào model; kiểm tra Bedrock model card để biết khả năng hiện tại.
  • Nếu bạn thích dùng managed key flow, bạn cũng có thể đặt một OpenAI‑compatible proxy trước Bedrock và config nó như một OpenAI provider.