この記事は、連載「AIの意見を聞かない技術」の第 7 回です。うまくいかない症状と、その対処を一つずつ並べています。各回はファイルやスクリプトを一つ置けば完結します。その仕組みがなぜ要るのかは、置いたあとに解説を読めば分かります。連載の全体像と各回の一覧は序論にあります。

今回は、AIが作業の途中で少しズレたことを言ったときの話です。AIの話は、私はいまも聞いています。やめたのは、その場で私がAIに説明して、ズレを訂正することです。ズレというのは、AIが前提を取り違えることや、要らない機能を足そうとすること、直したはずの話を蒸し返すことです。そういう場面で、私は説明もしませんし、放ってもおきません。訂正は仕組みの仕事にしてあるからです。

前作「読まない技術」の第 11 回で、私は、AIの作業の途中に口を挟むのをやめました。今回は、口を挟まずに済ませるようになったあとの話です。

まず一つだけ、思い出してみてください。

直近のセッションで、AIが少しズレたことを言った場面です。

そこで、あなたはAIに説明しましたか。

それとも、黙ってAIに作業を進ませましたか。

CC BY 4.0

説明すると進行中の作業が後回しになり、黙っていると 173 万トークンが消えた

私が説明したときの失敗です。作業の途中で、私が会話で「そこ違う」と説明すると、AIは、実行中の操作が終わりしだいその一言を読み、次の操作をその一言に合わせます。その一言への対応を先にすれば、その対応が終わるまで、進行中だった作業は後回しです。後回しになった作業の指示は、その間に、コンテキスト(AIの作業記憶)の前のほうに取り残されます。

私が説明しなかったときの失敗は、もっと高くつきました。私の手元の本番プロジェクト——typingtube という、YouTube の音楽動画でタイピング練習ができる Web サービスです——で、十数言語の翻訳をサブエージェントに任せた日があります。サブエージェントというのは、メインの会話を引き継がず、別に立ち上がって働くAIのことです。私は 13 体を並列で起動し、13 体で約 173 万トークンを使いました。各サブエージェントが自分用のスクリプトを書き直し、同じ作業を別々のやり方で進めていました。

私がそのことに気づいたのは、使用量の上限に当たったときです。

そこで私がAIに説明すると、AIは行動ルール——AIの動き方について私が書き溜めた決めごと——の本文を開きました。あとでそのセッションの記録を行で数えると、その本文にしか出てこない語が最初に現れるのは 1042 行目で、13 体の起動は、それより前の 631 行目から 990 行目のあいだです。

放っておけばAIが自分で気づく、という私の見込みは外れました。

作業の途中で、AIが前提を取り違えたまま、ファイルを書き換えはじめました。このとき、あなたなら次のどちらを選びますか。

  • その場で、前提が違うことをAIに説明して訂正し、それで済ませる
  • そのズレで落ちる仕組み(自動テストや hook)があるかを探し、あれば説明せずに進ませ、無ければ先に仕組みを置く

答えは、仕組みを探すほうです。その場で説明すれば、AIは、実行中の操作が終わりしだいあなたの一言を読み、次の操作をその一言に合わせます。その一言への対応を先にすれば、元の作業は後回しになり、元の作業の詳しい指示は、会話が上限に近づけば失われることがあります。しかも、説明はそのセッションの会話の中にしか残らないので、次のセッションのAIには届きません。仕組みなら、AIがファイルを書き換えたりコマンドを走らせたりしたその場でAIを止め、止めた理由を、AIが次の操作を決める前に返します。止め方は、どのセッションでも同じです。仕組みが無い場所で黙れば、173 万トークンの日のように、誰も気づかないまま進むので、黙る前に仕組みを置きます。

理解したことは一文にできます。

ズレは、黙っていれば誰も気づかないまま進み、会話で説明すれば、その一言への対応で進行中の作業が後回しになる。だから訂正は、人ではなく仕組みの仕事にする。

なぜ、会話で説明すると進行中の作業が後回しになり、黙っていると誰も気づかないのか

私が会話に打った一言をAIが読むのは、AIがいま走らせているツールの実行が終わったあとです。Claude Code のドキュメントには、作業の途中で訂正を送ると、AI はいまの操作が終わり次第それを読み、次の操作に進む前に合わせるとあります。指示ファイル(CLAUDE.md や AGENTS.md)に書いたルールも、会話の始めに読み込まれる文脈であって、強制される設定ではないとドキュメントが書いているとおり、AIが判断に使う材料の一つとして、コンテキストに並んでいるだけです。その材料の列のいちばん後ろに、私がいま打った一言が加わります。一言を読んだAIは、元の作業とその一言を合わせて、次に何をするかを決め直します。その一言への対応を先にすれば、その対応が終わるまで、元の作業は後回しです。

