Closed9

OpenHandsでClaude 3.7 Sonnet on VertexAIを動かす(MacBook Air M3)

hosaka313hosaka313

What

OpenHandsをM3 MacBookで動かす。LLM Providerとして、ClaudeではなくVertex AIを用いる。

TL;DR

  • Docker立ち上げコマンドに環境変数設定が必要
  • Vertex AIでClade 3.7 Sonnetが使えるリージョンはus-east5europe-west1のどちらか。
  • モデル設定はAdvancedからvertex_ai/claude-3-7-sonnet@20250219を指定。(vertex_aiのアンダーバーが必要)
hosaka313hosaka313

OpenHandsのセットアップ

以下のMacOS用のタブを参考。

https://docs.all-hands.dev/modules/usage/installation

Docker Desktopの設定を確認

基本コマンド

docker pull docker.all-hands.dev/all-hands-ai/runtime:0.27-nikolaik

docker run -it --rm --pull=always \
    -e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.27-nikolaik \
    -e LOG_ALL_EVENTS=true \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ~/.openhands-state:/.openhands-state \
    -p 3000:3000 \
    --add-host host.docker.internal:host-gateway \
    --name openhands-app \
    docker.all-hands.dev/all-hands-ai/openhands:0.27
hosaka313hosaka313

Google Cloudの対応

Vertex AI Model GardenでClaude 3.7 Sonnetを有効化

サービスアカウントの作成

Roleは「Vertex AI ユーザー」を付与し、サービスアカウントキーを発行。

以下の記事に倣って、$HOME/Documents/OpenHands-Workspaceに置いた。(あまりセキュアではない気もするが...)

https://qiita.com/kei1-dev/items/2bce7cb2dca176785142?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share

hosaka313hosaka313

Vertex AI用の環境変数を追加したコマンド

docker run -it --rm --pull=always \
-e SANDBOX_RUNTIME_CONTAINER_IMAGE=docker.all-hands.dev/all-hands-ai/runtime:0.27-nikolaik \
-e LOG_ALL_EVENTS=true \
-e WORKSPACE_MOUNT_PATH=$HOME/Documents/OpenHands-Workspace \
-e GOOGLE_APPLICATION_CREDENTIALS="/opt/workspace_base/openhands-service-account-key.json" \
-e VERTEXAI_PROJECT=<Your Project Id> \
-e VERTEXAI_LOCATION=us-east5 \
-v $HOME/Documents/OpenHands-Workspace:/opt/workspace_base \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands-state:/.openhands-state \
-p 3000:3000 \
--add-host host.docker.internal:host-gateway \
--name openhands-app \
docker.all-hands.dev/all-hands-ai/openhands:0.27

注意点として、VERTEXAI_LOCATIONは限られたRegionしか選べない。
Claude 3.7 Sonnetの場合、2025年3月時点でus-east5europe-west1のどちらか。

https://cloud.google.com/vertex-ai/generative-ai/docs/learn/locations?hl=ja#genai-partner-models

hosaka313hosaka313

モデルの設定

http://localhost:3000 にアクセス。

エラー: litellm.BadRequestError: LLM Provider NOT provided

するとエラーになります。

LiteLLMの方を見てみます。

https://docs.litellm.ai/docs/providers/vertex

vertexai/claude-3-7-sonnet@20250219ではなく、vertex_ai/claude-3-7-sonnet@20250219としないといけないようです。

hosaka313hosaka313

モデル再設定

ドロップダウンから指定するのはワナだったので、Advancedから設定します。

APIキーは空欄で問題ありません。

テスト

これでメッセージを送ります。


ちょっと待ちます

回答が来ました。

hosaka313hosaka313

かんたんなお題:足し算プロジェクト with Vitest

以下の指示を与えました。

Create a simple TS project with pnpm.

- define add functions (takes two numbers as args)
- write test using Vitest

結果は以下でした。

https://github.com/HosakaKeigo/ts-add-project

pnpmのセットアップ、vitestの導入、実行まで自分でやってくれました。

このスクラップは5ヶ月前にクローズされました