AI機能と実行制御
AI処理の構成
AIは、講義中の字幕・要約、教材の分析、質問への参考回答に利用する。実行条件と利用枠をPostgreSQLに記録し、Edge Functionsが外部APIとの連携を担当する。字幕の音声は、サーバーの実行許可を得た教員ブラウザからAIプロバイダーへ直接送信する。
Edge Functionsが実行前に照会し、利用枠と送信記録を更新
文字起こし・資料・質問
入力の準備・外部API連携・出力の検査
モデルによる生成
| 機能 | 入力 | 講義での利用 |
|---|---|---|
| 字幕 | 教員が許可したマイク音声 | 逐次字幕を表示し、確定した文字起こしを保存する。 |
| 講義要約 | 対象時間帯の文字起こし・コメント | 定期的に要点を生成する。入力不足時は生成・公開を見送る。 |
| 資料分析・投票案 | PDFから抽出したテキスト | 教材の分析と投票の下書きを作成する。 |
| 学術回答 | 質問・検索した文献 | 出典付きの参考回答を生成する。教員が訂正・非表示にできる。 |
実行許可と利用量管理
有料の生成処理は、利用許可の確認、利用枠の予約、送信記録の確定を経て開始する。DBは講義ごとの利用枠と実行記録を管理し、Edge Functionsは許可された要求をAIプロバイダーへ送る。
- 利用枠の予約権限・利用条件・残り枠を確認
- 送信記録の確定開始要求ID・操作・送信先を記録
- 外部APIの呼び出し初回の送信許可に従って実行
- 結果と利用量の記録応答を処理し、予約した利用枠を精算
外部AIの処理はDBトランザクションの外で実行される。応答が失われても処理済みの可能性があるため、同じ開始要求IDが届いたときは既存の送信記録を返し、新しい送信許可を出さない。操作や送信先を差し替えた同一IDの要求も拒否する。
既存の送信記録は、現在の機能の有効・無効を調べる前に照合する。権限が後から変わっても、送信済みの処理を未送信に戻さないためである。
資料分析の結果が不明な場合の精算
送信後の結果を確認できないまま記録の期限を過ぎた場合、予約額を利用記録に計上する。外部で実行済みの可能性を考慮した管理上の精算であり、AIプロバイダーから取得した請求額ではない。
字幕セッションの制御
字幕は、一度の応答で完了する生成処理と異なり、ブラウザとAIプロバイダーの音声接続が続く。開始時には講義の開催状態、教員の権限、利用許可、停止要求をDBで確認する。
開始処理と停止処理は、講義、字幕制御、利用記録を同じ順序でロックする。停止が先に確定していれば新しい送信を拒否し、送信許可が先に確定していれば、その記録を残したまま接続の終了と精算を処理する。
外部の接続が作られた後に応答が失われることもある。通話IDで接続を特定できる場合は終了要求を保存し、外部接続の終了処理へ進める。ブラウザ上の停止表示だけで終了したとは扱わない。
開始要求の期限と字幕の利用時間
送信記録の期限は、開始結果が不明な要求を精算するためのものである。起動済みの音声接続を、この期限だけで終了させることはない。ただし、期限後に同じ開始要求が再要求された場合は、開始応答を利用できなかったものとして終了要求と精算を処理する。
学術回答の生成と公開
学術回答では、PubMed・Crossref・OpenAlexから文献を検索し、取得した書誌情報を根拠として回答を生成する。生成結果には文献IDとの対応を持たせ、出典と数値の整合を検査してから公開する。
- 文献検索・照合識別子や研究種別を確認
- 回答生成取得した文献IDを指定
- 出力検査主張・出典・数値の対応を確認
- 公開・教員確認未確認の表示と、訂正・非表示の操作
出典との対応を検査しても、論文の解釈まで正しいとは限らない。自動公開した回答には教員未確認の表示を付け、教員が内容を確認して訂正・非表示にできる。
実装参照 7件
- 開始要求と送信記録の照合・再送拒否 ↗
supabase/migrations/20260811203000_phase7_30c2_google_ai_provider_dispatch.sql#L328 - 現行の期限切れ精算処理 ↗
supabase/migrations/20260812023000_phase7_30c2_google_realtime_provider.sql#L2217 - 字幕の送信前検証とロック順序 ↗
supabase/migrations/20260811203000_phase7_30c2_google_ai_provider_dispatch.sql#L442 - 応答消失時の通話終了と精算 ↗
supabase/migrations/20260812023000_phase7_30c2_google_realtime_provider.sql#L2333 - 起動済み通話を期限切れ回収から除外 ↗
supabase/migrations/20260812023000_phase7_30c2_google_realtime_provider.sql#L2490 - 文献検索・書誌照合・回答検査 ↗
supabase/functions/_shared/academicAnswers.ts - 要約・学術回答の公開 ↗
supabase/functions/generate-lecture-summary/index.ts