プロンプティング、ツール使用、エージェント
言語モデルから信頼できる仕事を引き出す方法。仕様としてのプロンプト、構造化出力、関数呼び出し、エージェントループ、Model Context Protocol、そしてトランスクリプトではなくタスクの成功で測るエージェント評価を解説します。
概要
言語モデル単体はテキストを生成するだけです。有用なシステムは、それを何が欲しいかを述べるプロンプト、返ってきたものを検査するパーサー、モデルが実行を依頼できるツール、そしてタスクが完了するか予算を使い切るまで続くループで包みます。このハブはその包み方を扱います。よく仕様化された1つのプロンプトから、ファイルを読み、APIを呼び、コードを編集する多段階のエージェントまでです。OpenAI、Anthropic、Googleのホスト型モデル上で、あるいはローカルで提供されるオープンモデル上で構築するエンジニアのためのページです。パターンは同じだからです。
これが重要なのは、モデルがエンジニアリングの中で最も小さな部分だからです。デモとプロダクトの違いは、プロンプトの精密さ、出力の検証、ループに課す制限、そしてモデルやプロンプトが変わったときに退行を捕まえる評価にあります。
重要な考え方
プロンプトは仕様である
プロンプトは関数のシグネチャとそのdocstringのように扱ってください。役割、タスク、制約、出力形式、入力が使い物にならないときの対処を、この順で述べます。形式が微妙なときは2つか3つの実例を示してください。例はルールより確実に読まれます。安定した指示はシステムプロンプトに、リクエストごとの材料はユーザーターンに置きます。こうするとプロバイダが安定した接頭辞をキャッシュしてコストを削減できます。回答前に隠れた思考の連鎖を生成する推論モデルは、目標と制約以外はほとんど必要としません。一方、古いモデルは段階的に考えるよう求めると改善します。プロンプトはモデル名と日付とともにgitでバージョン管理してください。あるモデルのリリース向けに調整したプロンプトは、次のリリースでは違う振る舞いをします。
構造化出力とツール呼び出し
出力がプログラムに渡されるときは、スキーマに対するJSONを要求して検証してください。プロバイダは今や制約付きデコーディングを提供しており、出力が構文解析できることを保証します。PydanticやInstructorなどのライブラリは内容を検証し、フィールドが間違っていればエラーメッセージとともに再試行します。ツール呼び出し(関数呼び出し)は同じ考え方の逆方向です。名前、目的、引数のJSONスキーマで関数を記述すると、モデルは散文ではなく呼び出しで答えます。関数を実行し、結果を新しいメッセージとして送り返すのは自分のコードです。モデル自身は何も実行しません。これが安全性の性質であり、以下のループが存在する理由でもあります。
エージェントループ
エージェントとは、モデル、ツールの集合、ループです。各ターンでモデルはそれまでの会話を見て、回答するかツールを求めるかします。ループはツールを実行し、観測を追加して、再びモデルを呼びます。エージェントを難しくするすべてのことは、この形から導かれます。コンテキストはターンごとに増え、誤った観測は後続のすべてのステップを誤らせ、停止条件がなければループは予算が尽きるまで走ります。
Model Context Protocol(MCP)は、Anthropicが2024年11月に公開し、その後OpenAI、Google、ほとんどのエージェントフレームワークに採用されたもので、ツール側を標準化します。サーバーがツール、リソース、プロンプトテンプレートを公開し、クライアントがそれらを発見し、モデルには通常の関数スキーマとして見えます。実用上の利点は、ファイルシステム、データベース、チケットシステムを一度包めば、どのエージェントからでも使えることです。
セキュリティはプロンプトではなくループの設計に属します。ツールが返すもの、Webページ、メール、ファイルは、いずれも指示として読めるテキストを含みうるもので、モデルはそれをあなたの指示と確実には区別できません。各ツールには必要最小限のアクセス権を与え、破壊的な操作には確認を要求し、秘密情報をコンテキストから遠ざけ、すべての呼び出しを記録してください。安全性のハブがプロンプトインジェクションを詳しく扱います。
エージェントの評価
トランスクリプトを3本読むことは評価ではありません。検査可能な終了状態をもつタスクの集合を作り、各タスクでエージェントを複数回走らせ、タスクあたりのコストとレイテンシとともに成功率を報告してください。SWE-bench(実際のGitHub issueの解決)やtau-bench(シミュレートされたユーザーとのカスタマーサービスタスク)などの公開ベンチマークがその形を示しています。スコアは最終状態が正しいかどうかであり、トランスクリプトがもっともらしく見えるかではありません。すべての実行のトレースを保存し、退行がプロンプトの変更、モデルの更新、ツールの障害のどれに由来するか追跡できるようにしてください。出力が自由形式のテキストの場合は、まずサンプルで人間のラベルに対して較正するなら、ルーブリック付きのLLM判定器も許容されます。評価のハブを参照してください。
どこから始めるか
プロンプト、構造、限界を扱うLLMをうまく使うから始め、次にモデルを包むラッパーのためにノートブックからサービスへに進んでください。エンベディングと類似検索は、ほとんどのエージェントが必要とする検索ツールへの準備になります。プロンプトパターンと構造化出力のリファレンスはチートシートで、RAGのハブは最も一般的なツールを扱います。
ツールとプラットフォーム
| ツール | 用途 | ライセンス | プラットフォーム |
|---|---|---|---|
| Anthropic SDK and Claude | ツール使用、構造化出力、MCPのリファレンス実装 | SDKはMIT、モデルはクローズド | Anthropic |
| OpenAI SDK and Agents SDK | 関数呼び出し、構造化出力、エージェントのプリミティブ | SDKはMIT、モデルはクローズド | OpenAI |
| Google Gemini API | 関数呼び出しと長いコンテキストでのツール使用 | プロプライエタリなサービス | |
| MCP Python SDK | MCPサーバーとクライアントの作成 | MIT | Anthropic |
| Pydantic and Instructor | モデル出力に対する再試行付きスキーマ検証 | MIT | オープンソース |
| Outlines | ローカルモデル向けの制約付きデコーディング | Apache-2.0 | オープンソース |
| LangGraph | 多段階エージェントのための明示的な状態機械 | MIT | オープンソース |
| Inspect | UK AI Security InstituteによるエージェントとLLMタスクの評価フレームワーク | MIT | オープンソース |
よくある間違い
- 曖昧な説明の付いた40個のツールを提供する。ツールの選択は数が増えると劣化するので、タスクごとにツールをまとめ、それぞれを正確な一文で説明してください。
- ターンやトークンの予算なしでループを走らせる。失敗の形は、ファイルを見つけられなかったモデルからの400 USDの請求書です。
- ツール出力を信頼できるものとして扱う。「以前の指示を無視せよ」と書かれた取得ページは攻撃であり、ループはそれを前提にしなければなりません。
- 内容を検証せずにJSONを構文解析する。フィールドは構文的に正しくても意味的に間違っていることがあります。
- 退行スイートなしでプロンプトの変更を出荷し、入力の5%で書式が壊れたことを後から発見する。
- 温度0で1回テストして決定的だと呼ぶ。各評価タスクを複数回走らせ、ばらつきを報告してください。
さらに深く
- Wei et al., Chain-of-Thought Prompting Elicits Reasoning in Large Language Models, 2022。
- Yao et al., ReAct: Synergizing Reasoning and Acting in Language Models, 2022。
- Greshake et al., Not what you’ve signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection, 2023。
- Jimenez et al., SWE-bench, 2023。および Yao et al., tau-bench, 2024。
- Model Context Protocolの仕様。
- Anthropicのツール使用ドキュメントとOpenAIの関数呼び出しガイド。