0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ルールを文書に足しても違反は減らなかった。コードに落とした8件だけ再発0だった

0
Posted at

AIエージェントに守らせたいルールがある。まずAGENTS.mdに書く。守られない。もっと詳しく書く。まだ守られない。条文を増やす。

48日間そうやって運用した結果、常駐指示ファイルは 90KB から 147KB になりました。

そして違反は減りませんでした。

数字を出します。すべて自分の環境1台の実測です(n=1)。

1. トークンの 94.4% は「同じテキストの読み直し」だった

まず、指示ファイルを増やすとコストがどう動くか。48日間の集計です。

項目 実測値
累計トークン 62,250M
うちキャッシュ読み出し 58,751M(94.4%)
純粋な生成出力 185.9M(0.30%)
メッセージ数 268,766
メッセージ1件あたりの読み直し 約 219k トークン

常駐指示は4ファイルで 204,309 バイト。これが毎ターン再注入されます。

つまり「累計トークン量」はエージェントの作業量ではなく、指示ファイルの長さ × ターン数の関数です。ここを自分の稼働規模の指標に使うと、指示を長く書いた人ほど「よく使っている」ように見えてしまいます。

キャッシュヒット率 99.3% も同じで、効率の証拠ではなく「同じ文脈を繰り返し投げている」証拠でした。

2. それでも違反は減らなかった

自分の環境には、指摘を受けるたびにルール単位で回数を数える仕組みを入れてあります。「どの条文が何回破られたか」を記録するだけの小さなスクリプトです。

条文を書き足した後もカウンタは止まりませんでした。むしろ、前日に新設した条文が翌日に破られるということが起きました。

条文を増やすことは解決ではなく、症状でした。

3. 24ルールを2群に分けて測る

記録されている24ルールは、たまたま2群に分かれていました。

  • A群(8件): 違反をコード側で止めるようにしたもの。PreToolUse フック、検査スクリプト、送信直前のガード。
  • B群(16件): 条文として文書に書いただけのもの。

同じ環境、同じエージェント、同じ期間です。

群 ルール数 再発したルール 累計再発回数 ルールあたり
A: コードゲートあり 8 0件(0%) 0回 0.00
B: 文書の条文のみ 16 16件(100%) 19回 1.19

B群は全滅でした。16件すべてが最低1回は再発しています。

A群はゲート設置後、無再発ターン数が 2,500〜4,053ターン 続いています。

4. これは「ゲートが効いた」と言っていいのか

反論を2つ検討します。

反論1: 選択バイアス。ゲートを付けたのは元々ひどいルールでは?

その通りです。運用上、同じ違反が3回を超えたものだけコードに落とす決まりにしています。つまりA群はもともと最も再発しやすかった8件です。それが0回になっているので、バイアスは結論を弱めるのではなく強める方向に働きます。

反論2: 逆因果。ゲート設置時点ですでに学習が終わっていたのでは?

これは否定できません。「3回目でゲートを付ける」という手順自体が、時間の経過と相関します。ただ、B群にも2回再発したまま止まっていないルールが3件あり、時間だけでは説明がつきません。

反論3: そもそも文書を読んでいないのでは?

読んでいます。204KBは毎ターン全量がコンテキストに入っています。読んだ上で守られていない、というのがこの測定の意味です。

5. 学習キューも半分が捨てられていた

指摘を受けるたびにキューへ積み、条文化まで追跡する仕組みも動かしています。累計の内訳です。

状態 件数
条文に昇格 231
検証済み 178
却下 229
未処理 12
人の判断待ち 63

却下率 49.8%。 拾った学習シグナルの半分が条文にならずに消えています。そして「人の判断待ち」が63件溜まっている。自動化したつもりの仕組みが、結局人間をボトルネックにしていました。

6. 何を変えたか

ルールの置き場所を3段階に分けました。

  1. 1回目: 記録だけ。条文には書かない。
  2. 2回目: 条文に書く。ただし毎ターン先頭に「直近の頻出違反 上位3件」だけを注入する。全文ではなく3件です。
  3. 3回目: 文書での修正を禁止する。コードゲートを書き、わざと壊した入力で検出されることを確認するまで閉じない。

3段階目が重要でした。「条文を直しました」で閉じられる限り、同じ違反が4回目に来ます。

上位3件だけを注入するのも意図的です。件数を増やすと、また読まれなくなります。読まれない条文を増やしたことがそもそもの原因だったので。

7. 測れていないこと

正直に書いておきます。

  • n=1 です。 1台の環境、1人の運用です。他の環境で再現するかは分かりません。
  • ゲートの精度を測っていません。 回帰テストの判定器自体に、1サンプルでの誤検知率66%という測定があります(確定と報告された回帰3件のうち2件が3サンプル再測定でPASS)。ゲートが正しく動いているかの検証はこれからです。
  • 「守られた」の定義が弱い。 再発カウントは人間の指摘が起点です。指摘されなかった違反は数えられていません。実際の違反率はこれより高いはずです。

まとめ

  • 指示ファイルを 90KB → 147KB に増やしても、違反は減らなかった
  • トークンの 94.4% は同じ指示の読み直しで、これは作業量の指標にならない
  • 24ルールの対照では、コードゲートに落とした8件が再発0、文書のみの16件が再発100%
  • 条文を増やすことは解決ではなく症状だった

自分のマシンで同じ測定をした人がいたら、数字を見たいです。特にB群の再発率が環境によって変わるのかどうか。


この計測は untactit を作る過程での実測です。AIエージェントが読むスキル・指示・メモリを一箇所で管理する control plane で、現在アーリーアクセスです。ドリフト検出の部分は agent-drift としてMITで公開しています(依存なし・単一ファイル)。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?