「AIエージェントキャッチアップ #53 - Claude Agent SDK」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #53 - Claude Agent SDK」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

Claude Agent SDK

今回は、Claude Code上で強力なエージェントを構築するためのツールコレクション「Claude Agent SDK」をキャッチアップしました。

Claude Agent SDKのGitHubリポジトリはこちらです。

github.com

今回のポイント

Claude Agent SDKとは

Claude Agent SDKは、Claude CodeをPythonやTypeScriptで制御するためのSDKです。 2025年9月にClaude Code SDKから名称変更されました。

www.anthropic.com

Claude Agent SDKは、Python版とJS/TS版が版が提供されています。 以後、この記事はPython版を対象とします。

Claude Agent SDKのセットアップ

Claude Agent SDKのPython版は、pip install claude-agent-sdkでインストール可能です。

Claude Agent SDKを使用する環境には、Claude Codeがインストールされている必要があります。 また、Claude Codeの認証が完了している必要があります。

Claude Agent SDKの基本的な使い方

Claude Agent SDKには、2つの使用方法があります。

  • query()
  • ClaudeSdkClient

query()

Claude Agent SDKのquery()は、会話履歴を必要とせず、一度だけClaude Codeを呼び出す際に便利です。

query()を使うサンプルコードは次のようになります。

import anyio
from claude_agent_sdk import query

async def main() -> None:
    async for message in query(prompt="2+2は?"):
        print(message)

anyio.run(main)

ClaudeSdkClient

ClaudeSdkClientは、query()よりも高機能なインターフェースです。 複数ターンの会話や、Hooks・Custom Toolsなどの機能がサポートされています。

ClaudeSdkClientを使うサンプルコードは次のようになります。

import asyncio

from claude_agent_sdk import (
    AssistantMessage,
    ClaudeAgentOptions,
    ClaudeSDKClient,
    TextBlock,
)

async def main() -> None:
    options = ClaudeAgentOptions(permission_mode="acceptEdits")

    async with ClaudeSDKClient(options=options) as client:
        await client.query("examplesディレクトリにPythonのHello Worldを書いて")
        async for message in client.receive_response():
            print(message)

        await client.query("日本語で「こんにちは」と表示するようにして")
        async for message in client.receive_response():
            print(message)

asyncio.run(main())

Claude Agent SDKのいくつかの機能を試してみた

Claude Agent SDKのいくつかの機能を試してみました。

ファイルを編集させる

Claude Agent SDKは、Claude CodeをPythonやTypeScriptから実行するライブラリです。 そのため、Claude Codeが持っているRead・Write・Editなどのツールがそのまま使用可能となっています。

「examplesディレクトリにHello Worldを書いて」という指示に対して、実際にディレクトリやファイルが作成されることを確認しました。

システムプロンプトの変更

Claude Agent SDKでは、通常のClaude Codeと異なり、システムプロンプトを変更できます。

完全にカスタマイズしたシステムプロンプトを使用することもできれば、Claude Codeのシステムプロンプトに一部追記して使用するといったこともできます。 また、CLAUDE.mdも自動的に読み込まれるとのことです。

docs.claude.com

Interrupts

Claude Agent SDKには、処理を中断する「Interrupts」機能もあります。

これは、Claude Codeの使用時に、エージェントの実行中に「escキー」を入力して、エージェントの処理を中断するのと同じ機能です。

LangGraphにおけるHuman-in-the-LoopのためのInterrupts機能とは異なるものになります。

うまく動かなかった機能

いくつかうまく動かなかった機能もありました。

Streamint Input

Claude Codeへの入力をストリーミングとして与える機能です。

LLMの出力のようなトークン単位のストリーミングではなく、次々と指示を出す際のメッセージ単位のストリーミングのようです。

この機能については、ドキュメントのままのコードではうまく動作しませんでした。

docs.claude.com

Advanced permission control

ClaudeAgentOptionsで、can_use_toolという引数に関数を設定することで、ツールの実行許可などが柔軟に可能という機能があります。

    options = ClaudeAgentOptions(
        can_use_tool=custom_permission_handler,
        allowed_tools=["Read", "Write", "Edit"]
    )

たしかに便利そうではあるのですが、今回試した範囲ではうまく動作しませんでした。

https://docs.claude.com/en/api/agent-sdk/python#example-advanced-permission-control

次回のご案内

以上、今回は「Claude Agent SDK」をキャッチアップしました。

次回は「AIエージェントキャッチアップ #54 - Agentic Commerce Protocol」ということで、ChatGPTの商品購入機能で使われている「Agentic Commerce Protocol」がテーマです!

generative-agents.connpass.com

ご興味・お時間ある方はぜひご参加ください!

また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!