AIが算数力を分析してアドバイスをくれるシステムを作った話

13

先日、Googleが開発したAI「Gemini(ジェミナイ)」のAPIが5月14日まで無料とのことを聞いて、慌ててAIを使ったシステムを作ってみました。

ぶっちゃけ何でも良かったのですが、どうせなら役に立つ物の方が良いので「算数学習システム」を作り、そこにAIを組み込んでみることにしました。

以下の感じのシステムです。


色々なジャンルの問題の内、一つを選びます。
問題画面は以下の感じです。



スマホとかから手軽に遊べるように、3択問題を早押しで答えるような形にしました。

10問終わると、集計結果が出ます。
そこで「AIにアドバイス」ボタンを押せば、問題の解答データを元に、分析してくれます。




分析結果は以下の感じです。(長い)



こんな感じです。
直近50問までの解答データを保存しているので、過去との変化も分析するようにしています。
また、特定の問題のアドバイスだけではなく、各問題の解答データを集計して、総合的なアドバイスをくれるボタンも用意しています。

まぁ正直AIの部分はお遊びで、算数学習システムとして使えたら良いなと思っています。
キノコードの生徒用のポータルサイトに実装しましたが、無料アカウントで出来るので良かったら、やってみてください。
AI算数天国はこちら


さて、ここからは技術的な話や、AIに関する所見です。

まず、Gemini API は非常に簡単に実装できました。

たぶんPythonでやった方が簡単なのですが、キノコードサイトがRailsで作っていることもあり、rubyからREST APIを利用する形になりました。
Gemini APIのドキュメントが分かりやすいので、これ見れば大体出来ます。
Gemini APIドキュメント

一応、実装部分のコード(画像ですが)


悩んだのは、プロンプト(AIへの指示内容)と、学習データの形式です。

まず、プロンプトは最終的に以下に落ち着きました。

-------------------------------------------------------------------
user.name+'君の解答データを文末に配列の形式で渡します。
                先頭の要素は、今回のテストの合格数(全部で10問)です。
                2つ目から11個目の要素までは今回のテストの解答データです。
                それ以降の要素は、過去の解答データです。
                今回の解答データと、それ以前の解答は明確に分けて認識してください。
                あなたは'+user.name+'君の解答データを分析し「良い所」と「間違いやすいポイント」と改善するための「アドバイス」を日本語でしてください。
                以前の解答と、今回のテスト解答との変化点などもあれば、それも伝えてあげて。
                超ハイテンションで、楽しくなるような口調で話して。
                frac{}{}みたいなLatexの記法は表示しないで。
                参考サイトは不要。解答データは次の辞書型のデータです。' + study_data_json
-------------------------------------------------------------------

最後のstudy_data_jsonに、生徒の解答データが入っています。
解答データは、

[{"今回のテストの解答":[{"生徒の解答":"9個に分けられた内の1個分を分数で言うと\\(\\frac{2}{3}\\)","正しい解答":"9個に分けられた内の1個分を分数で言うと\\(\\frac{1}{9}\\)","正解したか?":"間違った","解答までの時間(秒)":0.16}...},{"今回のテストの正解数": 6},{"1つ前のテストの解答": [...}]

という感じのデータ形式になっています。
最初は、もっとシンプルなデータを渡していましたが、かなり分析の精度が悪く、何問正解したかすら間違えてしまうので、かなり細かく区切って渡すようにしました。

特に、AIは時間の概念が薄いようなので「今回やったテスト」と「前回やったテスト」を切り分けることが難しく、ハッキリとデータを分けないと、見当外れの解答が多かったです。
(データの更新日時を、UTCで渡しても良かったかもです)

尚、\frac{}{}みたいな書き方はLeTaxという数式をWEB画面上に正しく表示させる形式ですが、プログラム的に分数のデータ(rubyならRational)を渡しても、AIの返答は1/10みたいな形式になってしまうので、LeTax形式で渡してみたら、LeTax形式で返してくれたので、これをサイト上で変換させて表示することにしました。

また、Gemini は画像も理解できるので画像自体を渡してみたのですが、文字だけと比べても特に精度が変わりませんでした。
むしろ、画像の重みが強いようで、画像の内容に引っ張られた解答が増えました。
データ量的にも、膨大な量になってしまうので、文字に置きかえて渡すことにしました。

以上、このデータの形式に関しては、AIを使うかどうかによって、かなり設計が変わるので、面白い部分でした。


最後に、コストの問題に触れておきたいです。
現状は無料で使えているので、コストを考慮していないですが、実際に有料になった後は、かなりコストが厳しいと思いました。

Gemini API の費用は入力と出力に分かれていて、有料後は以下になるようです。



今回の入力データは、大体1回で約7000トークン、
出力データは約1000トークンでした。

計算すると、142回ごとに約10ドルかかります。
1ドル150円で考えると、1回のアドバイスごとに10円かかることになります。
こんなん絶対ペイしません。
もっとデータ量を減らして、10分の1にしたとしても採算は取れないでしょう。

これでもGemini API の料金は 他のChat GPT や Claude などよりもかなり安いです。

如何にAIが進化したとしても、現状でシステムに組み入れるには、かなりコストパフォーマンスが悪いと思います。
WEBサイト上から、無料で使うのが一番良い使い方です。

ただし、オープンソースで無料で使えるAIモデルがちょこちょこ増えてきています。
特にMeta社の開発している「LLaMA(ラマ)」は、その最高峰の性能をしています。

これをインストールしてローカルで動かした場合の費用は無料です。
めちゃくちゃ有難いです。
今後、システムにAIを組み込むなら、これ一択になっていく気がします。
ただし、現状はChat GPT や Claudeなどの有料AIモデルに比べると性能は落ちます。
(特に日本語)
さらに、このAIを動かすためのPCは、かなりハイスペックじゃないと、返答までの時間がかかりすぎて厳しいです。
大体20万ぐらいのPCスペックだと、簡単な返答でも数分かかります。(APIだと長くても10秒程度)

RTX4090クラスか、appleが最近出したMac Studioのメモリもりもりじゃないと数秒程度での返答は難しそうです。
つまり50~100万クラスのPCが必要になってくる感じです。

ただ、これは近いうちになんとかなるレベルになると思いますので、API経由よりはかなり未来は明るい気がします。
そのうちローカルでの実装に作り替えてみます。

ということで、期間限定の「AI算数天国」をぜひやってみてくださいね!
AI算数天国はこちら