そして、その一言は残ります。Claude Code のドキュメントが書いているのは、会話がコンテキストの上限に近づいたとき、先に消えるのは古いツールの出力のほうで、人が打った要求と主要なコードは残り、会話の前半で渡した詳しい指示は失われることがあるということです。後回しになった作業の詳しい指示が会話の前半にあれば、それも失われることがあります。

私が黙っていたときは、AIの側に、ズレに気づくための材料が届きませんでした。同じページは、ツールが無ければ AI に返せるのは文章だけで、ツールを使うたびに返ってくる情報がループへ戻り、次の判断の材料になると書いています。13 体が同じ作業を別々のやり方で進めていることは、どのツールも返しません。同じページは、サブエージェントは自分の会話を持っていて、まっさらな状態から始まるとも書いています。13 体は、ほかの 12 体が何を書いているかを見ていません。

私の側にも、ズレに気づくための材料は届きませんでした。同じページは、サブエージェントのツール呼び出しは起動した側の会話に入らず、終わったときに要約が返ると書いています。13 体が何をどう書いているかは、走っているあいだ、私の画面にも、メインの会話にも出てきません。出てくるのは、終わったという報告と、使用量の数字です。だから私が気づくことができたのは、その数字が使用量の上限に届いたときでした。

仕組みがAIに返す 1 行の案内を出すのは、hook(コマンドの前後に割り込んで走るスクリプト)です。そのドキュメントには「LLM がそれを実行すると選ぶことに頼らず、その動作が必ず起きる」とあり、hook がAIのコマンドを止めたときには、なぜ止めたのかの理由がAIに返り、AIはやり方を変えることができる、ともあります。その案内は、AIがいま走らせたコマンドの結果として届き、会話が上限に近づいたときには、古いツールの出力と同じ、先に消える側に入ります。

仕組み: AIを止める仕組みを、そのまま訂正の代役にする

AIを止めるためにこれまで置いてきた仕組みが、そのまま訂正の代役です。

前作の各回に共通していたパターンは 5 つです。私はこの連載でも、5 つ全部を使い直しています。

一つ目は、「ルールは読まれたときだけ効く」と「足すほど薄まる」というパターンです。AIがルールを守るのは、そのルールを読んだときだけです。そして、序論で引いたとおり、指示ファイルは長いほど、コンテキストを多く使い、守られにくくなります。だから、却下した提案を「〜しないこと」と書き足していくやり方には、答えがありません。この連載では、却下を指示ファイルに書き足さずに 1 枚のファイルに集めた、禁止事項(開発のときに許さないと決めたルール)の一覧がこのパターンです(第 1 回)。

二つ目は、「止めた理由は、AIが次の操作を決める前に届く」と「読んでいなければ動けない形にする」というパターンです。決められた入口(使うと決めたスクリプト)を通っていないコマンドを hook が止めると、止めた理由が、AIが走らせたコマンドの結果として、AIが次の操作を決める前に届きます。この連載では、用途カタログ(サブエージェントに任せてよい仕事を「用途」として並べた一覧)を見て、サブエージェントの起動を止める hook がこのパターンです(第 4 回)。

三つ目は、「読みに行ったかは測れても、効いたかは測れない」と「読まなければ作れないものの実在だけを見る」というパターンです。AIがドキュメントを読みに行ったかどうかは、プログラムで測ることができても、読んだ中身がどれだけ効いたかは測れません。「読まなければ作れないファイル」が在るかなら、プログラムが判定できます。この連載では、サブエージェントの起動前にメインエージェント(サブエージェントを起動して仕事を割り振る、メイン側のAI)に用意させるファイル(第 4 回)と、禁止事項の項目ごとに、その禁止を見ている自動テストや hook があるかを書く「機械検証」の見出し(第 5 回)が、このパターンです。この見出しでは、私は、書いてあるかどうかだけを見ます。

四つ目は、「方針は、差し込む瞬間で効き方が決まる」というパターンです。前作では、同じ「失敗したらアプローチを変えろ」でも、セッションの始めに読ませたときには、AIは同じやり方でもう一度試し、もう一度試そうとしたその場で読ませたときには、AIは方針に従いました。この連載では、禁止事項に添えた「解除の条件」(その禁止を解いてよくなる条件)が、このパターンです。第 1 回の測定で、提案の相談を受けたAIは、その場で禁止事項の一覧を開いて解除の条件を読み、まず確かめるよう返してきました。

