本文へスキップ
ウェブエンジニア問題集
第12章

AIエージェントが失敗しないタスクの切り方

約9分
この章の目次開く

AIエージェントを使っていると、うまくいくときと、まったく形にならないときの差が異様に大きいことに気づきます。同じモデル、同じ指示ファイル、同じリポジトリなのに、結果が安定しません。

この差の大部分を説明するのは、モデルの機嫌でもプロンプトの言い回しでもなく、渡したタスクの大きさです。そしてこれは、感覚ではなく測定されています。

学習者学習者

指示が悪いのかと思って、毎回もっと詳しく書くようにしてるんだけど、あんまり変わらないんだよね…

タスクの長さと成功率には測定された関係がある

AI評価を行う研究組織のMETRは2025年3月、モデルがどれくらいの長さのタスクをこなせるかを測る指標を提案しました。50%タスク完了時間ホライズンと呼ばれるもので、「人間の専門家がX時間かかるタスクを、モデルが50%の確率で完了できるとき、そのモデルの時間ホライズンはX時間」と定義されます。

この研究で報告されている、成功率とタスク長の関係が重要です。

人間がかかる時間当時のモデルの成功率
4分未満ほぼ100%
約4時間以上10%未満
タスクが大きくなると成功率は緩やかに下がるのではなく、崖のように落ちます。
データを見て考える人

つまり、うまくいかないタスクの多くは、指示が足りないのではなく、単純にそのモデルの射程を超えているということです。射程外のタスクに説明を足しても、射程は伸びません。

「検証できる単位」に割る

では、どう切るのか。行数でもファイル数でもありません。基準は1つです。そのタスクが終わったかどうかを、機械が判定できるか。

これはコンテキスト設計の章で触れた「エージェントが自分で確かめられる状態」と同じ話です。判定できるタスクなら、エージェントは間違えても自力で気づいて戻れます。判定できないタスクでは、間違えたまま完了を宣言します。

切り方として弱い切り方として強い
認証機能を実装するログインAPIに対して、正しい認証情報で200が返るテストを通す
パフォーマンスを改善する一覧取得のクエリ発行数をN+1から2回に減らす
コードを綺麗にするこのモジュールの循環参照を解消し、型チェックを通す
バグを直すこの再現テストが失敗している。通るようにする

右側に共通するのは、終了条件が外部にあるという点です。エージェントの自己申告ではなく、テストや型チェックが答えを持っています。

先生先生

「終わったかどうかを誰が決めるのか」を先に決める。それが決まっていないタスクは、そもそも切れていないんだ。

作らせる前に、手順を決めさせる

大きい仕事をいきなり投げないための、最も効く一手が先に計画を出させて人間が承認するという進め方です。多くのツールが、編集を行わず調査と計画だけを行うモードを持っています。

この順序が効く理由は、Anthropicが2024年12月に公開した Building Effective Agents の整理が明快です。同記事は、システムを2つに区別しています。

種類定義向く場面
ワークフローLLMとツールが、あらかじめ決められた経路を通って動く手順が予測でき、やることが定まっている作業
エージェントLLMが自分で手順とツールの使い方を決める必要なステップ数が事前に読めない作業

同記事の推奨は一貫して保守的で、シンプルなプロンプトから始め、単純な方法で足りないときにだけ複雑なものを足すというものです。完全に自律的なエージェントは魅力的に見えるが、手順が定まっている作業ではワークフローのほうが予測可能で一貫性がある、と述べられています。

実務に落とすと、こうなります。まず人間とエージェントで手順を決めてワークフローにしてしまい、手順が読めない部分だけをエージェントの裁量に残す。「全部お任せ」と「全部指示」の間に、この線を引く作業があります。

計画を選ぶ人

同記事が挙げるパターンも、切り方の語彙として使えます。

パターン内容
プロンプトチェーン処理を順番につなぎ、各段階で精度を上げる
ルーティング入力を分類し、専門化した処理へ振り分ける
並列化独立した部分作業を同時に走らせる、または複数の結果を突き合わせる
オーケストレーター・ワーカー中央が動的に部分タスクを割り振る
評価者・最適化者生成と評価を繰り返して洗練させる

大きい仕事はフェーズに割る

それでも、まとまった機能を作りたい場面はあります。そのときの型は決まっています。

  1. 全体像を共有する — 何を作るのか、完成の条件は何かを最初に伝える
  2. フェーズに分ける — エージェント自身に分割案を出させて、人間が確認する
  3. 1フェーズずつ実行する — 各フェーズの終わりに検証を通す
  4. 区切りでセッションを整理する — 長く続けるほどコンテキストは劣化する

3番目が要点です。全体像を共有しておくのは、各フェーズの判断が全体と整合するようにするためであって、一気に作らせるためではありません。

差分の大きさは、レビューの上限から逆算する

タスクの大きさを決めるもう1つの制約が、人間がレビューできる量です。レビューの章で扱うとおり、1回のレビューで見る量には測定された上限があります。

タスクを大きく切ると、成功率が落ちるだけでなく、通ったとしてもレビューできない差分が出てきます。どちらの側から見ても、大きく切る理由はありません。

タスクの大きさは、エージェントの射程とレビューの上限のうち、小さいほうに合わせます。

よくあるハマりどころ

失敗したときに指示を足す。 最も多い反応です。しかし前述のとおり、射程を超えたタスクは説明では救えません。指示を足す前に、切り直せないかを考えるのが正しい順序です。指示を足して直るのは、タスクが射程内にあって指示が曖昧だった場合だけです。

「いい感じに」で投げる。 終了条件が存在しないため、エージェントは自分で終了条件を作ります。その条件が要求と一致する保証はありません。

テストのないところに大きなタスクを投げる。 検証手段がないと、成功も失敗も判定できません。先にテストを書かせるタスクに切るほうが、結果的に速いことがよくあります。

依存のあるタスクを並列で走らせる。 独立していないタスクを同時に走らせると、互いの前提を壊し合います。並列にしてよいのは、成果物が干渉しないものだけです。

セッションを引きずる。 フェーズを跨いで同じセッションを使い続けると、判断が古い文脈に引っ張られます。区切りで切り直します。

ちゃんと使うためのポイント

  • 成否の大部分はタスクの大きさで決まる。長くなると成功率は崖のように落ちる
  • 具体的な時間の数値は伸び続けるので、構造のほうを覚える
  • 切る基準は行数ではなく、終わったかどうかを機械が判定できるか
  • 手順が読める部分はワークフローにし、読めない部分だけをエージェントの裁量に残す
  • 大きい仕事は「全体像の共有 → フェーズ分割 → 1つずつ検証」の型で進める
  • タスクの大きさは、エージェントの射程とレビューの上限の小さいほうに合わせる
  • 失敗したら、指示を足す前に切り直す

次の章では、エージェントに与える道具の設計を扱います。タスクを適切に切っても、必要な道具がなければ手が届きませんし、道具が多すぎれば判断がぶれます。

参考リンク