AIに丸投げしたつもりが、6回に1回は判断を求められていた

AIコーディングの話をすると、「どこまで任せているのか」を必ず聞かれる。私はいつも「ほとんど任せている」と答えていた。実際、指示を出したあとは画面が勝手に流れていくし、こちらは相槌を打っているだけの時間が長い。

33日ぶんのログを集計してみたら、その自己認識はかなりズレていた。AIは思っていたよりずっと頻繁に立ち止まって、こちらに判断を投げ返していた。

140回の質問と、27回の承認待ち

まず、AIの側から人間へ問い合わせるツールの実行回数を数えた。

ツール 回数 何をする場面か
AskUserQuestion 140 選択肢を提示して判断を仰ぐ
ExitPlanMode 27 実行計画を提示して着手の承認を得る
Skill 34 決められた手順書を呼び出す
Agent 46 別のセッションへ作業を委譲する

人間の指示は全部で814件だった。AskUserQuestion が140回ということは、指示およそ6回に1回は、AIから質問が返ってきている計算になる。

これは自分の体感より多い。「勝手にやってくれている」と感じていた時間の中に、選択肢を出されて選ぶ場面がかなり紛れ込んでいた。おそらく、選ぶ作業は自分がやったこととして記憶に残らないのだと思う。決めた実感が薄いまま決めている。

ExitPlanMode の27回も、言われてみればという頻度だった。30回の指示に1回くらいは、着手前に計画を読んで承認している。この27回は、いま思えば大きめの変更ばかりだった。

使うモデルは1か月で3回入れ替わった

もうひとつ、応答1回ごとにどのモデルが動いていたかも記録されているので、日別の構成比を出した。

日ごとに、どのモデルが応答していたか

33日間の合計はこうなる。

モデル 応答回数 割合
fable-5 5,476 29%
sonnet-5 5,294 28%
opus-4-8 4,823 26%
opus-5 3,076 16%

図を見ると変化がはっきり出ている。最初の1週間(6/26〜6/30)は灰色一色で、1つのモデルが全部やっていた。7月に入ると橙が混ざり、中旬から青が増え、下旬に紫が現れる。主役が3回入れ替わっている。

これはモデルの世代交代でもあるが、それだけではない。途中から作業の種類でモデルを分ける運用に変えたことの影響が大きい。私の運用ルールにはこう書いてある。

調査・原因特定・ファイル探索・Web検索を伴う調査はサブエージェントに委譲する。いずれも軽量モデルを指定し、結論サマリーだけを受け取る。実装・設計・判断はメインセッションで行う。

7月21日から24日にかけて青(sonnet-5)が95%を超えている期間があるが、ここは調査系の作業が集中していた時期だった。

ただし、この図から因果は読めない

ここは正直に書いておきたい。

このデータからは、「メインセッションでどのモデルを使っていたか」と「サブエージェントに何を委譲したか」を分離できない。応答のログにはモデル名しか入っておらず、それが主役の応答なのか下請けの応答なのかは区別されていない。

Agent の呼び出しは46回しかないのに、sonnet-5 の応答は5,294回ある。単純に割ると1委譲あたり115回の応答になるが、これは明らかにおかしい。実際にはメインセッション自体を軽量モデルに切り替えていた期間が混ざっている。つまり上の「委譲の運用に変えたから青が増えた」という説明は、もっともらしいだけで証明されていない

因果を見たいなら、モデルの切り替え操作そのものをログから拾う必要がある。今回はそこまでやっていないので、この図から言えるのは「構成が動いた」という事実だけだ。

委譲した先の作業は、記録に残っていない

もうひとつ分かったことがある。46回の Agent 呼び出しで委譲した作業の中身は、本体のログには入っていない

セッションログには isSidechain というフラグがあり、サブエージェント側のやり取りにはこれが付く想定になっている。しかし手元の117セッション全体でこのフラグが立っている行は0件だった。委譲先の会話は別ファイルに落ちていて、本体には呼び出したという事実と結果だけが残る。

これは運用上けっこう重要で、「AIが調べた結果」を後から検証したくなったとき、その調査過程は追えないということになる。委譲は速いが、根拠が手元に残らない。実際に一度、サブエージェントが返してきた結論が誤っていて、それを鵜呑みにしたまま作業を進めかけたことがあった。

そのため、委譲の使い方は自然と「結論をそのまま採用する」から「結論を手がかりに自分で確かめる」へ変わっていった。私のルールにも、報告時にどの処理をどのエージェントで実行したかを1行添える、という項目を足してある。どこが又聞きなのかを、後から見て分かるようにするためだ。

任せない、と決めたもの

このデータを眺めていて、任せる/任せないの線引きが少しはっきりした。

AskUserQuestion の140回が何を聞いていたかというと、ほとんどが戻せない判断だった。どのファイルを消すか、どちらの設計を採るか、外部に何を送るか。実装の細部について聞かれることはまず無い。

つまり実際に起きていたのは「丸投げ」ではなく、戻せる作業は全部AI、戻せない判断は人間という分担だった。そう意識して決めたわけではないのに、814件の指示の中で自然にそうなっていた。

これは裏返すと、戻せない操作をAIが実行できてしまう構成にしていたら、この分担は成立しないということでもある。権限の設定や確認のはさみ方は、事故を防ぐためというより、この分担を機能させるための土台なのだと思う。

数えてみるのは30分でできる

ここまでの数字は、セッションログを1行ずつ読んでツール名を数えただけで出ている。特別な仕組みは要らない。

if (d.type === 'assistant') {
    for (const b of d.message.content || []) {
        if (b.type === 'tool_use') tools[b.name] = (tools[b.name] || 0) + 1;
    }
}

自分が何回質問されていたか、何回計画を承認していたかは、たぶん体感とズレている。私は半分くらいだと思っていた。実際は6回に1回で、思っていたよりずっと自分で決めていた。

その事実は、AIに任せることへの安心にも、逆に「決めているつもりで流していないか」という警戒にもなる。どちらに転ぶかは人によると思うが、少なくとも自分の使い方を推測ではなく実測で知っておく価値はある。