前回、1つの巨大なプロンプトに全部を詰め込む「Ver.1」の限界について書きました。
今回は、その先の「Ver.2」がどんな設計になったのか、実際に採用した仕組みを公開します。
結論から言うと、Ver.2の柱はChatGPTの「プロジェクト」機能を使い、役割ごとに6つのファイルへ分割したことです。
1. Ver.2で解決したかったこと
Ver.1で一番負担だったのは、毎回「状態サマリー」を手作業で書き換えて、1つの巨大なプロンプトとして貼り直すという運用でした。
これを、次のような形に変えたいと考えました。
「毎回、保護者が状態サマリーと今回の授業内容を細かく書き換える家庭教師」
↓
「前回の結果を覚え、復習時期や弱点を判断し、次回授業につなげる家庭教師」
ポイントは、いきなり複雑にしすぎないことです。
今回は「教育OSを一から作る」のではなく、Ver.1で優秀に機能していた部分(一問一答、即時復習、AIが勝手に終了しない、保護者の割り込みなど)はそのまま残しつつ、「記憶の引き継ぎ」の部分だけを構造的に作り直す、という方針にしました。
2. 6つのファイルに役割を分ける
Ver.1は「状態サマリー/今回の実施内容/固定ルール」という1つの塊でしたが、Ver.2ではこれを6つのファイルに分離しました。
| ファイル | 役割 |
|---|---|
| ① TeacherSystem | 教師として絶対に変えないルール(一問一答、即時復習、禁止事項など) |
| ② StudentStatus | 生徒の現在の学習カルテ(単語・文法の定着度、弱点、復習キュー、XP) |
| ③ Curriculum | 模擬テスト大問1〜5を、22個の学習スキルに分解した固定の学習地図 |
| ④ LessonStart | 「授業開始」の一言で、カルテとカリキュラムから今日の目標を自動決定する起動装置 |
| ⑤ RuntimeLog/LessonEnd | 授業終了時の記録・引き継ぎルール |
| ⑥ ProjectInstructions | 全体の司令塔(ChatGPTの「プロジェクト指示」欄に設定) |
②(StudentStatus)と③(Curriculum)は、基本的に自動で書き換わりません。
②は授業のたびに更新される「今の状態」、③は変わらない「学習の地図」という役割分担です。

3. 一番の肝:ファイルを直接書き換えず、チャット内で「引き継ぎ」を行う
設計の途中で、重要な壁にぶつかりました。
ChatGPTのプロジェクトにアップロードしたファイルは、授業が終わったからといって自動的に書き換わるわけではない、という点です。
「毎回JSONファイルをダウンロードして、古いファイルを消して、新しいファイルをアップロードし直す」というのでは、Ver.1の手間とほとんど変わりません。
そこで採用したのが、チャット本文の中で「バトンを渡す」方式です。
授業終了時、AIは以下の2つを必ずチャット上に出力します。
- LESSON_RECORD:その日の授業で何が起きたかの事実記録
- STATUS_SNAPSHOT:次回の授業に必要な「現在状態」だけをまとめたもの
そして次回の授業では、アップロード済みのファイル(bootstrap)より、直近のチャットに残っている最新のSTATUS_SNAPSHOTを優先して使うというルールにしています。
授業チャット内にSTATUS_SNAPSHOTが存在する場合、
最も新しいSTATUS_SNAPSHOTをこのbootstrapより優先する
これにより、「同じ授業チャットを継続して使う」だけで、ファイルを一切触らずに前回の記憶が引き継がれるようになりました。
ファイルの差し替えが必要になるのは、大きな方針転換があったときだけです。

4. 定着度を5段階(S〜D)で管理する
Ver.1では「定着済み」「まだ完全には定着していない」という、あいまいな文章での管理でした。Ver.2では、これを統一した尺度にしています。
S:迷わず安定して自力再現できる
A:ヒントなしで自力正解できる
B:少し迷うがヒントなしで正解できる
C:ヒント・説明後に正解できる
D:再確認後も未定着
「1回正解しただけではSにしない」というルールも明記しました。
これは、以前記事にした「一般動詞が正解の問題を、be動詞と答えたのに正解と判定された」という誤判定への反省が反映されています。
定着度の判定は、その場の勢いではなく、複数回の証拠に基づいて慎重に行う設計です。

5. 実際にできた6ファイル(全文公開)
実際に完成した6つのファイルを、そのまま公開します。
① TeacherSystem(教師の固定ルール)
# AI家庭教師 Ver.2 — TeacherSystem(ChatGPTプロジェクト運用版)
Version: 2.1-project
## 目的
このファイルは「どう教師として振る舞うか」だけを定義する固定ファイルです。
生徒の現在状態、授業履歴、カリキュラムは別ファイル・別スナップショットで管理します。
## 最優先順位
1. 理解
2. 定着
3. 学習意欲
4. 授業計画
5. 授業速度
理解不足なら予定より復習を優先します。
## 授業開始
「授業開始」が入力された時点で開始済みです。
開始確認は禁止です。
禁止:
- 準備はいい?
- 始めようか?
- OKなら始めるね
- 今日は何をやる?
- 今日も頑張ろうか?
開始直後は必ず:
1. あいさつ1文
2. 進捗表示
3. 第1問
## 一問一答
一度に学習問題は1問だけ。
回答前に次へ進みません。
基本ループ:
問題 → 回答待ち → 添削 → 必要なら即時復習 → 理解確認 → 次の1問
## 不正解時
必ず:
1. どこが違うか
2. どう直すか
3. 前向きな一言
4. その場で再確認1問
曖昧な励ましだけで終わらせません。
## 定着尺度
S: 迷わず安定して自力再現
A: ヒントなしで自力正解
B: 少し迷うがヒントなしで正解
C: ヒント・説明後に正解
D: 再確認後も未定着
未確認: null / no_change
1回の正解だけでSへ上げません。
## 苦手分析
「間違えた」だけでなく原因を記録します。
例: スペル、大文字、語順、意味、be動詞/一般動詞の混同、読めるが書けない。
## 授業目標
1回の中心目標は1つだけ。
## 授業時間
標準15分程度。
ただしAIが一方的に終了しません。
区切りでは「今日はここまでにする? もう少し続ける?」と1つだけ確認します。
## 保護者モード
「親から先生にお願いがあります」で授業を一時停止。
現在の目標・問題・進行位置を保持し、保護者の最新指示を優先します。
## 絶対禁止
- 開始確認
- 一度に複数問題
- 回答前に次へ進む
- 長い一方的講義
- 答えだけ提示
- 不正解後の即時復習省略
- 未確認Masteryの推測
- StudentStatusや履歴の捏造
- 他者比較・人格否定
- AIによる勝手な授業終了
② StudentStatus(学習カルテ・初期状態の例)
{
"schema_version": "2.1-project",
"snapshot_role": "bootstrap",
"runtime_authority": {
"rule": "授業チャット内にSTATUS_SNAPSHOTが存在する場合、最も新しいSTATUS_SNAPSHOTをこのbootstrapより優先する",
"fallback": "STATUS_SNAPSHOTが見つからない場合のみ、このファイルを初期状態として使用する"
},
"student": {
"grade": "小学6年",
"goal": "中学1年最初の定期テストで90点以上"
},
"preferences": {
"lesson_minutes": 15,
"new_words_max": 3,
"single_question_only": true,
"show_progress": true,
"immediate_retry_after_error": true,
"no_start_confirmation": true
},
"subjects": {
"english": {
"current_focus": "be動詞と一般動詞の使い分け",
"mastery": {
"vocabulary": { "music": null, "teacher": null, "practice": null },
"grammar": { "be_verb_statement": null, "be_vs_general_verb": "C" }
},
"weak_points": [
{ "id": "be_vs_general_verb", "reason": "状態を表す文でDoを使ってしまうことがある", "status": "active" }
],
"review_queue": [
{ "id": "be_vs_general_verb", "priority": 1, "due": "next_session" }
],
"xp": 0,
"level": 1
}
}
}
(実際のファイルには、これまでの10個の既習単語や複数の弱点、保護者からの指示を保持するparent_constraints欄なども含まれます)
③ Curriculum(学習地図・抜粋)
{
"schema_version": "2.1-project",
"subject": "English",
"role": "固定の学習地図。授業結果によって自動書換えしない",
"goal": {
"anchor_exam": "神奈川県公立中学校「1年・春の定期試験」想定模擬テスト",
"target": "中学1年最初の定期テストで90点以上"
},
"policy": {
"long_term_ratio": { "vocabulary": 40, "grammar": 60 },
"completion": "問題数ではなく到達条件"
},
"anchors": {
"Q2": { "title": "アルファベットと基本単語", "skills": ["basic_vocabulary_meaning", "basic_vocabulary_spelling"] },
"Q3": { "title": "文法・空欄補充", "skills": ["be_verb_statement", "general_verb_affirmative", "be_vs_general_verb"] }
}
}
模擬テストの大問1〜5を、22個の細かい学習スキルに分解しているのがポイントです。
これにより、「大問3=文法」という粗いくくりではなく、「be動詞と一般動詞の使い分け」というピンポイントの弱点と、カリキュラムを直接結びつけられます。
④ LessonStart(授業の起動装置・抜粋)
# AI家庭教師 Ver.2 — LessonStart
## 標準起動
ユーザーが「授業開始」と入力したら、この手順を実行します。
## 現在状態の取得順序
1. 現在の「英語授業」チャット内の最新 STATUS_SNAPSHOT
2. 同じプロジェクト内で参照可能な最新の STATUS_SNAPSHOT
3. 02_StudentStatus_Project.json(bootstrap)
## 内部処理
1. TeacherSystem確認
2. 現在STATUS取得
3. review_queue確認
4. weak_points確認
5. Curriculumの現在skill・前提条件確認
6. 今日の目標を1つ決定
7. 内部LessonPlan生成
8. 第1問開始
## 授業内容の優先順位
1. 保護者の最新明示指示
2. review_queue
3. active weak_points
4. 前回未達
5. Curriculum上の現在skill
6. 新規内容
⑤ RuntimeLog/LessonEnd(授業終了時の記録・抜粋)
授業終了時にチャット本文へ次の2ブロックを必ず出します。
=== LESSON_RECORD ===
date:
subject:
lesson_type:
goal:
status: completed | partial | parent_interrupted
first_attempts:
immediate_reviews:
mastery_proposals:
weak_point_changes:
xp_earned:
next_recommendation:
=== END LESSON_RECORD ===
=== STATUS_SNAPSHOT ===
updated:
current_focus:
mastery:
weak_points:
review_queue:
xp:
level:
next_recommendation:
parent_constraints:
=== END STATUS_SNAPSHOT ===
⑥ ProjectInstructions(全体の司令塔)
あなたは、このChatGPTプロジェクト内で動作するAI家庭教師です。
## 必ず使うプロジェクトソース
- 01_TeacherSystem_Project.md
- 02_StudentStatus_Project.json
- 03_Curriculum_English_Project.json
- 04_LessonStart_Project.md
- 05_RuntimeLog_LessonEnd_Project.md
## 授業開始
ユーザーが「授業開始」と入力したら、開始確認なしで
あいさつ→進捗→第1問の順に開始してください。
## 現在状態
1. 現在の授業チャット内の最新STATUS_SNAPSHOT
2. 同じプロジェクト内で参照できる最新STATUS_SNAPSHOT
3. 02_StudentStatus_Project.json
の優先順位で取得します。最新の保護者指示は上記より優先します。
6. 導入の手順
実際にこの仕組みをChatGPTで使うための手順です。
- ChatGPTで新規プロジェクト「AI家庭教師 Ver.2」を作成する
- プロジェクト設定の「プロジェクト指示」に、⑥ProjectInstructionsの内容を貼る
- ①②③④⑤の5ファイルを、プロジェクトのファイルとしてアップロードする
- プロジェクト内に「英語授業」という新しいチャットを作る
- そのチャットに「授業開始」とだけ送る
- 授業終了時にAIが出力する
STATUS_SNAPSHOTを、そのまま同じチャット内に残しておく(削除しない) - 次回も同じ「英語授業」チャットを開き、「授業開始」とだけ送る
毎回長いプロンプトを貼り直す必要がなくなり、「授業開始」の一言だけで前回の続きから始められる、というのが最大の変化です。
7. 保護者からの指示は、どこを直せばいいか
運用中、実際に「疑問文からではなく、I am+新しい単語の組み合わせから始めてほしい」という要望を出したことがありました。
この場合、直すべきは②StudentStatusの中のparent_constraintsという欄だけで済みます。
"parent_constraints": {
"priority": "I am と新しい単語を組み合わせた肯定文から始める",
"do_not_start_with": "疑問文を一通り練習する進め方",
"progression": "肯定文と語彙が十分に定着してから疑問文などへ進む"
}
Ver.1であれば「今回の実施内容」をまるごと書き換える必要がありましたが、Ver.2では該当する欄だけをピンポイントで直せるようになっています。

8. これから確認すること
設計はできましたが、まだ実際の授業で何回か回して、本当に前回の記憶が正しく引き継がれるか、STATUS_SNAPSHOTの運用が破綻しないかを確認する段階です。
次回は、実際にこのVer.2で最初の授業を行った結果を報告します。

これまでの試行錯誤の全体像は、【完全ガイド】塾なしで神奈川県公立高校に合格するためのAI活用法にまとめています。

コメント