🐍

エージェント構築の完全ガイド - Anthropic Builder Summit 2025で学んだベストプラクティス

に公開

はじめに

昨日、Anthropic主催の「Builder Summit」に参加してきました!🎉

会場はとても活気があり、AI技術の最前線で活躍する開発者や研究者たちが集まっていて、エネルギーに溢れていました。

今回特に印象的だったのが、Anthropicの研究者であるHanna(ハンナ)氏とStephanie(ステファニー)氏による「効率的なエージェントの構築」というセッションです。

登壇者のHannaとStephanie
登壇者のHanna(ハンナ)氏とStephanie(ステファニー)氏

このセッションでは、効果的なAIエージェントを構築するための最新の推奨事項、ベストプラクティス、そして実世界のユースケースまでが詳しく解説されました。

本記事では、このセッションで学んだ内容を詳しくまとめていきます。

対象読者

  • AIエージェントの構築に興味がある方
  • Claudeなどの大規模言語モデルを活用した開発を行っている方
  • エージェント的な処理をどう実装すべきか悩んでいる方

セッション概要

登壇者:Hanna(ハンナ)、Stephanie(ステファニー)
所属:Anthropic研究者

アジェンダ

  1. エージェントとは何か
  2. エージェント構築のベストプラクティス
  3. 実世界のユースケースへの適用

それでは、各セクションを詳しく見ていきましょう。


1. エージェントとは何か

LLM活用の進化

LLMの活用方法は、シンプルなものから複雑なものへと進化してきました。

LLM活用の進化
エージェントとは:私たちがどのようにしてここに至ったが

単一のLLM機能

最もシンプルな形態です。

  • 顧客が入力 → LLMを呼び出し → 出力をそのままユーザーに返す
  • 最も基本的な実装

ワークフロー

  • 事前に定義されたコードパターンで編成されたLLMコール
  • 複数のLLMコールを並行、連鎖、またはコードを挟んで実行
  • すべてのLLMコールを集約して最終出力を形成

エージェント

  • より高度な自律性を持つ
  • 独自のプロセスやツールの使用を動的に指示できる
  • より大きな主体性(agency)と能力を獲得
  • 同時に、より大きなコスト、レイテンシー、リスクも伴う

重要なポイント:これら3つはアプリケーション内に同時に存在可能です。エージェントはワークフロー内のノードにもなり得ます。


エージェント的ループ(Agentic Loop)

エージェントの本質は、**「ループの中でツールを使用するLLM」**です。

エージェントループ
エージェントループ:計画→実行→反省のサイクル

エージェントは以下の3ステップを繰り返します:

指示(Directive)
    ↓
┌─────────────────────┐
│ 計画(Plan)         │ ← 環境を観察・推論
│        ↓            │
│ 実行(Act)          │ ← ツール/MCPで自律的決定
│        ↓            │
│ 反省(Reflect)      │ ← フィードバックから学習
└─────────────────────┘
    ↓
成果(Outcome)

ループの3ステップ

1. 計画(Plan)

  • 現在のコンテキストに基づいて推論
  • 環境を観察
  • 次の行動を決定

2. 実行(Act)

  • ツールやMCP(モデル・コンテキスト・プロトコル)を使用
  • 目標に沿った自律的な決定

3. 反省(Reflect)

  • 環境がどのように更新されたかを確認
  • フィードバックから学習
  • アプローチを調整

実装例:Claude plays Pokemon

エージェント的ループの実装を、実際のユースケースで見てみましょう。

Claude plays Pokemon
Claudeがポケモンをプレイ:エージェントループの実践

動作フロー

  1. 計画:現在のゲーム状態を見て計画(例:「ママに話しかける」)
  2. 実行:パラメータ「A」で「ボタンを押す」ツールを起動
  3. 反省:計画がうまくいったか確認
  4. 次の計画に戻る

実装の詳細

The prompt / The core loop
プロンプト、ツール、コアループの関係性

ツール

  • 知識ベースの更新
  • エミュレータの使用
  • ナビゲーター

システムプロンプト

  • ポケモンのゲームについて
  • 何をすべきかを指示

知識ベース(長期記憶)

  • Pythonの辞書のようなもの
  • 読み書き可能
  • 例:「ピカチュウが好き」といった情報を記憶

