Skip to content

jphacks/ng_2501

Repository files navigation

SUDO - 数学動画ジェネレーター -

SUDO - 数学動画ジェネレーター -

製品概要

数学教育 X Tech: 生徒に数式の"動き"を伝えたい数学講師が、即座にオリジナル解説動画を作れる動画ジェネレーター

製品開発のきっかけ

塾の数学の講師をしている中で、数式の意味を教えたいのに生徒が数式の意味を丸暗記してしまい、式の意味を理解していない生徒をたくさん見てきました。

そこで私のような学校や塾で「自分らしい解説」を動画で手軽に届けたい」数学講師が簡単に副教材としてのアニメーションを作れるアプリケーションを作りたいと考えました!

課題感

代替テキスト

紹介動画

紹介動画

従来教材・動画教材の限界

  • 紙のプリントや黒板、静止画像教材では、図形の変形や関数の動きを直感的に伝えられない。

  • YouTube動画教材は生徒にとっての「その場」の疑問とずれていることもある。

    • また講師が本当に教えたい内容や重点と違う場面が多々あり、指導現場でも不適切なケースが発生しやすい。
  • また、スタディサプリの学習塾市場から撤退が示すように動画教材が「サービス自体のカスタマイズ性不足」「塾ごとの指導方針やカリキュラムに柔軟に対応できない」という課題が学習市場である。

  • 加えてSora2など現在の動画生成AIツールでは、教育用・数学専用のアニメーション、数式変形の過程や根拠を表現する細かなカスタマイズが難しく、現場の課題にフィットしない。

  • つまり 「動的な可視化」と「細やかな個別カスタマイズ」を同時に実現する“教育現場で使用できるツール”が決定的に不足している。

解決の方向性

  • 生徒が「公式や答えの暗記」で終わらないよう、教師は数式や関数・図形の“動き”や“なぜそうなるか”の根拠をアニメーション動画で直感的に伝えられるようにする。
  • 教師・塾講師が、生徒ごと・授業ごとの“その場”の疑問や理解度に合わせて、オリジナルの解説動画を簡単・即時に作れるようにする。
  • manimとAIによる自動生成・編集機能で、従来は専門知識や長時間が必要だった教材(動画)作成のハードルを劇的に下げる。
  • 動画生成・編集の工程をすべて直感的なUIで完結させ、誰でも現場のニーズに合わせた数学教材を手軽に作れる環境を提供する。

製品説明

SUDOは、数学講師が「自分らしい解説」をするための数学動画ジェネレーターです。

  • 誰のため?

    • 学校や塾の数学講師、「自分らしい解説」を動画で手軽に届けたい先生
  • 何ができる?

    • 手元の数式や板書イメージをテキストで入力すれば、AI×manimが解説意図に沿った理想の数学動画を即自動生成
    • 先生自身の“教えたい順序”“強調したいポイント”“生徒のつまずきや質問”を、自然な日本語で柔軟に動画へ反映できる
  • どう使える?

    • 授業で「説明が難しい」「紙だと伝わらない」単元を、すぐ動画でビジュアル化
    • テスト後や質問対応で、生徒ごとに「分からなかった箇所」だけピンポイントで作り直し、個別で教材作成
    • 自分だけの“補助教材”動画が何本でも作れる
  • どこが新しい?

    • 先生一人ひとりの「現場の工夫」「説明のこだわり」がそのまま“動画”という形で即反映できる
    • 従来の生成AIでは難しかった、数式や教材内容を“自然言語で指示するだけ”で、動的な数学アニメーション動画へ自動変換できる
    • 指導意図・を強調したいといった要望も満たせるので、教師主導の現場適応性が圧倒的に高い
    • 数学特化AI+manim連携というアーキテクチャにより、LaTeXや自然文・教材テキストから複雑な数式アニメ作成をで自動化
    • Sora2とは異なり、数学全般の動画に特化している。

解決できること

  • 教師は自分の教えたい通りに数学動画を即生成し、指導を効率化できる
  • 生徒はわかりにくい数式の意味や動きを、直感的な動画で理解できる

技術

独自技術

Manim動画生成AIエージェント

LangGraphベースのAIエージェントにより動画を生成しています。これはコード生成やエラー処理、実行を頂点に持ち、コードやエラー内容を状態として保持しています。
これにより、以下のManimコードの生成から実行の一連の流れの管理をしやすくしました。
manimコードの生成->linterチェック->セキュリティチェック->解像度を落とした実行チェック->実行->(成功したら終了、失敗したらエラー処理->linterチェック->・・・)
詳しくは、ベースエージェント使用しているエージェントをご覧ください。

検索機能

既存動画の説明文を埋め込みベクトル化してベクトルDBに保存し、ユーザー入力に意味的に近い動画を高速に検索できるようにしています。
あるユーザーが編集を重ねて作った分かりやすい動画は他のユーザーが見てもいい動画であることが多いので、再利用できるようにしました。
大量の動画データから、類似度が高い上位k件を高速に持ってくるために、埋め込みモデル+ベクトルDBを用いて実装しました。
詳しくは、該当ファイルをご覧ください。

コードの差分更新

編集時やエラー処理時に Unified Diff 形式の差分更新を適用し、出力トークン削減による低コスト化と高速化を実現しました。
gemini apiに対して、Unified Diff 形式での出力をさせると、行番号がずれるという問題あります。
そのため行番号はあくまで補助的に使用し、ハンクごとにコードのどこにあるものかを求めてから更新処理を適用しています。
詳しくは該当ファイルをご覧ください。

Manim専用linter

Manim 0.19.0で使用できないクラス/メソッド/引数の有無を静的解析で確認する自作のlinterを開発しました。
詳しくは該当ファイルをご覧ください。

実行前セキュリティチェック

プロンプトインジェクション対策として、Manim コード実行前に危険なコードでないかをを静的解析により確認しています。
詳しくは該当ファイルをご覧ください。

セキュリティに対する意識

HTTPS 化・Docker 利用・GitHub コードレビューの厳格化により、安全なコード実行環境を整備しました。

フレームワーク・ライブラリ・モジュール

  • Next.js: フロントエンドフレームワーク
  • manim: 数学動画生成エンジン
  • FastAPI: バックエンドAPIフレームワーク
  • langchain/LangGraph LLM エージェント
  • ast 抽象構文木作成
  • Gemini API: プロンプト生成とmanimコード自動生成のためのLLM
  • Chroma RAG用DB

About

JPHACKS2025 Innovator認定 審査員特別賞

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6