ClineからLiteLLM Proxyを通してAmazon Bedrockを利用する
大阪オフィスの小倉です。
以下のAmazon Web Services ブログをみて、LiteLLM Proxyの存在を知りました。
開発生産性向上とガバナンスの両立を目指した、Cline with Amazon Bedrock と LiteLLM 活用のコツ | Amazon Web Services ブログ
調べてみると、すでに活用されている方の記事も結構あり、大変便利そうだったので自分でざっと試した内容を紹介しようと思います。
LiteLLMとは
LiteLLMは、複数のLLMプロバイダーを統一APIで管理できるツールです。
これをプロキシとして利用することで、
- 複数のモデル間での負荷分散、フォールバック
- ユーザ管理、APIキー管理
- コスト管理、上限設定
- ログ記録
などを行えます。
今回はClineでBedrockを利用する際に、LiteLLM Proxyを介するようにしてみます。
やってみる
Pythonライブラリとして実行できますが、Dockerイメージも用意されているのでDockerを使用しました。
DockerイメージはGitHub Packagesや、Docker Hubにも同じものがありそうだったので、今回はDocker Hubから取得しています。
ソフトウェア | バージョン |
---|---|
Cline | 3.17.7 |
LiteLLM | 1.71.1 |
PostgreSQL | 17 |
LiteLLM Proxyを介してClineを使う
以下のドキュメントに従って、まずはシンプルにLiteLLM Proxyを介してモデル呼び出しをやってみます。
Getting Started - E2E Tutorial
まずはconfig.yaml
ファイルを作成し、利用したいモデルの情報などを記述します。
バージニアリージョンのBedrockのClaude Sonnet 3.7を設定しました。
複数のモデルを扱う際には、ここにモデルを追記していくイメージです。
model_list:
- model_name: Claude Sonnet 3.7 # 自分で命名する
litellm_params:
model: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
aws_access_key_id: "<ACCESS KEY>"
aws_secret_access_key: "<SECRET ACCESS KEY>"
aws_region_name: "us-east-1"
アクセスキーは事前にBedrockを呼び出せるポリシーを付与したIAM Userのものを使用します。
IAM Userに付与したポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Action": [
"bedrock:InvokeModelWithResponseStream",
"bedrock:InvokeModel"
],
]
"Resource": [
"*"
]
}
]
}
その後、手元でdocker run
してコンテナを起動します。
M2 Macで実行しているので、--platform linux/amd64
を追記しています。
docker run \
--platform linux/amd64 \
-v $(pwd)/config.yaml:/app/config.yaml \
-p 4000:4000 \
litellm/litellm:v1.71.1-stable \
--config /app/config.yaml --detailed_debug
Clineの設定画面で、
- App Provider : LiteLLM
- Base URL(optional) : 未入力(default:http://localhost:4000)
- API Key : 未入力
- Model ID : Claude Sonnet 3.7(config.yamlのmodel_nameに設定した値)
を設定しSaveします。
これでClineに指示を送ると、LiteLLM経由でモデル呼び出しが実行できます。
Virtual Keyを利用してClineを使う
モデル利用者に対してLiteLLMでVirtual Keyを発行することで、
Key毎のコスト管理が行えることを試してみます。
この機能を試すには、別途データベースが必要になります。
ドキュメントを参考に以下のdocker-compose.yaml
ファイルを作成してみました。
services:
litellm:
image: litellm/litellm-database:v1.71.1-stable
platform: linux/amd64
depends_on:
postgres:
condition: service_healthy
environment:
DATABASE_URL: postgresql://litellm-user:litellm-password@postgres:5432/litellm-db
LITELLM_MASTER_KEY: litellm-master-key # 必要に応じて変更
ports:
- "4000:4000"
volumes:
- ./config.yaml:/app/config.yaml
command: ["--config", "/app/config.yaml", "--detailed_debug"]
postgres:
# https://www.docker.com/ja-jp/blog/how-to-use-the-postgres-docker-official-image/
image: postgres:17
restart: always
environment: # 必要に応じて変更
POSTGRES_DB: litellm-db
POSTGRES_USER: litellm-user
POSTGRES_PASSWORD: litellm-password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U litellm-user -d litellm-db"]
interval: 1s
timeout: 5s
retries: 10
config.yamlにも設定を追記します。
config.yaml
model_list:
- model_name: Claude Sonnet 3.7
litellm_params:
model: bedrock/us.anthropic.claude-3-7-sonnet-20250219-v1:0
aws_access_key_id: "<ACCESS KEY>"
aws_secret_access_key: "<SECRET ACCESS KEY>"
aws_region_name: "us-east-1"
# 以下を追記
general_settings:
master_key: sk-1234 # 必要に応じて変更
database_url: "postgresql://litellm-user:litellm-password@postgres:5432/litellm-db"
docker compose up
で起動します。
起動後、http://localhost:4000/ui
にアクセスすると、ログイン画面が表示されるので、
デフォルトユーザ名であるadmin
、パスワードにconfig.yaml
に指定したmaster_key
(今回はsk-1234
)を入力してログインします。
(余談ですがhttp://localhost:4000
にアクセスするとSwagger UIが表示されます)
Virtual Keyを発行します。
Virtual KeyメニューのCreate New Key
ボタンから進めます。
現在ログイン中のユーザに対してVirtual Keyを発行するので、 Owned Byに You を選択し、
適当なKey Nameを入力、Modelsにはconfig.yamlに記述したモデル名を選択して作成します。
これをClineに設定するには、Cline設定画面のAPI Key欄に発行されたVirtual Keyを入力すればOKです。
Clineからモデル呼び出しを実行後、Usage画面を見てみると、コストが計上されているのがすぐに確認できます。
ユーザを追加したければ、Internal Users画面からユーザを追加できます。
以下は新たに追加したユーザに対してVirtual Keyを発行した状態です。
キーの一覧が表示され、紐づくユーザと、そのキーに対するコストが表示されているのがわかります。
一点気になったポイントとして、私の環境ではLiteLLMを介してClineを使うと、Cline側の料金表示が$0
のままになっていました。
どうやったら正常に表示されるかはパッとわかりませんでした。。。
まとめ
LiteLLM Proxy経由のAmazon Bedrockモデル呼び出しを、Clineを使って試してみました。
LLMの利用管理に絞るとLiteLLMには非常に便利な機能が揃っていることがわかりました。
特にコスト表示については直ちに画面に反映されるのでありがたいですね。
今回試せなかったルーティングやフォールバック、ログ管理などの機能も機会があれば試したいと思います。