🫠

Claude Agent SDK(Python版) を Amazon Bedrock と連携させて動かす

に公開

はじめに

本記事では Claude Agent SDK(Python版)を Amazon Bedrock と連携して使用する手順について紹介します。
Amazon Bedrock と連携するメリットとしては、AWS環境があればAWSへの従量課金で利用できる点です。

■ Claude Agent SDK

Claude Agent SDK は、Anthropic社が開発したAIエージェントを構築するためのソフトウェア開発キットです。
Claude CodeではCLI上でAIエージェントを実行しているのに対して、
Claude Agent SDKではプログラム上でAIエージェントを定義して実行できるイメージです。
https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-python
https://github.com/anthropics/claude-agent-sdk-python

1.事前準備

■ Amazon Bedrock API キーの発行

紹介する手順では Amazon Bedrock API キーを使用します。
事前に Amazon Bedrock の画面からAPIキーを発行しておきます。
※使用したいLLMモデルにアクセス制御がある場合は解除した上で実施してください。

■ claude-agent-sdk のインストール

下記コマンドで claude-agent-sdk をインストールしておきます。

pip install claude-agent-sdk

2.Claude Agent SDK(Python版) を Amazon Bedrock と連携させる

今回は公式が提供しているサンプルプログラムをベースにします。

import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    options = ClaudeAgentOptions(
        system_prompt="You are an expert Python developer",
        permission_mode='acceptEdits',
        cwd="/home/user/project"
    )

    async for message in query(
        prompt="Create a Python web server",
        options=options
    ):
        print(message)


asyncio.run(main())

■ Amazon Bedrock との連携に必要な環境変数を定義

続いて先ほどのソースコードにAmazon Bedrock との連携に必要な環境変数を定義していきます。
必要な環境変数は下記の通りです。

環境変数 説明
CLAUDE_CODE_USE_BEDROCK 1 Amazon Bedrockを使用することを明示的にします。
AWS_BEARER_TOKEN_BEDROCK APIキー Amazon Bedrock APIキーを設定します。実運用する場合はハードコードしないようにしてください。
AWS_REGION ap-northeast-1 使用するLLMモデルのリージョンです。今回は東京リージョンとします。

これら環境変数を先ほどのソースコードに反映+微修正します。
claude-agent-sdkではClaudeAgentOptionsの引数envに環境変数を定義することができます。

sample.py
import asyncio
import os

from claude_agent_sdk import ClaudeAgentOptions, query

# 現在のディレクトリを取得
CWD = os.path.dirname(os.path.abspath(__file__))


async def main():
    options = ClaudeAgentOptions(
        system_prompt="あなたは優秀なシステムエンジニアです。回答は日本語で行ってください。",
        permission_mode="acceptEdits",
        cwd=CWD,
        model="sonnet",
        env={
            "CLAUDE_CODE_USE_BEDROCK": "1",
            "AWS_BEARER_TOKEN_BEDROCK": "Amazon Bedrock APIキー",
            "AWS_REGION": "ap-northeast-1",
        },
    )

    async for message in query(
        prompt="現在のプロジェクトについてREADMEを作成してください。",
        options=options,
    ):
        print(message)


asyncio.run(main())

■ Claude Agent SDK を実行してみる

Claude Agent SDK を実行してみます。

python sample.py

実行するとClaude Agent SDKの処理状況(print(message))部分のログがコンソールに出力されます。
しばらくすると下記のような README.md が作成されました。

Discussion