自分のハーネスを作るには
DeepAgentsを出発点にする
エージェントハーネスを自分で構築する場合、ゼロから書く必要はありません。DeepAgents(TypeScript版)では、createDeepAgent関数を呼ぶだけで、セクション2で紹介した4つの構成要素(計画、ファイルシステム、サブエージェント、コンテキスト管理)が標準ミドルウェアとして組み込まれます。まずはシステムプロンプトとツールを設定するだけで動作します。
筆者の場合は、特定の業務向けにカスタマイズしたDeepAgents(TypeScript版)をBunを用いてバイナリにビルドし、業務エージェントとして配布しています。
DeepAgentsは、Webアプリケーション開発で馴染みのある「ミドルウェアパイプライン」という構造を採用しています。これは、工場でベルトコンベアに乗った製品が、次々と配置された作業員(ミドルウェア)によって加工されていく様子に似ています。ユーザーの入力からモデルの呼び出しまでの間に、複数のミドルウェアが順番に処理(加工や検品)を行います。
各ミドルウェアは独立しているため、ユースケースに応じて機能の追加・削除・順序変更が可能です。DeepAgentsを活用する場合は、主にミドルウェアを自作またはカスタマイズしていくことになります。
業務エージェントにおけるカスタマイズ事例
筆者が開発する業務エージェントでは、標準機能をベースに、以下の独自ミドルウェアを追加しています。
コンテキスト圧縮の改良
DeepAgentsの標準的な要約ミドルウェアは「直近N件のメッセージを保持し、残りを要約する」という方式です。これに対し、筆者の業務エージェントでは、メッセージの役割に応じた「3層の保持ロジック」を実装しました。
- 第1層:システムメッセージ
- 第2層:直近のユーザーメッセージ(最大トークン数を限度として保持)
- 第3層:直近のツール実行コンテキスト(AIメッセージ、ツールメッセージのペアで保持)
システムメッセージは当然残さなければならないですが、第2層のユーザーメッセージと第3層のツール実行コンテキストが重要です。特に、エージェントハーネスによるAIエージェントはツール実行を主体とするので、ツール実行コンテキストが失われると、圧縮直後にエージェントが「直前に何をしたのか」を把握できず、同じツールを再実行するムダが生じます。
エラーからの自己復帰
長時間動作するエージェントでは、ツール実行中のエラーは避けられません。外部APIのタイムアウト、存在しないファイルへのアクセス、引数の形式ミスなど、数百回のツール呼び出しを重ねれば何らかのエラーは必ず発生します。ここでエージェントが停止してしまうと、それまでの作業が無駄になります。
対策として筆者の業務エージェントは、ツール実行をラップするミドルウェアを導入し、例外発生時にToolMessage(status: "error")へと変換してモデルに返す設計にしています。このToolMessageには、どのツールがどのような引数で呼び出されたか、エラーの内容(例外メッセージやスタックトレース)、明示的な指示(修正して再試行してください)を付与します。
ここで重要なのは、全てのエラーを一律にToolMessageに変換するわけではない点です。割り込み(Human-in-the-loop)や明示的な中断シグナルのような、エージェント自身では回復できないエラーは、例外としてそのまま再送出します。回復可能なエラーだけをモデルに渡し、回復不可能なエラーは制御フローに任せるという区別が必要です。
エラーを「失敗」ではなく「修正のための情報」としてモデルに渡すことで、モデルは別のアプローチを自力で試みることができます。たとえば「指定されたIDが見つかりません」というエラーを受け取ったモデルが、まず一覧取得ツールで有効なIDを確認してから再試行する、といった挙動が実際に観察されています。
コンテキスト上限超過時のフォールバック
自動圧縮で対応しきれなかった場合に備え、モデル呼び出しの直前で段階的にコンテキストを削減するミドルウェアも設けています。まずメッセージの先頭から削除を試み、収まらなければシステムプロンプトを縮約し、最終的には直近のユーザーメッセージを切り詰めます。自動圧縮とは別のミドルウェアとして実装しており、あくまで安全弁としての位置づけです。
こうしたカスタマイズは、いずれも独立したミドルウェアです。不要なら外す、足りなければ追加するという進め方ができるのがミドルウェアパイプライン方式の利点です。
まとめ
エージェントハーネスは、AIモデルを包み込み、長時間におよぶタスク実行を安定させるための基盤です。PCにおけるOSのように、コンテキスト管理、ツール実行管理、タスク計画という3つの基幹業務を担います。
具体的には、計画、ファイルシステム、サブエージェント、コンテキスト管理という4つの構成要素から構成されています。DeepAgentsは、オープンソースのミドルウェアとして実装しており、自分のユースケースに合わせたカスタマイズが可能です。
コーディングエージェントが実用的な成果を出せている背景には、この優れたハーネスの存在があります。今後、コーディング以外の領域へAIエージェントを拡張する上でも、このハーネスの構造を理解することが設計の確実な出発点となるはずです。
