1. アプリケーション概要
目的:
- ユーザーが読書メモ(直接入力またはURL入力)をもとに、理解度チェックテスト(クイズ)を生成し、トップページでテスト問題をプレビューできる。
- ユーザーはそのテスト問題に対して解答を入力し、解答送信(submit)後、バックエンドが解答内容と生成済みテスト問題を統合してスコア(正解数/総問題数:storeキー配下)を計算。
- 統合結果はJSON形式で保存され、UUID付きのシェアURLとして返却され、ユーザーは結果ページにリダイレクトして詳細を確認する(全体はステートレスな設計)。
主な機能:
- トップページでの入力フォーム(テキスト/URL切替)、オプション指定(難易度、問題数)
- 送信後、即時に生成されたテスト問題のプレビュー表示
- ユーザーがテスト問題に対する解答を入力し、「解答送信 (submit)」ボタンをクリックして解答内容を送信
- バックエンドで解答とテスト問題内容を統合し、スコア計算を実施
- 統合結果JSONがGCSに保存され、UUIDが返却される
- フロントエンドはこのUUIDを利用して結果ページにリダイレクトし、最終的なテスト結果を表示
2. システムアーキテクチャ
2.1 フロントエンド (Next.js)
- トップページ (入力&テストプレビュー):
- 入力フォーム(テキスト入力/URL入力、難易度・問題数指定)
- テストプレビューエリア:ユーザーが送信後に生成されたテスト問題(問題文、選択肢、正解、解説)が表示される
- 解答入力フォーム:各問題に対してユーザーが回答を選択/入力
- 「解答送信 (submit)」ボタン:解答送信時、解答内容をバックエンドにPOSTする
- 結果ページ:
- バックエンドから返却されたUUIDを用いて、GET /result/{uuid} エンドポイントから結果JSONを取得し、詳細なテスト結果(問題内容、ユーザー解答、正解、解説、スコア)を表示
- 再読み込み、トップページへ戻るボタンなどのナビゲーションも設置
2.2 バックエンド (FastAPI + LangChain)
- POST /test:
- ユーザーからの入力を受け取り、前処理、チャンク化、埋め込み生成、FAISS検索、LLM呼び出しを実施してテスト問題を生成し、プレビュー結果を返す
- このエンドポイントはトップページでテスト問題をプレビューするために使用する
- POST /submit:
- ユーザーが解答を送信するためのエンドポイント
- 受信データにはユーザーの解答情報が含まれ、バックエンドは生成済みテスト問題内容とユーザーの解答を統合し、スコア計算(storeキーに正解数、総問題数)を行う
- 統合結果JSONを外部のGCSアップロードモジュールで保存し、UUIDを生成して返却する