Anthropic「エージェントのための効果的なツールの書き方 — エージェントと共に」ガイド
TL;DR
Anthropicは、Model Context Protocol(MCP)を介してLLMエージェント向けのツールを作成・改善する方法を、Claude Codeを使ってプロトタイプを作成し、評価し、自動的にツール実装を洗練させるステップバイステップのガイドを公開しました。このガイドは、エージェントのパフォーマンスを一貫して向上させる5つの実践的な原則(ツールの選択、名前空間、意味のあるコンテキストの返却、トークン効率の高い応答、プロンプトエンジニアリングによる仕様)をまとめています。
ガイドの概要
このガイドは、開発者がエージェントと協力して、エージェント型AIシステムの効果的な表面積を拡張する高品質なツールを構築する方法を説明しています。プロトタイプ構築、包括的な評価、エージェント支援による洗練という3つのワークフロー段階をカバーし、その後、Anthropicの内部実験から導き出された簡潔な設計原則を紹介しています。
1. プロトタイプの構築
主要なアクション
- ローカルMCPサーバーまたはデスクトップ拡張機能(DXT)を立ち上げ、Claude Code(
claude mcp add <name> <command> …)またはClaude Desktopアプリの設定→開発者/拡張機能メニューを介して接続します。 - ツールが依存するライブラリ、API、MCP SDKに対してLLMフレンドリーなドキュメント(例:
llms.txtファイル)を提供します。 - 手動でテストし、正式な評価の前に粗い部分を表面化するためにユーザーフィードバックを収集します。
なぜ重要か
実践的なプロトタイピングにより、エージェントがどのツールインターフェースを人間工学的に感じるかが明らかになり、開発者は完全な評価に着手する前に反復できます。
2. 体系的な評価の実行
現実的なタスクの生成
- Claude Codeを使用して、現実世界のシナリオ(例:複数ステップの会議スケジュール、ログ分析、リテンションオファー生成)に基づいた数十のプロンプトと応答のペアを生成します。
- 過度に単純なプロンプトは避けます。強力なタスクには、複数のツール呼び出しと現実的なデータソースが必要です。
評価の実行
- 各タスクに対してLLM API呼び出しとツール呼び出しを交互に行うエージェントループ(
whileループ)を実装します。 - システムプロンプトに推論およびフィードバックブロックを含め、エージェントがツール呼び出しの前にチェーン・オブ・ソート(CoT)を出力できるようにします。
- Claudeでインターリーブ思考を有効にして、内部推論を自動的に表面化させます。
収集するメトリクス
- 検証可能なグラウンドトゥルースに対するトップレベルの精度。
- 実行時間、ツール呼び出し回数、総トークン消費量、エラー率。
- ツール呼び出しパターンの分布を分析し、冗長な呼び出しやページネーションの必要性を特定します。
エージェントとの結果分析
- エージェントのCoTとフィードバックをレビューして、曖昧な説明、非効率な実装、混乱を招くスキーマを特定します。
- 生のトランスクリプト(ツール呼び出しと応答)を調べて、隠れた障害モードを見つけます。
- 観察されたエラーパターン(例:不正確なパラメータ値)を使用してツール仕様を洗練します。
3. エージェントとの協働による洗練
- 評価トランスクリプトを連結し、Claude Codeに供給します。Claudeはリファクタリングを提案し、不整合を解決し、更新されたツール定義を生成できます。
- 改訂されたツールに対して評価を反復的に再実行し、保持されたテストセットでパフォーマンスが頭打ちになるまで続けます。
- Anthropicは、Claudeが生成した洗練が手動で書かれた「エキスパート」実装をしばしば上回ることを発見しました。
4. 効果的なツールを書くための原則
4.1 適切なツールを選ぶ
- 既存APIの薄いラッパーよりも、影響力が高く、タスク固有のツールを優先します。
- エージェントが必要とするデータのみを返すツールを設計します(例:
list_contactsではなくsearch_contacts)。 - 可能な場合は関連する操作を単一のツールに統合します(例:空き状況を見つけてイベントを作成する
schedule_event)。
4.2 ツールを明確に名前空間化する
- 一貫したプレフィックスまたはサフィックス(例:
asana_search、jira_search)を使用して、機能ドメインを明確にします。 - 適切な名前空間により、読み込まれるツール説明の数が減り、コンテキスト負荷が低下し、誤用の可能性が最小限に抑えられます。
4.3 意味のあるコンテキストを返す
- 不透明な識別子(
uuid)ではなく、高シグナルのフィールド(name、image_url、file_type)を出力します。 - 技術的なIDが必要な場合は、人間が読めるエイリアスまたは単純な数値インデックスを提供します。
response_format列挙型(例:concisevs.detailed)を提供し、エージェントが必要に応じてトークン軽量またはリッチなペイロードを要求できるようにします。
4.4 トークン効率の最適化
- ページネーション、範囲選択、フィルタリング、または合理的なデフォルトでの切り詰めを実装します(Claude Codeはツール応答を25kトークンに制限)。
- エラーメッセージは、不可解ではなく実行可能なものにし、エージェントを修正された入力へ導くようにします。
- 例:切り詰められた応答は、冗長な応答と比較して約2/3のトークンを節約しつつ、後続のアクションを可能にします。
4.5 ツールの説明をプロンプトエンジニアリングする
- 新しいメンバーへの説明のように説明文を書きます:明示的なパラメータ名、明確な入出力契約、具体的な例。
- 曖昧な名前(
user)を避け、正確な名前(user_id)を優先します。 - 小さな文言の調整で大きなパフォーマンス向上が得られます。Claude Sonnet 3.5は、正確な説明の改良後、SWE-benchで最先端の結果を達成しました。
5. 今後の展望
Anthropicは、エージェント向けのツール構築には、決定論的なソフトウェア契約から、非決定論的でエージェント中心の設計への移行が必要であると強調しています。プロトタイプ→評価→エージェント駆動の洗練という反復を通じて、開発者はLLMエージェントにとって「人間工学的」なツールとは何かを体系的に発見できます。MCPプロトコルと基盤となるLLMが進化するにつれて、この評価駆動型の方法論は、ツールエコシステムをますます高性能なエージェントに合わせ続けるために不可欠であり続けるでしょう。
参考文献とリソース
- Model Context Protocol (MCP): https://modelcontextprotocol.io/docs/getting-started/intro
- Claude Code: https://www.anthropic.com/claude-code
- ツール評価クックブック: https://platform.claude.com/cookbook/tool-evaluation-tool-evaluation
- Anthropic開発者ガイド(ツールのベストプラクティス): https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/implement-tool-use#best-practices-for-tool-definitions
- MCPサーバーツール注釈仕様: https://modelcontextprotocol.io/specification/2025-06-18/server/tools
参考文献とリソース
- Model Context Protocol(MCP): https://modelcontextprotocol.io/docs/getting-started/intro
- Claude Code: https://www.anthropic.com/claude-code
- ツール評価クックブック: https://platform.claude.com/cookbook/tool-evaluation-tool-evaluation
- Anthropic開発者ガイド(ツールのベストプラクティス): https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/implement-tool-use#best-practices-for-tool-definitions
- MCPサーバーツール注釈仕様: https://modelcontextprotocol.io/specification/2025-06-18/server/tools