😵

OpenHandsでBedrockからClaude4を手っ取り早く動かす

に公開

所管

OpenHandsをBedrock経由で動かす方法がどこにも書いてなく苦戦した件

前提条件

  • MacOS on Dockerがインストール済み
  • Bedrockのus-east-1リージョンで、Claude Sonnet 4をリクエスト済み
  • AmazonBedrockFullAccessポリシーを持つIAMユーザーを作成して、アクセスキーを発行済み(ガバガバなのでちゃんと運用する際は、権限絞ってIAMロールで使用しましょう)

docker-composeの設定

version: "3.8"

services:
  openhands:
    image: docker.all-hands.dev/all-hands-ai/openhands:0.39
    container_name: openhands-app
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - .openhands-state:/.openhands-state
    env_file:
      - .env
    environment:
      - SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.39-nikolaik

.env設定

はまりどころ1
LLM_AWS_...の環境変数と
AWS_...の環境変数がどっちも必要っぽい

下記のDocのようにLLM_AWS_...の環境変数だけでは認識されない

https://docs.all-hands.dev/ja/modules/usage/configuration-options#llm-configuration

はまりどころ2
LLM_MAX_INPUT_TOKENS
LLM_MAX_OUTPUT_TOKENS

がデフォルト0のため、設定しないと429でるっぽい

LLM_AWS_REGION_NAME="us-east-1"
LLM_AWS_ACCESS_KEY_ID="任意の文字列"
LLM_AWS_SECRET_ACCESS_KEY="任意の文字列"
AWS_REGION_NAME="us-east-1"
AWS_ACCESS_KEY_ID="任意の文字列"
AWS_SECRET_ACCESS_KEY="任意の文字列"
LLM_RETRY_MIN_WAIT="60"
LLM_RETRY_MAX_WAIT="120"
LLM_MAX_INPUT_TOKENS="10240"
LLM_MAX_OUTPUT_TOKENS="10240"

上記設定後

docker compose up

でOpenHandsを立ち上げ、

http://localhost:3000/settings

にアクセスする

OpenHandsでLLMにBedrockを設定

  • カスタムモデル: bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0
  • ベースURL: https://bedrock-runtime.us-east-1.amazonaws.com
  • APIキー: 任意の文字列
  • エージェント: CodeActAgent

スクリーンショット 2025-05-29 15.37.46.png

会話してみる

スクリーンショット 2025-05-29 15.40.31.png

スクリーンショット 2025-05-29 15.41.10.png

ようやく動く

参考

https://docs.all-hands.dev/ja/modules/usage/configuration-options#llm-configuration

https://github.com/All-Hands-AI/OpenHands/blob/main/openhands/llm/bedrock.py

Discussion