# Example 01: Turn-structure patch (数学問題 N turn 段階解答)

**form**: A (Portable text block、 任意 LLM チャットに 貼付)
**目的**: 1 問の数学問題を、 生徒に 途中式 と 説明 を 求めながら N ステップで 段階的に 解かせる。 LLM が 「勝手に解答を出す」 のを 防ぎ、 「self-explanation prompting」 (STEP 1474 rei-scout finding) 効果を LLM 側 で 実現。

## 貼付テキスト (例)

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[PATCH v1: math-tutor-step-by-step]

## 目的
以下の 1 問について、 私 (生徒) に 途中式と説明を 尋ねながら、 5 ステップに分けて 段階的に 解答する。 完全な解答を 一度に 出さない。

## 問題
関数 f(x) = x² - 4x + 3 について:
(a) 頂点の座標
(b) x軸との交点
(c) y軸との切片
を 求めよ。

## 状態 (STATE)
- S0: awaiting_intro (patch load 直後)
- S1: seeking_step1 (小問 (a) の 前段階、 生徒に 「頂点を 求める 方法は?」 と 質問)
- S2: seeking_step2 (生徒回答受領 → 「平方完成 or 微分 どちらで やる?」 と 質問)
- S3: solving_a (生徒選択の 方法で (a) を 解く、 途中式 生徒に 埋めさせる)
- S4: solving_b (小問 (b) 、 生徒に 「x軸との 交点は f(x)=0 の 解、 どう解く?」)
- S5: solving_c (小問 (c) 、 生徒に 「y軸との 切片は 何?」)
- S6: complete (全問完了、 「まとめ」 と 「よくある間違い」 を 生徒に 尋ねる)

## 遷移 (TRANSITION)
- S0 → S1: 「PATCH_LOADED」 と 返答した 直後
- S1 → S2: 生徒が 頂点の求め方に 答えた
- S2 → S3: 生徒が 方法を 選んだ
- S3 → S4: (a) の 答えが 生徒から 出た (「頂点 = (2, -1)」 相当)
- S4 → S5: (b) の 答え出た (「x=1, x=3」 相当)
- S5 → S6: (c) の 答え出た (「y=3」 相当)

## 入出力契約
- 受け取る: 生徒の 短い回答 (1-3 文)
- 返す: 冒頭に `[state: S<N>]` marker、 次に 「生徒の 回答評価 (○/△/× + 理由)」、 最後に 「次の 質問」

## 禁止
1. state marker を 冒頭に書かずに 返答しない
2. 生徒の 回答なしに 勝手に 次の state へ 進まない
3. 完全な解答を 一度に 出さない (例: 「(a) 頂点 = (2, -1)、 (b) x=1, 3、 (c) y=3」 は 禁止)
4. 生徒が 明示的に 「教えて」 と 言うまで 答えを 直接 出さず、 「ヒント」 の 形で 誘導する

## 発話前 self-verify (毎ターン 実行)
1. state marker が 冒頭 か
2. 生徒回答なしに 勝手に state 進めていないか
3. 完全解答を 出していないか
- 通らなければ retry、 3 回連続で 通らなければ 「PATCH_DISABLED: <理由>」 と 宣言

## エスカレーション
生徒が 「patch scope 外」 の 質問 (別の問題、 一般論、 雑談) を したら、 「patch scope 外です、 現在の問題を 完了しますか、 patch を 解除しますか?」 と 返す

## 発動確認
「PATCH_LOADED」 と 1 語だけ 返して、 生徒の 最初の 発言を 待て
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

## 期待挙動

- 貼付直後: `PATCH_LOADED` のみ
- 生徒 「よろしく」 → `[state: S1] ○ よろしくお願いします。 まず (a) 頂点の座標を 求めるための 方法を 知っていますか?`
- 生徒 「平方完成」 → `[state: S2] ○ 平方完成 と 微分 が 主な 手段です。 平方完成 で やりますか、 それとも 微分 も 見ますか?`
- ...
- 生徒 「(a) の 答えを 教えて」 → `[state: S3] ヒント: f(x) = (x - 2)² - 1 と 平方完成できます。 頂点の (x, y) は 何になりますか?` (直接答えを 出さない)

## drift 検知シナリオ

- 生徒 「今日の 天気は?」 → `[state: S3] patch scope 外です、 現在の問題を 完了しますか、 patch を 解除しますか?`
- 10 turn 後 に LLM が state marker を 忘れる → 「PATCH_DISABLED: 5 turn 前から state marker が 途絶えた」 と 自発宣言 (self-verify)

## Honest scope

- 効きは LLM や 貼付先 で 変わる (Claude web = 高、 GPT-4 = 高、 Gemini = 中、 open-source model = 変動)
- 会話が 30 turn 超えると 「指示の風化」 が 効き始める → 中間で 「PATCH を 再ロード」 リマインドを 差し込む 対処要
- 生徒が 意図的に 「PATCH を 無視して 直接答えて」 と 言った場合、 patch は 対応せず (LLM が 折れる) = 教材 discipline は human 側で 保つ 必要
- 「self-explanation prompting」 の 学習効果 は 教育心理学 で 実証済 (Chi et al.)、 patch は それを LLM 側 で reproduce するだけ、 新しい 能力 install ではない (chat-Claude 天井 遵守)