会話履歴の管理

  • コンテキストウィンドウの終わりに達したら要約してクリア

エージェントの一般的な実装(コード)

エージェントの基本構造は、以下のようなコードで表現できます:

# エージェントの構成要素
environment = ...  # エージェントが行動する環境
tools = ...        # 環境と対話するためのツール
system_prompt = ...  # 目標、制約、振る舞い方
context = ...      # 会話履歴、環境、ツール、プロンプトの表現

# エージェントループ
while True:
    context = load_context(environment, tools, system_prompt, history)
    response = llm.call(context)
    
    if response.has_tool_call:
        tool_result = execute_tool(response.tool_call)
        context.update(tool_result)
    else:
        return response.output

このシンプルなループ構造が、エージェントの核となっています。


3つのエージェントタイプの比較

エージェントは、環境・ツール・プロンプトが異なるだけで、すべて同じバックボーン(エージェント的ループ)を共有しています。

3つのエージェントタイプ
より具体的に:環境・ツール・プロンプトの違い

コーディングエージェント

  • 環境:ターミナル、ファイルシステム
  • ツール:bash, grep, ファイルの読み書き
  • プロンプト:コーディングスタイル、ルール

コンピュータ使用エージェント

  • 環境:あなたのPC
  • ツール:クリック、タイプ、スクリーンショット
  • プロンプト:OS情報、操作ヒント

検索エージェント

  • 環境:Web、ローカルファイル
  • ツール:検索、取得(フェッチ)
  • プロンプト:アクセス範囲、出力形式

2. エージェント構築のベストプラクティス

効率的なエージェントを構築するためには、4つの重要な観点があります。

2.1 環境(いつエージェントを構築すべきか)

エージェントはすべてのユースケースに適しているわけではありません。以下のチェックリストで判断しましょう。

チェックリスト
チェックリスト:エージェントを構築すべきか

✅ チェックリスト

1. そのタスクは十分に複雑か?

  • 決定木に分解できるなら、ワークフローアルゴリズムの方が効率的
  • ワークフローの方がコスト効率が高く、制御も容易
  • エージェントを使うのは、決定木で処理できないほど複雑な場合のみ

判断基準

  • いいえ(決定木で対応可能)→ ワークフロー
  • はい(決定木では不可能)→ エージェント

2. そのタスクには十分に価値があるか?

  • エージェントに投資するコストに見合う価値があるか
  • 例:1タスク10セント予算の場合
    • 30,000トークンしか買えない
    • エージェント的ループを数回回すだけで終わる
    • この場合、一般的なシナリオはワークフロー、複雑なものだけエージェントに回す方が合理的

判断基準

  • <0.1ドル以下 → ワークフロー
  • 1ドル以上 → エージェント

3. タスクのすべての部分が実行可能か?

  • エージェント的ループで頻繁に失敗すると、コストとレイテンシーが増大
  • 失敗が多い場合、タスクのスコープを狭める
    • 既存のタスクをより小さく、より簡単なサブタスクに分割

判断基準

  • いいえ(失敗が多い)→ 対象範囲を縮小
  • はい(実行可能)→ エージェント

4. エラーまたはエラー発見にかかるコストは?

  • ハイステークス(重大)なエラーや、発見困難なエラーは問題
  • 対策:
    • 読み取り専用アクセスのみを与える
    • ヒューマン・イン・ザ・ループ(人間の承認を頻繁に求める)

⚠️ 注意:これらの制限はスケーラビリティを制限する

判断基準

  • 高(エラーコストが高い)→ 読み取り専用またはヒューマン・イン・ザ・ループ(人間の関与)
  • 低 → エージェント

具体例:コーディング(すべての条件を満たす理想例)

基準 評価 理由
✅ 複雑性 高い デザインドキュメント→PRは決定木では不可能
✅ 価値 高い 良いコードを書くことには大きな価値
✅ 実行可能性 高い 最新Claudeモデルはコーディングが得意
✅ エラーコスト 低い ユニットテストやCIで検証可能

結論:これらの理由から、コーディングはエージェントの優れたユースケースであり、コーディングエージェントが爆発的に増えている


2.2 ツール設計

基本的な設計原則

明確で理解しやすいツールを設計

  • コンテキストをほとんど持たない人間にツールを渡した場合
  • その人が呼び出し方、いつ呼び出すべきかを簡単に理解できるべき

パラメータの設計

  • スキーマや型を慎重に考える
  • 例:数値は string ではなく integerfloat として型付け
  • これらの慎重な考慮が、エージェントの精度を向上させる

ツールの出力設計

エラー時

  • エージェントが何が悪かったかを理解できる十分な情報
  • 自らデバッグして次のイテレーションに進めるようにする

成功時

  • 発生した可能性のある状態の変化をすべて含める
  • エージェントが次のステップを計画できるようにする

ツールスキャフォールディング(Tool Scaffolding)

多数のツールを扱う際、エージェントは苦労します。以下の戦略が有効です:

1. 動的ツール発見(Dynamic Tool Discovery)

  • すべてのツールをリストアップせず、高レベルのツールセット(MCP)を提示
  • エージェントが必要に応じて「ダブルクリック」して詳細を確認

2. ツール検索ツール(Tool Search Tool)

  • メタツールを提供
  • 他のすべてのツールの中から最も関連性の高いツールを検索

3. 検証ツール

  • エージェントが自律的に動作を検証・テストできるツール
  • ユーザーに戻る必要性を減らす

ツール設計のヒント

Claudeを活用

  • ツール作成時、Claudeをコードレビュアーとして使用
  • 作成中のツールが理解しやすく使用可能かをチェック
  • 反復的なやり取りで納得のいく設計にたどり着く

2.3 プロンプティングとコンテキストエンジニアリング

システムプロンプトの設計

重要性

  • エージェントに何を達成してほしいかを伝える
  • 指示の形で、通常は自然言語で記述
  • 従うべきルールを理解させる上で不可欠

推奨手法

  • Anthropic Workbenchを使用
  • Claudeと何度もやり取りして改善
  • どの部分が改善できるか、どうすればより良い生成ができるかを理解

エージェント的ループの各ターン

初期段階

  1. システムプロンプト
  2. 最初のユーザーメッセージ
  3. ツールの説明
  4. 追加コンテキスト(検索、アップロードされたドキュメント)

ループの継続

  • エージェントが自然言語の応答やツール呼び出しを生成
  • ツールの結果(エラーや出力)を処理
  • 次に何をすべきかを決定
  • コンテキストが更新され、積み上がっていく

コンテキストの腐敗(Context Rot)

問題

  • タスクが非常に複雑になると、コンテキストが長くなりすぎる
  • コンテキストウィンドウの上限に達する前から、パフォーマンスが低下

原因

1. コンテキストの汚染(Context Contamination)

  • エージェントがハルシネーション(幻覚)を起こす
  • ツール結果でエラーを犯す
  • それらを継続的に参照し続け、コンテキストを汚染

2. コンテキストの散漫(Context Distraction)

  • システムプロンプトやトレーニングで学んだことよりも
  • コンテキストの最新のステップに集中しすぎる

解決策:コンテキストエンジニアリング

4つの基本原則があります:

1. キュレーション(Curate)

  • タスク完了に関連するものだけに厳選
  • システムプロンプトとユーザーメッセージを簡潔に
  • そのターンで完了すべきことに関連するものだけにする

2. 永続化(Persist)

  • エージェントが複数のターンにわたってコンテキストを保存
  • 例:メモリツール

3. 分割(Isolate)

  • 既存のタスクを複数のサブタスクに分割
  • コンテキストを分離
  • コンテキストを小さく、関連性の高いものに保つ

4. 圧縮(Compress)

  • コンテキストウィンドウの上限に達したとき
  • タスク続行に必要な最も関連性の高いトークンだけを保持

Claude開発者プラットフォームで利用可能

  • ツール結果のクリアリング
  • メモリ
  • コンパクション(圧縮)

プロンプトキャッシングとの使い分け

プロンプトキャッシングを選ぶべき場合

  • コンテキストが長くなってもClaudeの性能が低下しない
  • 長いコンテキストウィンドウにさえ達していない
  • コストとレイテンシーを最適化したい
  • 複数のターンにわたってコンテキストが同じまま

⚠️ 注意:コンテキスト管理は操作が難しい場合がある


2.4 テストと評価

よくある間違い

1. 経験的テストの欠如

  • おもちゃのプロンプトやデータを使用
  • データ品質やインフラの問題を見落とす
  • エージェント自体の失敗と区別できない

2. 間違ったメトリクスへの焦点

  • 例:コーディングエージェントでレイテンシーを過度に重視
  • 知性(Intelligence)が指数関数的な利益をもたらすことを無視

3. 主観的な「雰囲気」への依存

  • 再実行可能なテストスイートを持たない
  • 一度きりの対話に頼る
  • 「なんとなく良さそう」という評価

ベストプラクティス

1. 包括的な評価スイート

  • 実世界で遭遇すると予想されるすべてのケースを網羅
  • フルカバレッジを実装

2. テレメトリへの投資

  • 失敗と成功の両方に対する可観測性(Observability)
  • ログの監視と分析

3. 実世界のユースケースでのテスト

  • これが最も重要
  • 本番環境に近い条件でテスト

3. 実世界のユースケース

実際のエージェントの実装例を見ていきましょう。

3.1 コーディングエージェント

コーディングエージェント
コーディングエージェントの構成

環境

  • ファイルシステム
  • ターミナル

ツール

  • bash
  • grep
  • ファイルの読み書き
  • 適切なツールを与える(過度なアクセスは避ける)
  • アクセスさせたくないものは与えない

プロンプト

コーディングスタイル

ルールやガードレール

  • 例:ファイルを削除しない
  • 例:git push前に許可を得る

推奨される振る舞い

  • 例:テストを先に書く

動作フロー

  1. 人間がターミナルでクエリを投げる
  2. LLMとタスクを明確化
  3. コーディング準備ができる
  4. ファイルを検索、読み取り、コンテキストを収集
  5. コーディング開始
  6. ファイルを編集、テストを実行
  7. 満足のいく結果が得られるまで繰り返し
  8. 人間に出力を返す
    • 変更されたファイルのリスト
    • パスしたテストのリスト
    • 出力内容の要約

段階的な使用

  • 小さなユースケースでテストを始める
  • 信頼できるようになるにつれて、より大きなタスクを与える
  • タスクが大きくなるにつれて、コンテキストが成長
  • メモリやコンテキスト編集の機能を追加することを検討

3.2 コンピュータ使用エージェント(Computer Use Agent)

環境

あなたのコンピュータ

ツール

  • マウスのクリック
  • キーボードでのタイピング
  • 移動
  • :ClaudeはPC操作ツールでトレーニング済み
  • APIやClaude開発者プラットフォームを通じて利用可能

プロンプト

  • オペレーティングシステム(OS)は何か
  • 注意点
    • インターネットアクセスを与えるか否か
  • コンピュータ内での移動方法に関するヒント

ヒューマン・イン・ザ・ループ(HITL)

⚠️ 重要

  • Claudeにコンピュータを自由に操作させない
  • 何かをする前に許可を得るようにする

使用例

ユーザー:日本への旅行を予約して

エージェント

  1. ブラウザをクリックして開く
  2. ホテルやフライトを調べる
  3. スクリーンショットを撮って何を見ているか確認
  4. 「承認を得るまでは、実際には何も予約しない」

3.3 検索エージェント

エージェントによる検索
エージェントによる検索プロセス

環境

テキストコーパス(本文集):

  • 組織のデータ
  • Web全体
  • 法的文書
  • ローカルファイルシステム

ツール

  • 検索ツール
  • 取得(フェッチ)ツール(ドキュメント全体を取得)

プロンプト

1. アクセス可能なテキストボディの説明

  • Web全体にアクセスできるのか
  • Webの一部なのか
  • ドキュメントの種類は何か

2. 出力フォーマットの指定(重要)

  • 単一の回答なのか
  • 引用付きの詳細なレポートなのか
  • 最も関連性の高い検索結果のリストなのか

⚠️ 注意:出力フォーマットを指定しないと、エージェントは検索を延々と続けてしまう


動作例

ユーザー:ニューヨーク市のアパートに関する詳細を調べて

エージェント

  1. 一連の検索結果を実行
  2. 検索結果で見つけたものに基づいて
  3. さらなるフォローアップ検索
  4. Webやファイルシステムからのドキュメント取得
  5. 情報を統合
  6. ニューヨーク市のアパートに関する詳細な回答を作成

4. Anthropicプロダクトでの応用

実際にAnthropicの製品で、これらのエージェント技術がどのように活用されているか見ていきます。

Claude plays Pokemon

  • エージェント的ループの実装例
  • システムプロンプト、ツール、知識ベース(長期記憶)を活用
  • ゲーム全体をプレイ

Claude Code

長期にわたるコーディングタスクに対応:

機能

メモリツール

  • 過去に何をしたか覚えている

claude.mdファイル

  • カスタムで記述可能
  • 異なるリポジトリでのコーディングスタイル
  • 従うべきガイドラインを認識

コンパクション(圧縮)ツール

  • コンテキストウィンドウの終わりに達したとき
  • 会話履歴をクリアして作業継続

Research Product(Claude AI)

概要

  • マルチエージェントによるディープリサーチ製品
  • ユーザーがディープなリサーチ質問を投げる
  • Claudeが調査を行い、引用付きの詳細なレポートを返す

長いコンテキストへの対応:サブエージェントの使用

メインエージェント
    ↓ タスクを小さなサブタスクに分割
    ↓
┌───────────────────────────┐
│ サブエージェント1  サブエージェント2  サブエージェント3 │
│ (異なるプロンプト) (異なるプロンプト) (異なるプロンプト) │
│      ↓               ↓               ↓       │
│   検索・取得      検索・取得      検索・取得    │
└───────────────────────────┘
    ↓ 情報を持ち帰る
メインエージェント
    ↓ すべてを統合
ユーザーのためのレポート生成

メインエージェントの役割

  • リサーチタスクを複数のサブタスクに分割
  • サブエージェントを起動
  • すべての情報を統合してレポート生成

サブエージェントの役割

  • それぞれ異なるプロンプトを受け取る
  • 検索や取得を実行
  • メインエージェントに情報を持ち帰る

まとめ

エージェント構築の核心

今回のセッションで学んだエージェント構築の核心をまとめます。

1. 適切なユースケースを選ぶ

  • 複雑性、価値、実行可能性、エラーコストを評価
  • すべてのタスクにエージェントが適しているわけではない
  • ワークフローで解決できるなら、そちらを選ぶ

2. 明確で理解しやすいツールを設計

  • 十分な情報を含む出力
  • スカフォールディングで複雑性を管理
  • 検証ツールで自律性を高める
  • Claudeをレビュアーとして活用

3. コンテキストエンジニアリングを活用

  • キュレーション:関連情報のみに絞る
  • 永続化:必要な情報をメモリに保存
  • 分割:サブタスクに分け、コンテキストを分離
  • 圧縮:関連トークンのみ保持

4. 包括的なテストと評価

  • 実世界のユースケースでテスト
  • 可観測性への投資
  • 主観的な評価を避ける
  • フルカバレッジの評価スイートを構築

エージェントの本質

「エージェントとは、ループの中でツールを使用するLLM」

環境、ツール、プロンプトを適切に設計し、ベストプラクティスに従うことで、エージェントに成功のための最良のチャンスを与えることができます。


所感

このセッションを通じて、エージェントの本質的な構造から実装の詳細、実世界での応用まで、体系的に学ぶことができました。

特に印象的だったのは、「すべてのタスクにエージェントが必要なわけではない」というメッセージです。複雑性、価値、実行可能性、エラーコストを冷静に評価し、適切な技術を選択することの重要性を改めて認識しました。

また、コンテキストエンジニアリングの4原則(キュレーション、永続化、分割、圧縮)は、長期的なタスクに取り組むエージェントを構築する上で非常に実践的な指針となりそうです。

Anthropic Builder Summitは、AI技術の最前線に触れることができる貴重な機会でした。今後のエージェント開発に、今回学んだ知見を活かしていきたいと思います。


参考リンク

関連記事

同じイベントの別セッションのレポートもぜひご覧ください:

公式リソース


本資料は、Anthropicの研究者HannaとStephanieによるプレゼンテーション「効率的なエージェントの構築」の内容を整理したものです。

リバナレテックブログ

Discussion