AIエージェント進化論:トップ開発者はClaudeのためにどのように効率的なツールを構築するのか?
あなたのAIエージェントは少し不器用で、その潜在能力を最大限に発揮できていないと感じていませんか?問題はAI自体にあるのではなく、あなたが与える「ツール」にあるのかもしれません。この記事では、Anthropicの内部手法を明らかにし、AIツールを構築、評価、最適化する方法、さらにはClaudeにそのすべてを支援させて、AIアプリケーションのパフォーマンスを倍増させる方法を共有します。
こんな風に感じたことはありませんか?Claudeのような強力な大規模言語モデル(LLM)を手にしていて、理論的には複雑なタスクを自動的に処理できるはずなのに、実際に動かしてみるといつもどこかぎこちなく、十分に賢くない。それはまるで、ミシュランの星付きシェフを雇ったのに、鈍いナイフと新鮮でない食材しか与えなかったようなものです。
問題の根源は、シェフの能力ではなく、私たちが彼に提供したツールにあることが多いのです。
AIエージェントのパフォーマンスは、私たちが与えるツールと最も直接的な関係があります。この記事では、Anthropic社内で無数の実験を通じてまとめられた経験を共有します。高品質なツールを構築する方法、包括的な評価を行う方法、そして最も興味深い部分である、ClaudeのようなAIと協力して、AI自身にツールを最適化させる方法です。
それで、AIの「ツール」とは一体何なのでしょうか?
詳しく見ていく前に、まず一つの概念を明確にしておく必要があります。従来のソフトウェア開発は、正確なレシピを書くようなものです。同じ材料(入力)を入れ、すべての手順を正確に守れば、最終的に出来上がる料理(出力)は常に同じになります。これが「決定論的システム」と呼ばれるものです。
しかし、AIエージェントは違います。彼らは、同じ材料を与えられても、その場のインスピレーションによって少し違ったバリエーションを生み出す創造的なシェフのようなものです。それは「非決定論的システム」であり、変数と可能性に満ちています。
したがって、AIのために設計された「ツール」は、まったく新しい種類のソフトウェアです。それはもはや固定的な命令セットではなく、決定論的システムと非決定論的エージェントとの間に結ばれた「契約」のようなものです。ユーザーが「今日、傘を持っていくべきですか?」と尋ねると、エージェントは天気ツールを呼び出すかもしれませんし、自身の知識から答えるかもしれませんし、あるいは場所を尋ね返すかもしれません。間違うこともあれば、適切なツールを見つけられないこともあります。
これは、私たちの考え方を根本的に変えなければならないことを意味します。私たちが設計しているのは、もはや他の開発者向けのAPIではなく、不確実性に満ち、導きを必要とする「デジタルな脳」のためのツールなのです。
効率的なツールを構築する方法とは?継続的な開発サイクル
AIが使いやすいツールを構築するのは、一朝一夕にできることではありません。それは「構築、評価、学習」という継続的なサイクルです。
ステップ1:考えすぎずに、まずプロトタイプを作る
AIがどのツールを「使いやすい」と感じ、どのツールに「混乱」するかを、想像だけで予測するのは無駄です。最善の方法は、直接手を動かすことです。
Claude Codeのようなツールを利用して、ツールのプロトタイプを迅速に生成できます。ちょっとしたコツは、関連するソフトウェアライブラリ、API、またはSDKのドキュメント、特にLLMフレンドリーなプレーンテキストファイル(多くのオープンソースプロジェクトはllms.txt
のようなファイルを提供しています)を提供することです。これにより、作業がはるかに効率的になります。
プロトタイプが完成したら、それをローカルのモデルコンテキストプロトコル(MCP)サーバーまたは**デスクトップ拡張機能(DXT)**としてパッケージ化し、Claude CodeまたはClaudeデスクトップアプリケーションでテストできます。Anthropic APIを介してプログラムでテストすることもできます。
自分でツールをテストし、プロセスがスムーズかどうかを感じ、ユーザーからのフィードバックを収集することで、ユースケースに対する直感を養うことができます。
ステップ2:厳格な「最終試験」の時です
プロトタイプができたので、次にこれらのツールを使用したClaudeのパフォーマンスを測定する必要があります。これには、包括的な評価メカニズムが必要です。
単純すぎる「サンドボックス」環境は忘れてください!必要なのは、実世界から生まれ、十分な複雑さを持つ評価タスクです。優れた評価タスクは、AIが完了するために複数の、あるいは数十のツールを連続して呼び出す必要があるかもしれません。
これら2つのタスクセットの違いを見てください。
優れた評価タスクの例:
- 「来週、ジェーンと最新のAcme社プロジェクトについて話し合う会議をセッティングしてください。前回のプロジェクト計画会議の議事録からメモを添付し、会議室を予約してください。」
- 「顧客ID 9182が、1回の購入で3回重複請求されたと報告しています。関連するすべてのログ記録を検索し、他の顧客も影響を受けているかどうかを判断してください。」
弱い評価タスクの例:
- 「来週、[email protected]と会議をセッティングしてください。」
- 「customer_id=9182の支払いログを検索してください。」
違いがわかりますか?優れたタスクは、実際のワークフローにより近いです。
各評価タスクには、検証可能な結果が必要です。最も簡単な方法は文字列を比較することですが、より複雑な方法としては、別のClaudeインスタンスに結果が正しいかどうかを判断させることができます。同時に、システムプロンプトで、ツールを呼び出す前にAIに「推論プロセス」と「フィードバック」を返すように要求することもできます。これにより、AIの「思考の連鎖(Chain-of-Thought)」行動がトリガーされ、問題解決能力が向上します。
ステップ3:AIを最高の分析官にする
評価が終わり、目の前に大量のデータが広がっています。さて、どうしましょうか?
この時点で、AIエージェント自身があなたの最高のパートナーです。彼らは、ツールの説明の矛盾から、ツールの実装の非効率性まで、さまざまな問題を発見するのに役立ちます。しかし、一つ重要な点を覚えておいてください。大規模言語モデルは常に率直に話すわけではありません。彼らが「何を言わなかったか」は、しばしば「何を言ったか」よりも重要です。
AIがどこで立ち止まったり、混乱したりしたかを注意深く観察してください。その推論プロセス(CoT)を読んで、スムーズでない部分を見つけ出してください。評価プロセス全体のスクリプト(ツール呼び出しと戻り値を含む)をClaude Codeに直接貼り付けることさえできます。Claude Codeは、スクリプトの分析とツールのリファクタリングの専門家であり、修正後もツールの実装と説明が一貫していることを保証します。
実際、この記事のほとんどの提案は、私たちが社内でClaude Codeを使用してツールを継続的に最適化してきた実践から来ています。この方法により、専門の研究者が手作業で作成したツールを上回るパフォーマンスの向上が見られました。
効率的なツールを構築するための5つの黄金律
無数の反復サイクルを経て、私たちはいくつかの重要な設計原則を抽出しました。
法則1:少ないことは多いこと、AIに選択の麻痺を与えない
よくある誤解は、AIに与えるツールが多ければ多いほど良いというものです。しかし、事実はその逆です。既存のAPI機能を単純に1対1でツールにラップするだけでは、しばしば逆効果になります。
AIエージェントの「コンテキスト」は、人間の短期記憶のように限られています。対照的に、従来のコンピュータのメモリはほぼ無限です。連絡先リストから人を探すことを想像してみてください。従来のソフトウェアはリスト全体をすばやく走査できます。しかし、ツールが「すべて」の連絡先を返し、AIに一つずつ読ませるとしたら、それは貴重なコンテキストスペースの無駄遣いです。
より賢く、より自然な方法は、人間のように、関連するページに直接ジャンプすることです(たとえば、アルファベット順に検索するなど)。
したがって、特定の、影響力の大きいワークフローを対象としたツールを設計する必要があります。たとえば、list_users
、list_events
、create_event
の3つのツールを提供する代わりに、空き時間を見つけてイベントをスケジュールするschedule_event
ツールを統合する方が良いでしょう。
法則2:ツールボックスを整理する、命名は芸術である
AIが数十、数百のツールにアクセスできるようになると、混乱が生じます。ツールの機能が重複していたり、用途が曖昧だったりすると、AIは簡単に間違ったツールを使用してしまいます。
**名前空間(Namespacing)**は、シンプルでありながら効果的な解決策です。関連するツールに共通のプレフィックスを付けてグループ化することで、AIが適切なタイミングで適切なツールを選択するのに役立ちます。例:
- サービスによる分類:
asana_search
,jira_search
- リソースによる分類:
asana_projects_search
,asana_users_search
これにより、AIのコンテキストにロードする必要のあるツールの数が減るだけでなく、計算負荷の一部がAIの「脳」からツール自体に移行するため、エラーのリスクが軽減されます。
法則3:要点だけを話す、AIの「注意力」は貴重である
ツールの戻り値も同様に重要です。価値が高く、コンテキストに密接に関連する情報のみを返すようにしてください。
AIは、uuid
のような謎めいた技術的な識別子よりも、自然言語の名前や用語を処理する方が得意です。意味のない長い英数字のIDを、より意味的に豊かな言語に解析するだけで、Claudeの検索タスクにおける精度が大幅に向上し、幻覚が減少することがわかりました。
場合によっては、柔軟性を提供することもできます。たとえば、response_format
パラメータを追加して、AIが「簡潔(concise)」または「詳細(detailed)」な結果を返すかを選択できるようにします。簡潔版にはコアコンテンツのみが含まれ、詳細版には後続のツール呼び出しに便利なさまざまなIDが含まれます。
法則4:倹約を心がける、AIに「脳容量」を節約させることを教える
コンテキストの品質は重要ですが、「量」も最適化する必要があります。ツールのコンテキスト長は限られているため、ページネーション(pagination)、範囲選択(range selection)、**フィルタリング(filtering)**などの機能を実装する必要があります。
ツールの戻り結果が切り捨てられた場合は、AIがよりトークンを節約する戦略(たとえば、一度に広範囲の曖昧な検索を行うのではなく、複数回の小範囲の正確な検索を行うなど)をとるように、明確なプロンプトでガイドする必要があります。
同様に、エラーメッセージも非常に重要です。冷たいエラーコードを返すのではなく、問題点を明確に説明し、修正の提案を含む役立つ応答を提供します。
この比較を見てください。
- 役に立たないエラー:
{"error": {"code": "RESOURCE_NOT_FOUND"}}
- 役立つエラー: 「# リソースが見つかりません:無効な
userId
。userId
‘[email protected]’ が存在しないか、形式が間違っているため、リクエストは失敗しました。有効なuserId
の例は次のとおりです:‘192829814…’。この問題を解決するには、user_search()
を呼び出してみてください。」
後者の方が、AIを正しい道に導くのに明らかに優れています。
法則5:最も強力なレバレッジ—優れた説明は千行のコードに勝る
最後に、最も効果的でありながら、最も見過ごされがちな部分、つまりツールの説明をプロンプトエンジニアリングすることにたどり着きました。
ツールの説明と仕様はAIのコンテキストにロードされ、その動作に直接影響します。記述する際は、新しくチームに加わった同僚にツールを説明していると想像してください。当たり前だと思っているかもしれない背景知識(特定のクエリ形式、専門用語の定義、リソース間の関係など)をすべて明確に書き出してください。
曖昧さを避け、特にパラメータの命名には注意してください。曖昧なuser
ではなく、明確なuser_id
を使用してください。
わずかな変更で、パフォーマンスが大幅に向上することがあります。たとえば、Claude Sonnet 3.5がSWE-bench検証評価で最高のパフォーマンスを達成したのは、ツールの説明を正確に微調整したことで、エラー率が大幅に低下したためです。
未来への展望:AIと共進化する新しい開発モデル
AIエージェント向けのツールを構築するには、ソフトウェア開発の考え方を、予測可能な決定論的な世界から、変化に富んだ非決定論的な世界へと転換する必要があります。
私たちが説明したこの反復的で評価主導の開発プロセスを通じて、効率的なツールにはいくつかの共通の特徴があることがわかります。目標が明確で、AIのコンテキストをうまく利用し、柔軟に組み合わせることができ、AIが実世界の問題を直感的に解決できるようにします。
将来的には、LLM自体やMCPのような対話プロトコルがアップグレードされ続けるにつれて、AIが世界と対話する方法も進化し続けるでしょう。しかし、この体系的な最適化手法を堅持する限り、私たちの手にあるツールが、ますます強力になるAIと肩を並べて成長し、共に進化していくことを保証できます。
記事の出典
https://www.anthropic.com/engineering/writing-tools-for-agents