AIの応答を止めるゲートが「会話の後半だけ効かなくなる」罠を塞ぐ
Stop hook のゲートに入れる無限ループ防止の上限を『セッション累計』にすると、長い会話の後半で全ゲートが静かに無効化される。上限の単位を応答本文のハッシュ比較に変える直し方と、実プロセスでの検証手順。
約4万トークンの節約 (API料金換算で約60円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「AIの応答を止めるゲートが「会話の後半だけ効かなくなる」罠を塞ぐ」は、AIのしつけカテゴリのAI指示書(MDファイル)です。Stop hook のゲートに入れる無限ループ防止の上限を『セッション累計』にすると、長い会話の後半で全ゲートが静かに無効化される。上限の単位を応答本文のハッシュ比較に変える直し方と、実プロセスでの検証手順。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約4万トークン(API料金換算で約60円)・95%のトークンを節約できます。
- カテゴリ
- AIのしつけ
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約4.2万トークン
- この巻物使用時
- 約2,100トークン
- 節約量
- 約4万トークン (約60円)
- 更新日
- 2026-10-03
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/md-6895f317/raw を読み込んで、この指示書どおりに実装して"
中身
AIの応答を止めるゲートが「会話の後半だけ効かなくなる」罠を塞ぐ
これは何の話か
AI エージェント(Claude Code 等)に運用ルールを守らせるため、応答完了時に走る hook(Stop hook)で 「条件を満たさない応答をブロックして書き直させる」ゲートを作ることがある。
このゲートには必ず無限ループ防止の上限を入れる。AI が何度書き直しても条件を満たせない場合、 永久にブロックし続けると会話が前に進まなくなるからだ。
その上限の単位を間違えると、ゲートは「長い会話の後半でだけ、静かに全部無効になる」。 実装は正しく、テストも緑で、短い検証では必ず再現しない。最悪の壊れ方をする。
症状
- ルールを追加した。gate も書いた。テストも通る。
- 短い会話では期待どおりブロックされる。
- それなのに実際の運用では守られていない応答が頻繁に通る。
- ログを見ると、ゲートは確かに発火して何十回もブロックしている(=「動いていない」わけではない)。
- 人間から「同じ指摘を3回目」と言われる。
原因
上限が 会話(セッション)ごとの累計ブロック回数 になっている。
// ありがちな実装
const blocks = state[sessionId]?.blocks ?? 0;
if (!requestedBlock || !sessionId) return { retryCap: false };
if (blocks >= 2) return { retryCap: true }; // ← 以後その会話は全ゲート無効
state[sessionId] = { blocks: blocks + 1 };
return { retryCap: false };
長い会話では、序盤の無関係な指摘2回で上限に達する。 それ以降、その会話が終わるまで、すべてのゲートが素通りする。
会話が長いほど「守られない応答」の割合が増えるので、 ルールを足せば足すほど後半が無法地帯になる。しかもログ上はゲートが働いて見える。
直し方
上限は捨てない。単位を「同じ応答本文を繰り返した回数」に変える。
import crypto from 'node:crypto';
function stateResult(sessionId, requestedBlock, assistantText) {
if (!requestedBlock || !sessionId) return { retryCap: false };
const state = loadState();
const hash = crypto.createHash('sha256')
.update(String(assistantText ?? '')).digest('hex').slice(0, 16);
// 本文が変わっていれば「新しい挑戦」なのでカウンタをリセットする
const blocks = state[sessionId]?.lastHash === hash
? (Number(state[sessionId]?.blocks) || 0)
: 0;
const sameTextRetries = blocks + 1;
state[sessionId] = { blocks: sameTextRetries, lastTs: new Date().toISOString(), lastHash: hash };
saveState(state);
// 同一本文で3回目のときだけ諦めて通す
return { retryCap: blocks >= 2, sameTextRetries };
}
これで:
| ケース | 挙動 |
|---|---|
| 書き直すたびに本文が変わる | 何度でもブロックされる(=ルールが最後まで効く) |
| 同じ本文を出し続ける | 3回目で通す(=無限ループは防げる) |
無限ループ防止の目的は「同じ失敗を繰り返して詰まること」の回避であって、 「ブロック回数の総量を抑えること」ではない。単位を目的に合わせる。
併せて入れるもの
- state ファイルは放っておくと会話IDごとに無限に増える。書き込み時に 最終更新が N 日より古いエントリを捨てる(日付が壊れている項目も捨てる)。
- ログ(ledger)に「その本文で何回目か」を記録する。 後から「素通りが常態化していないか」を数えられるようにしておく。
検証の仕方(ここが本題)
テストが緑でも安心しない。実プロセスで3回連続して呼び、3回目が通らないことを確かめる。
違う本文を3回 → 3回ともブロック (修正前は3回目が素通りしていた)
同じ本文を3回 → 3回目だけ通る (ループ防止は維持)
条件を満たす本文 → 通る
注意: ゲートに「短い応答は対象外」のような足切りがあると、 検証用のダミー本文が短すぎて何も起きず全部 pass になる。 最初に実装を読んで、足切り条件を満たす長さ・形式の本文で試すこと。 (これで1回空振りした。pass が並んだら「直った」ではなく「発火していない」を先に疑う。)
一般化できる教訓
ルールを追加したら、「実装したか」ではなく「会話の後半でも発火し続けているか」をログで確かめる。
ガードレールの事故には2つの型がある。
- 登録されていない: 実装はあるが設定に入っておらず、一度も動かない。 出力は「変更なし」としか出ないので気づけない。
- 途中で自分を無効化する: 登録もされ、実際に発火もしているのに、 ある時点から静かに全部通すようになる。← 今回の型。
どちらも「実装の有無」を見ている限り永久に見つからない。 発火記録の時系列(いつから発火しなくなったか)を見るのが唯一の検出手段。
よくある質問
+「AIの応答を止めるゲートが「会話の後半だけ効かなくなる」罠を塞ぐ」とは何ですか?
Stop hook のゲートに入れる無限ループ防止の上限を『セッション累計』にすると、長い会話の後半で全ゲートが静かに無効化される。上限の単位を応答本文のハッシュ比較に変える直し方と、実プロセスでの検証手順。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約4.2万トークンかかりますが、この巻物を使えば約2,100トークンで済みます。差し引き約4万トークン(API料金換算で約60円)・95%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
AIっぽくない提案書を作る — ハイブリッド企画書モデル(コードAI組版×画像モデル写真×スライドAI配置参照)
コード生成AIの組版・画像編集モデルの写真合成・スライド生成AIの配置文法を分担させ、経営者の差し戻し3回→0回にした提案書パイプラインの作り方と失敗パターン
AI運用ルールを機械的に守らせる hook 設計 — ルール文が守られない本当の理由
チームでAIエージェントを使うと運用ルールが必ず守られなくなる。真因は「読んでいない」ではなく hook がそのマシンで登録されていない/委譲先が沈黙して壊れていること。禁止=実行前拒否・誘導=依頼時の具体コマンド注入・担保=セッション開始時の自己修復の3層、明示例外の短命トークン、warn→blockの段階昇格、BOM/サンドボックス/timeout など失敗が沈黙する罠と、環境依存で落ちないテストの作り方までを実測ベースでまとめた導入手順。
AIの応答を止める番人hookを1ランナーに統合し、書き直しを最大1回にする(誤爆率をfixtureで先に測る)
Stop hook を9本積んだら Stop の65%が書き直し・最多ゲートの91%が誤爆だった。誤爆測定→否定文除外→1プロセス合流→再試行上限統一→全PC移行→KPIで効果確認までの手順。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア