Claude Agent SDK: Python/TypeScriptで実践的なAIエージェントを構築する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

5分で最初のAIエージェントを構築する

LangChainからCrewAIまで、あらゆるフレームワークを6ヶ月間使い倒した結果、一つの教訓を得ました。AIの振る舞いを完全に制御するには、時にはAnthropicの公式SDKに戻るのが最善であるということです。Claude Agent SDKは、単なるAPI呼び出しライブラリではありません。ツールを定義し、Claudeにワークフローを制御させるための強固な基盤を提供します。

Pythonで始めるには、pipで公式パッケージをインストールします:

pip install anthropic

AIに(間違いやすい)「暗算」をさせる代わりに、実際のPython関数を与えましょう。以下は、リアルタイムの株価を検索するエージェントの作成例です:

import anthropic

client = anthropic.Anthropic(api_key="YOUR_CLAUDE_API_KEY")

def get_stock_price(ticker):
    # 実際のAPI呼び出し(例:Yahoo Finance)をシミュレート
    prices = {"AAPL": 175.5, "GOOG": 140.2, "MSFT": 402.1}
    return str(prices.get(ticker, "このティッカーシンボルは見つかりません"))

message = client.messages.create(
    model="claude-3-5-sonnet-20240620",
    max_tokens=1024,
    tools=[
        {
            "name": "get_stock_price",
            "description": "ティッカーシンボルに基づいて現在の株価を取得する",
            "input_schema": {
                "type": "object",
                "properties": {
                    "ticker": {"type": "string", "description": "ティッカーシンボル。例: AAPL"}
                },
                "required": ["ticker"]
            }
        }
    ],
    messages=[{"role": "user", "content": "現在のAppleの株価はいくらですか?"}]
)

print(message.content)

わずか20行のコードで、Claudeは単なる「物知りなチャットボット」という枠を超えました。今や、実際のデータにアクセスできるエージェントです。その鍵は、AIに「権限」を与える tools パラメータにあります。

なぜフレームワークではなく公式SDKを選ぶのか?

多くのエンジニアは、「オールインワン」の利便性からLangChainをすぐに使い始めがちです。しかし、プロジェクトをプロダクション環境に投入すると、抽象化レイヤーが厚すぎて逆に扱いづらくなることに気づきました。Claude SDKを直接使用することには、以下の3つの明確なメリットがあります:

  • レイテンシの最適化: 中間レイヤーを減らすことで、エージェントのレスポンスが200〜300ms速くなります。これはユーザー体験において非常に重要な数字です。
  • トークンの制御: 各バイトのデータを正確に管理できます。フレームワークが勝手に隠しプロンプトを挿入して、無駄なAPI費用が発生することはありません。
  • 高速なデバッグ: エージェントが無限ループに陥った際、巨大なライブラリのソースコードを掘り返すよりも、公式SDKで追跡する方がはるかに簡単です。

エージェンティック・シンキング:思考ループの設計

エージェント構築は、単に優れたプロンプトを書くことだけではありません。Claude SDKを使えば、**推論ループ(Reasoning Loop)**を設計することになります。これは「脳」(Claude)と「手」(あなたのコード)の対話のようなものだと想像してください:

  1. ツールリストと共にリクエストを送信する。
  2. Claudeがリクエストを分析し、ツールが必要な場合は関数名と引数を含む JSONを返す。
  3. システムがその関数をローカルで実行する。
  4. 実行結果をClaudeに送り返す。
  5. Claudeがデータを集約し、最終的な回答を提示する。

この仕組みは非常に安全です。AIは関数の呼び出しを「提案」するだけで、実行自体は完全にあなたの制御下(サンドボックス)にあります。

最適化テクニック:コストを抑える救世主「Prompt Caching」

**Prompt Caching**は、長期的なエージェント運用においてコストを最大90%削減できる機能です。通常、ツールを呼び出すたびにチャット履歴全体を再送信する必要があります. 会話が1万トークンに達すると、コストは急増します。

System Promptやツールの指示セットに cache_control タグを付けることで、Claudeはその部分を記憶します。処理費用を支払うのは一度だけで、それ以降の呼び出しは非常に安価になります。これは、プロジェクトを数千ユーザー規模にスケールさせるための死活問題です。

# 固定プロンプト部分をキャッシュ対象としてマーク
system_prompt = [
    {
        "type": "text",
        "text": "あなたは10年の経験を持つプロフェッショナルなデータ分析の専門家です...",
        "cache_control": {"type": "ephemeral"}
    }
]

実践運用における「痛感した」教訓

半年間、顧客向けにAIシステムを運用して得た、3つの黄金律を紹介します:

1. 無限ループを阻止する

エージェントは時々「スタック」し、結果が変わらないのに同じツールを繰り返し呼び出すことがあります。常に max_iterations = 5 のような変数を設定しましょう。5回推論しても完了しない場合は、接続を切断してエラーを出し、コストを守るべきです。

2. 例外を投げる代わりに詳細なエラーを返す

ツールのエラーでシステムをダウンさせないでください。代わりに、Claudeにテキストでエラーを伝えましょう。例:「エラー:顧客ID 123が見つかりません」。Claudeは非常に賢く、このエラーを理解して次のアクションを自ら調整します。

3. モデルの使い分け(モデルルーティング)

すべてにClaude 3.5 Sonnetを費やすのはもったいないです。ユーザーの意図分類のような単純なタスクには、Claude 3 Haikuを使いましょう。3倍速く、圧倒的に安いです。複雑な論理的思考が必要なタスクの時だけ、上位モデルのSonnetに任せればよいのです。

おわりに

Claude Agent SDKは強力なツールですが、鋭いシステム思考が求められます。長々とプロンプトを書く代わりに、問題を専用のツールに細分化しましょう。Claudeの能力と、Pythonによるファイル処理やデータベースアクセスを組み合わせれば、エージェントの可能性は無限大です。今日からタスク管理エージェントの構築に挑戦して、その違いを体感してください!

Share: