見出し画像

AIエージェント連携の進化 | サブエージェントでトークン節約&精度アップ

こんにちは。ガジェットブロガーのじゃが(@jaga_farm)です。

少し前の記事で、複数のAIエージェントを連携させる仕組みを作った話を書きました。今回はその続編です。

前回作った「スキル」を改良して、さらにトークン節約と精度アップを実現しました。

気になっていたこと

前回の仕組みで動いてはいたのですが、一つ気になっていたことがありました。

メインのAIのコンテキストが汚れる問題です。

例えばWeb検索スキルを使うと、検索結果の詳細がメインのAIに全部返ってきます。これが積み重なると

  • トークン消費が増える

  • 本来の作業に関係ない情報がコンテキストを占有する

  • AIの精度が下がる(情報が多すぎて混乱する)

「これ、なんとかできないかな」と思っていたところ、Claude Codeの「サブエージェント」機能を活用することを思いつきました。

サブエージェントとは

サブエージェントは、Claude Codeで使える機能です(執筆時点では他のAIにはない)。

簡単に言うと、「別のAIを子プロセスとして起動して、処理を任せる」仕組みです。

ポイントは

  1. コンテキストが分離される - サブエージェントは独立したメモリを持つ

  2. サマリーだけ返す - 詳細な処理結果はサブエージェント内で完結

  3. メインが汚れない - 本来の作業に集中できる

改修したスキル

今回、以下の4つのスキルをサブエージェント対応に改修しましたので公開。

1. Web検索スキル(codex-web-search)

Before: 検索結果の詳細がすべてメインに返ってきた

After: 15行以内のサマリーだけ返却

2. プランレビュー(codex-plan-review)

このような形でAntigravityにてCodexへ相談。

Before: レビューの詳細指摘がすべてメインに

After: 総合評価+重要指摘3件のみ返却

3. コードレビュー(codex-code-review)

Before: diffと詳細な指摘がメインを占有

After: Must Fix/Should Fixのサマリーのみ返却

4. ワンショット実行(codex-one-shot)

Before: 実行ログがすべてメインに

After: 実行ステータス+変更ファイルリストのみ返却

サブエージェント化すべきスキル

どんなスキルがサブエージェント化に向いているか、整理しました。

向いているもの

向いていないもの

オーケストレーターパターン

今回、サブエージェント化に合わせて「オーケストレーターパターン」というテンプレートも作りました。

イメージ

メインのAIは「指揮者」として各フェーズを管理し、詳細な処理はサブエージェントに任せます。

仕組みの補足

Claude Codeにはネイティブなサブエージェント機能があり、メインとは別のコンテキスト(記憶領域)で処理を実行できます。しかし、その機能を呼ぶだけでは、サブエージェントが大量の情報をそのまま返してくる可能性があります。

そこで「オーケストレーターパターン」では、サブエージェントへの指示に厳格なルールを設けました

実際の記述例

各スキルには、以下のようなセクションを追加しています:

### オーケストレーターからの呼び出し方

Task(subagent_type="general-purpose", prompt="""
codex-web-searchスキルを使用して以下を調査:

調査対象: Python asyncio パフォーマンス最適化

【重要】結果は以下のフォーマットでサマリーのみ返却:
- 主要なポイント3つ以内
- 具体的なコード例があれば1つだけ
- 参考URLは最大3件
""")

ポイントは2つ:

  1. `Task(subagent_type=...)` でサブエージェントを明示的に起動(コンテキスト分離)

  2. 「サマリーのみ返却」 と厳格に指示し、出力を制限

1ことにまとめるとサブエージェントとして動かしたものの結果を要約して返すようプロンプトで制御することでメインで動いているコンテキストを最適化するものですね。

効果と体感

このパターンを導入した結果、以下のような効果を実感しています。

トークン消費の改善

長時間の作業でトークン上限に達するまでの時間が伸びました。特にWeb検索を多用する作業では、以前は検索結果がメインのコンテキストに蓄積されて圧迫されていましたが、今はサマリーだけが蓄積されるため余裕ができました。

精度の向上

メインのAIが「今やるべきこと」に集中できるようになりました。以前は関係ない情報(例えば3フェーズ前の検索結果の詳細)に引っ張られて話が脱線することがありましたが、それが減った印象です。

エラーの局所化

1つのサブエージェントがエラーを起こしても、メインのコンテキストには「失敗した」という結果だけが返ってきます。失敗の詳細なスタックトレースでメインが汚れないため、リトライや別のアプローチを取りやすくなりました。


このオーケストレーターパターンは、Claude Code以外のAIエージェント(例:Gemini系のAntigravity)でも応用可能です。ただし、ネイティブなサブエージェント機能がないので、外部CLIツール(codex execなど)を呼び出すことで、プロセスレベルでのコンテキスト分離を実現できます。結果として返ってくる標準出力だけがメインに蓄積されるため、同様の効果が得られます。

補足:他のAIエージェントでの応用

Anthropicはエコシステムのようなテンプレート作成が上手ですよね。だから使っちゃう。他のAIエージェントにも実装されたら面白いなと思ってます。

まとめ

スキルでのAIエージェント連携の次のステップとして、「サブエージェント化」を試してみました。

ポイントをまとめます。

  • サブエージェントはClaude Codeの機能で、コンテキストを分離できる

  • 大量データ処理やレビュー系はサブエージェント化が効果的

  • ユーザー対話や軽い処理はそのままの方がいい

  • オーケストレーターパターンでフェーズを管理すると整理しやすい

AIを使いこなす上で、「どこを分離するか」は意外と重要だと感じました。メインのコンテキストをきれいにすることで明らかに回答のレベルが上っていることを実感しています。

質問や「こうした方がいいよ」などあれば、コメントで教えてください!

最後までご覧いただきありがとうございました。ではまた〜!

いいなと思ったら応援しよう!

じゃが よろしければ応援お願いします! いただいたチップは活動費に使わせていただきます!