五つ目は、「AIは仕事が終わったように見えたところで止まる」と「報告は止まったことしか教えない」というパターンです。報告は、作業をしたAIが、仕事が終わったように見えたところで書く文です。前作で引いた測定では、頼まれたファイルを全部は読まなかった実行のうち 80.4% で、最終の応答が、全部読んだと書くか、読み残したことに触れていませんでした。前作では、AIが書いた報告を読まずに、報告の外で確かめることにしました。この連載では、動作確認の合否を、AIの報告の代わりに、スモークテスト(ブラウザで操作を最後まで通すテスト)が残ったデータを見て返す 2 つの数で決めています(第 6 回)。

AIがズレたことを言ったときの私の対応は、説明せずに、そのままAIに作業を進ませることです。止まるべき場所に来ると、仕組みがAIを止め、止まったAIには、仕組みが返した案内が届きます。AIは、その案内を読んで、自分でやり方を変えることができます。

代役がAIを止めるのは、AIがファイルを書き換えるときと、コマンドを走らせるときです。AIが何も書き換えず、何も走らせないまま終わるズレ——取り違えたままの前提や、出しただけの提案——では、どの代役もAIを止めません。

CC BY 4.0 はここまで

説明しなくなったもの

私がAIの作業の途中で気づいたズレです。AIが動いている間に、私は「前提が違う」「それは前に決めた」と説明しなくなりました。説明したいことはいまもありますが、訂正する役目は仕組みへ移しました。私は気づいたことを、AIには渡さない自分用のメモに書き溜めておき、その作業が終わってから、自動テストへ、禁止事項の一覧へ、用途カタログへと仕分けます。行き先を決めるのは私で、行き先のファイルに書くのはAIです。

却下した提案について、私が説明せずに済むかどうかは、私がこの連載の第 1 回で測りました。会話を引き継がないサブエージェント 2 体に、その提案を相談した実験です。私は一言も説明していません。それでも 2 体とも、自分で禁止事項の一覧を見つけて、その提案を断りました。1 体は、私が頼んでいない項目まで読み、自分で考えた代替案の一つを、その項目に当たるとして自分で外しています。

CC BY 4.0

注意: 代役が無い場所で黙るのは、ただの放置です

前作には、全 12 回で唯一「読んでください」と書いた回があります。サブエージェントのログを一度だけ読め、という第 5 回です。理由は、サブエージェントを起動した人が、ガードレール(AIを止める仕組み)を置かず、ログも見ていないなら、それは、読まない技術とは別の、ただの放置だからです。

173 万トークンが無駄に消えたのは、私がその状態にいたときでした。あの日、サブエージェントの起動を止める仕組みは一つもありませんでした。私が用途カタログを置いたのは、事故の当日です。代役が無い場所で私が黙っていたので、13 体は誰にも止められないまま走り切りました。説明をやめてよいのは、代役を置いた場所だけです。先に代役を置いて、それから黙ってください。

検証手順: 説明したくなったら、代役があるか探す

前提

  • あなたが新しく置くものはありません。次にAIがズレたことを言う場面が 1 回あれば足ります(その場面は、その日のうちに来ます)

所要時間: 5 分(その場で 1 回。仕分けは後日)

手順

  1. あなたが、AIがズレたことを言って説明したくなった場面を 1 つ捕まえます。たとえば、前提の取り違え、要らない機能の追加、直したはずの話の蒸し返しです
  2. あなたが、説明する前に手を止めて、そのズレが実害になる手前でAIを止める仕組みが既にあるかを探します——自動テスト、pre-commit、起動を止める hook、禁止事項の一覧。探すのは、「ズレを指摘する仕組み」より、「ズレたまま進んだ結果が形になったときに落ちるもの」です

見るところ(探した結果で、次にすることが分かれます)

  • 見つかった —— あなたは黙って、AIに作業を進ませます。その仕組みが実際にAIを止めるかどうかを、この機会に見届けてください。AIが止まらなかったなら、その仕組みは代役ではありません
  • 見つからない —— 見つからなかった仕組みが、あなたが次に置く仕組みです。仕組みを置くまでは代役が無いので、あなたはそのズレを、その場でAIに説明し、あわせてメモに 1 行書きます

後始末

  • いまの作業が終わってから、あなたがメモを仕分けます。プログラムが真偽を決めることのできるものは自動テストへ、判断が要るものは禁止事項の一覧へ、サブエージェントに渡すものは用途カタログへ。あなたが決めるのは行き先だけで、行き先のファイルに書くのはAIです
  • あなたが仕分けを後回しにすると、メモだけが増えます。仕分けは、セッションの区切りごとにやってください

CC BY 4.0 はここまで

次回は「ルールを整理しない技術」。私は、AI に渡しているルールを、一度も整理していません。 それでも、ルールは増え続けていません。

連載「AIの意見を聞かない技術」