SFC Dream Academy v2
RAG家庭教師システム 完全要件定義書
苺花専用 – 小論文マスターへの道
書籍RAG統合
AI家庭教師
ゲーミフィケーション
音声対応
プロジェクト概要
最終目標
10代女子(苺花)が1年間で慶應SFC小論文をマスターする
継続の秘訣
楽しいゲーミフィケーション + 実力向上実感
学習方法
書籍RAGによる本格指導 + キャラクター対話
利用環境
スマホ縦持ち最適化、いつでもどこでも学習
システムアーキテクチャ v2
RAG家庭教師システム構成図
フロントエンド
- • PWA (Progressive Web App)
- • スマホ最適化UI
- • 音声入力対応
- • リアルタイム同期
- • オフライン対応
バックエンド
- • Flask/FastAPI
- • RAGエンジン
- • AI API統合層
- • 学習進捗分析
- • 通知システム
データ層
- • 書籍RAGデータベース
- • ユーザー学習履歴
- • 小論文添削DB
- • ゲーミフィケーションDB
- • 分析データ
モジュール構成 v2
1. RAG家庭教師エンジン
- • 書籍データ検索・抽出
- • 個別指導プラン生成
- • リアルタイム添削
- • 弱点分析・補強提案
2. クイズ・ゲームエンジン
- • K-POP/SNS/メイククイズ
- • 段階的難易度調整
- • インタラクティブ解説
- • 書籍該当箇所リンク
3. キャラクター対話システム
- • 段階的関係構築
- • 学習モチベーション維持
- • 個別励ましメッセージ
- • SFC夢誘導機能
4. 音声・テキスト入力システム
- • 音声認識・テキスト化
- • 段階的文字数誘導
- • リアルタイムフィードバック
- • 発話分析機能
5. 学習進捗・分析システム
- • 能力値可視化
- • 学習パターン分析
- • 成長予測機能
- • カスタム学習プラン
6. 通知・リマインダーシステム
- • 個別通知時間設定
- • 学習習慣形成支援
- • プッシュ通知
- • 学習リマインド
7. AI統合システム
- • ChatGPT API統合
- • Gemini API統合
- • API切り替え機能
- • コスト最適化
8. ソーシャル・共有システム
- • 学習成果共有
- • 友達招待機能
- • 競争要素
- • 励まし合い機能
段階的学習フロー設計
Phase 1: 興味フック期(1-2ヶ月)
🎯 目標
- • アプリ習慣化
- • 基礎思考力向上
- • キャラクターとの関係構築
📱 主な機能
- • K-POP/SNS/メイククイズ
- • 4択 → 簡単な記述へ
- • 書籍該当箇所リンク
- • キャラクター励まし
Phase 2: 橋渡し期(3-6ヶ月)
🎯 目標
- • 論理的思考力養成
- • 文章表現力向上
- • 社会問題への関心
📱 主な機能
- • 社会現象分析クイズ
- • 300字程度の意見文
- • RAG添削フィードバック
- • 音声入力練習
Phase 3: 学術化期(7-12ヶ月)
🎯 目標
- • SFC小論文完全対応
- • 800字論述力完成
- • 独創的思考力獲得
📱 主な機能
- • SFC過去問演習
- • 本格小論文指導
- • ChatGPT/Gemini添削
- • 個別弱点補強
RAGシステム詳細設計
書籍データ構造
項目 | 詳細 |
---|---|
書籍ID | 一意識別子 |
書籍名 | タイトル・著者情報 |
章・節 | 階層構造管理 |
ページ | 該当ページ番号 |
内容 | テキスト化データ |
カテゴリ | 分野・レベル分類 |
キーワード | 検索用タグ |
RAG検索戦略
段階的検索: レベル別書籍優先順位
意味検索: ベクトル類似度による関連情報抽出
構造化検索: 章節構造を活用した体系的学習
個別最適化: 学習履歴に基づく推薦システム
RAGパイプライン処理フロー
質問受付
書籍検索
AI生成
AI API統合設計
ChatGPT統合
利用場面: 本格小論文添削・高度な対話
モデル: GPT-4 / GPT-3.5-turbo
特徴: 高精度添削、詳細フィードバック
コスト: 高精度・高コスト
Gemini統合
利用場面: 日常会話・基礎解説
モデル: Gemini Pro / Gemini Flash
特徴: 高速レスポンス、自然な対話
コスト: 標準精度・低コスト
API使い分け戦略
機能 | 優先API | 理由 |
---|---|---|
日常キャラクター対話 | Gemini | 高速・低コスト・自然な会話 |
クイズ解説生成 | Gemini | リアルタイム性重視 |
小論文添削 | ChatGPT | 高精度・詳細分析必要 |
学習プラン生成 | ChatGPT | 論理的構成力必要 |
緊急時バックアップ | 両方対応 | サービス継続性確保 |
実装サンプルコード
RAG家庭教師エンジン
class RAGTutorEngine:
def __init__(self, books_db, openai_key, google_key):
self.books_db = books_db
self.openai_client = OpenAI(api_key=openai_key)
self.gemini_client = genai.configure(api_key=google_key)
self.user_level_tracker = UserLevelTracker()
def generate_personalized_lesson(self, user_id, topic):
# ユーザーレベル取得
user_level = self.user_level_tracker.get_level(user_id)
# 関連書籍情報をRAGで検索
relevant_books = self.books_db.search_by_topic_and_level(
topic=topic,
user_level=user_level
)
# AIに個別レッスン生成を依頼
lesson_content = self.generate_lesson_with_ai(
topic=topic,
book_references=relevant_books,
user_level=user_level,
api=”gemini” # 日常レッスンはGemini使用
)
return {
“lesson”: lesson_content,
“references”: relevant_books,
“level”: user_level,
“next_steps”: self.suggest_next_steps(user_id, topic)
}
def correct_essay(self, user_id, essay_text):
# 小論文添削はChatGPT使用(高精度)
user_history = self.get_user_writing_history(user_id)
correction = self.openai_client.chat.completions.create(
model=”gpt-4″,
messages=[
{“role”: “system”, “content”: self.get_correction_prompt()},
{“role”: “user”, “content”: f”添削対象: {essay_text}\n過去履歴: {user_history}”}
]
)
return {
“corrected_text”: correction.choices[0].message.content,
“improvement_points”: self.extract_improvement_points(correction),
“next_practice”: self.suggest_practice(user_id, correction)
}
段階的クイズシステム
class AdaptiveQuizSystem:
def __init__(self, rag_engine):
self.rag_engine = rag_engine
self.difficulty_adjuster = DifficultyAdjuster()
def generate_quiz(self, user_id, topic_category):
user_progress = self.get_user_progress(user_id)
# Phase判定
if user_progress.phase == 1:
return self.generate_kpop_style_quiz(topic_category)
elif user_progress.phase == 2:
return self.generate_analysis_quiz(topic_category)
else:
return self.generate_sfc_style_quiz(topic_category)
def generate_kpop_style_quiz(self, topic):
# K-POP風の楽しいクイズ生成
quiz_data = {
“question”: “NewJeansが世界で人気な理由で最も重要なのは?”,
“options”: [
“Y2Kコンセプトの新しさ”,
“メンバーの個性”,
“音楽的完成度”,
“マーケティング戦略”
],
“correct_answer”: 0,
“explanation_with_books”: self.get_book_based_explanation(topic),
“next_level_hint”: “この現象を社会学的に分析してみよう!”
}
return quiz_data
def process_answer(self, user_id, quiz_id, answer, user_input_text=””):
# 回答処理 + 段階的文字数誘導
result = self.check_answer(quiz_id, answer)
# 文字数誘導ロジック
progress = self.get_user_progress(user_id)
if progress.week <= 2:
input_prompt = "感想があれば一言でも♪"
elif progress.week <= 8:
input_prompt = "理由を50字程度で教えて♪"
else:
input_prompt = "あなたの分析を200字で聞かせて♪"
return {
"is_correct": result["correct"],
"explanation": result["explanation"],
"book_references": result["references"],
"input_prompt": input_prompt,
"character_response": self.generate_character_response(user_id, result)
}
音声・テキスト入力システム
class VoiceTextInputSystem:
def __init__(self, speech_recognition_api):
self.speech_api = speech_recognition_api
self.text_analyzer = TextAnalyzer()
def process_voice_input(self, audio_data, user_id):
# 音声をテキストに変換
transcribed_text = self.speech_api.transcribe(audio_data)
# テキスト分析
analysis = self.text_analyzer.analyze(transcribed_text)
# AI応答生成(Geminiで高速応答)
response = self.generate_ai_response(user_id, transcribed_text, analysis)
return {
“transcribed_text”: transcribed_text,
“analysis”: analysis,
“ai_response”: response,
“encouragement”: self.generate_encouragement(user_id, analysis),
“next_suggestion”: self.suggest_next_input(user_id, analysis)
}
def generate_encouragement(self, user_id, text_analysis):
# 苺花専用の励ましメッセージ生成
user_profile = self.get_user_profile(user_id)
encouragement_prompts = {
“beginner”: “すごいね!考えがまとまってきてる♪”,
“intermediate”: “さすが苺花!分析力が上がってる!”,
“advanced”: “その視点、SFC生みたい!素晴らしい♪”
}
return encouragement_prompts.get(user_profile.level, “いいね♪”)
# フロントエンド JavaScript
class VoiceRecorder {
constructor() {
this.mediaRecorder = null;
this.audioChunks = [];
}
async startRecording() {
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
this.mediaRecorder = new MediaRecorder(stream);
this.mediaRecorder.ondataavailable = (event) => {
this.audioChunks.push(event.data);
};
this.mediaRecorder.onstop = () => {
const audioBlob = new Blob(this.audioChunks, { type: ‘audio/wav’ });
this.sendToServer(audioBlob);
};
this.mediaRecorder.start();
this.showRecordingUI();
}
stopRecording() {
this.mediaRecorder.stop();
this.hideRecordingUI();
}
}
実装フェーズ計画
開発スケジュール
Week 1-2
基本UI + クイズシステム
Week 3-4
RAGシステム + 書籍統合
Week 5-6
AI API統合 + キャラクター
Week 7-8
音声入力 + 通知システム
Week 9-10
テスト + 最適化
優先度別実装順序
🥇 最優先: 基本クイズ + RAG検索
🥈 高優先: キャラクター対話 + AI統合
🥉 中優先: 音声入力 + 進捗追跡
🏅 低優先: ソーシャル機能 + 高度分析
技術スタック詳細
フロントエンド
- • HTML5/CSS3: PWA対応
- • JavaScript ES6+: モダン機能活用
- • Tailwind CSS: レスポンシブ設計
- • Web Speech API: 音声認識
- • Service Worker: オフライン対応
バックエンド
- • Python 3.9+: メイン言語
- • FastAPI: 高速API開発
- • LangChain: RAG実装
- • OpenAI API: ChatGPT統合
- • Google AI: Gemini統合
データベース
- • SQLite: ユーザーデータ
- • ChromaDB: ベクトル検索
- • Redis: セッション管理
- • PDF処理: PyPDF2/pdfplumber
- • テキスト処理: NLTK/spaCy
データ分析・改善サイクル
学習効果測定
- • 回答正答率の推移
- • 文章力スコアの変化
- • 継続率・離脱率分析
- • 機能別利用率
継続的改善
- • A/Bテストによる機能最適化
- • ユーザーフィードバック収集
- • AI応答品質の定期評価
- • 新機能の効果測定
セキュリティ・プライバシー
データ保護
- • 学習データの暗号化保存
- • API通信のHTTPS化
- • 個人情報の最小限収集
- • データ削除権の保証
- • 定期的なセキュリティ監査
プライバシー配慮
- • 音声データの即座削除
- • 学習履歴の匿名化
- • 第三者提供の完全排除
- • 透明性のあるデータ利用
- • ユーザー制御可能な設定
よくある質問・トラブルシューティング
Q: Claude Codeでの開発が詰まった場合は?
• モジュール単位で小さく分割して依頼
• 具体的なエラーメッセージを共有
• 段階的な実装を心がける
Q: RAG検索が期待通りに動かない場合は?
• 書籍データの前処理を見直す
• 検索クエリの最適化
• ベクトル化パラメータの調整
Q: API利用コストを抑えたい場合は?
• Geminiを優先利用
• レスポンスのキャッシュ活用
• バッチ処理での効率化
コメントを残す