SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

AIエージェント開発の最前線!現場で使える開発術

【AIエージェントの内部構造】長時間タスクを完遂させる「エージェントハーネス」の概要と設計・実装

AIエージェント開発の最前線!現場で使える開発術 第3回


自分のハーネスを作るには

DeepAgentsを出発点にする

 エージェントハーネスを自分で構築する場合、ゼロから書く必要はありません。DeepAgents(TypeScript版)では、createDeepAgent関数を呼ぶだけで、セクション2で紹介した4つの構成要素(計画、ファイルシステム、サブエージェント、コンテキスト管理)が標準ミドルウェアとして組み込まれます。まずはシステムプロンプトとツールを設定するだけで動作します。

 筆者の場合は、特定の業務向けにカスタマイズしたDeepAgents(TypeScript版)をBunを用いてバイナリにビルドし、業務エージェントとして配布しています。

 DeepAgentsは、Webアプリケーション開発で馴染みのある「ミドルウェアパイプライン」という構造を採用しています。これは、工場でベルトコンベアに乗った製品が、次々と配置された作業員(ミドルウェア)によって加工されていく様子に似ています。ユーザーの入力からモデルの呼び出しまでの間に、複数のミドルウェアが順番に処理(加工や検品)を行います。

図3.DeepAgentsとミドルウェアの関係
図3.DeepAgentsとミドルウェアの関係

 各ミドルウェアは独立しているため、ユースケースに応じて機能の追加・削除・順序変更が可能です。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エージェントを拡張する上でも、このハーネスの構造を理解することが設計の確実な出発点となるはずです。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
AIエージェント開発の最前線!現場で使える開発術連載記事一覧

もっと読む

この記事の著者

西見 公宏(ニシミ マサヒロ)

 株式会社ジェネラティブエージェンツ 代表取締役CEO。2024年3月にAIエージェントの開発・利活用を専門に扱う同社を創業。法人を中心にAIエージェントの活用支援・開発支援を行っている。LangChain公式アンバサダー。趣味はAIエージェントのトレースを眺めること。著書に『その仕事、AIエージェ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/23340 2026/03/13 16:29

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー