AIにルールを教えようとして無限ループにハマった話
2日間で11回ルールファイルを書き換えた
Claude Codeを使ってWebページを取得する作業をしていたときの話。AIに「この方法で取得して」というルールを書いたファイル(webfetch.md)を、2日間で11回も書き換えることになった。
最初は「AIがルールを守らない」と思った。でも11回目の変更で気づいた。問題はAIではなく、私の「ルールを書けば解決する」という前提だった。
何が起きたのか
Day 1: ルールを書く
WebFetchツールで空ファイルが25個も作られる問題が発生。原因は、AIが取得前に空ファイルを作成し、取得失敗時にそのまま残るパターン。
「じゃあルールを書こう」と思って、webfetch.mdにこう書いた:
## 禁止事項
- 取得前にファイルを作成しない
- 必ず取得成功を確認してから保存
Day 1: ルールが守られない
数時間後、また空ファイルが作られた。AIはルールファイルを読んでいたのに。
「ルールが足りないのか」と思って追記した:
## 禁止事項
- 取得前にファイルを作成しない
- 必ず取得成功を確認してから保存
- 空ファイルを残さない
- 取得失敗時は即座にファイルを削除
## 手順
1. まずWebFetchで取得
2. 内容を確認
3. 問題なければ保存
4. 失敗したらファイルを作らない
Day 1: さらに複雑化
それでも問題が起きる。ルールを読んでいるのに守られない。
「具体例が必要なのか」と思って、NG例とOK例を追加。ルールファイルは100行を超えた。
Day 2: 削除して元に戻す
ルールファイルが複雑すぎてメンテナンスできなくなった。「そもそもこんなに書く必要ある?」と思って大幅に削除。
でも削除したら、また空ファイル問題が発生。
Day 2: 11回目の変更で気づく
11回目の変更をしようとしたとき、ふと気づいた。
「書く→欠損→増やす→複雑化→削除→元に戻る」
これ、無限ループだ。
なぜ無限ループになるのか
AIにルールを教えるアプローチには、構造的な限界がある。
限界1: AIはルールを「読む」が「覚え続け」ない
AIはセッション開始時にルールファイルを読む。でも、長いセッションではコンテキストが圧縮され、ルールの一部が欠損する。
私が「ルールを守らない」と感じたケースの多くは、この欠損が原因だった。
限界2: ルールを増やすほど読まれない
ルールを詳細に書くほど、ファイルは長くなる。長いファイルほど、AIが全部読む確率は下がる。そして圧縮による欠損も増える。
限界3: 例外処理が無限に増える
「この場合はこうして」「あの場合はああして」と例外を追加すると、ルールは際限なく増える。でもすべての例外を網羅することはできない。
解決策: ルールではなく仕組みで強制する
11回目の変更で、私はルールを書くのをやめた。代わりに「仕組み」で問題を解決した。
解決策1: Jina Reader経由に統一
WebFetchを直接使わず、Jina Reader(r.jina.ai)経由で取得するようにした。
# Before: AIが直接取得
WebFetch https://example.com
# After: Jina Reader経由(AIの判断が入る余地がない)
WebFetch https://r.jina.ai/https://example.com
Jina Readerはmarkdown形式で返すので、空ファイル問題が構造的に発生しない。
解決策2: ユーザー主導に切り替え
「AIが自動でやる」から「ユーザーが指示する」に変更した。
# Before: AIが判断してナレッジに保存
「このURLを保存して」→ AIが勝手に保存先を決める
# After: ユーザーが保存を指示
「このURLを取得して」→ AIが取得して表示
「保存して」→ ユーザーの明示的な指示で保存
解決策3: 禁止事項のみ残す
ルールファイルは「禁止事項」だけに絞った。
## 禁止
- 取得前のファイル作成
- 自動でのナレッジ保存
「こうして」ではなく「これはするな」だけ。シンプルなルールなら、AIも守りやすい。
結果
この変更後、空ファイル問題は解消した。運用コードも420行削減できた。
そして何より、webfetch.mdを書き換える必要がなくなった。
学んだこと
原則1: AIにルールを覚えさせるアプローチには限界がある
「ルールを書けばAIが守る」という前提は甘かった。AIは読むが、覚え続けない。
原則2: 仕組みで強制する
ルールで「こうして」と書くより、そもそも「それ以外できない」仕組みを作る方が確実。
原則3: ルールは禁止事項のみ
「こうして」は守られにくい。「これはするな」は守られやすい。
AIと協働するとき、「ルールを教える」より「仕組みを作る」方が効果的だと実感した2日間だった。
Discussion