⬆️

生成AIとブラウザ拡張でZennやQiitaや技術ドキュメントに確認問題モジュールを挿入する

2024/09/01に公開

技術記事なりドキュメントなりを読む時、ページ末尾に確認問題があると理解度チェックができて嬉しいなと思ったので、その手のモジュールを挿入するブラウザ拡張を作りました。

完成品

chrome拡張を使用することで、こんな感じ⇩にZennやQiitaの記事の末尾に確認問題が表示されるようになります。問題はGPT4o-miniで生成されます。特にアカウント登録などは必要なく、chrome拡張を有効化したら自動でモジュールが挿入されるようになります。

Zennの記事の下部に確認問題モジュールが挿入されている。モジュールは4択問題の形状
Zenn記事では、リアクションボタンの下に4択問題が挿入される

また、ZennとQiita以外では、MDNPostgreSQL文書にも対応しています。そのうち他の公式仕様書とかにも対応するかもしれません。

MDN記事の下部に確認問題モジュールが挿入されている。モジュールは4択問題の形状
MDN記事では、関連項目の箇所に4択問題が挿入される

chrome拡張は以下で公開しています。

https://github.com/tfs-tada/chrome-ex-chatgpt-quiz

スマホの方は以下のページをどうぞ。既存のクイズを解けるほか、zennやqiitaのurlを打ち込むことで、新たなクイズを生成することができます。

https://quizenn-df3jqgubgq-an.a.run.app/

出題画面はこんな感じ。

Zennの記事の内容から確認問題を生成して表示するwebアプリの画面

背景

最近、ポスグレに詳しくなりたくてPostgreSQL文書をよく読んでいるのですが、頭に入っている実感がなくて参っていました。これについて、もう少し達成感を得たいな、というところからスタート。

ちょうどその頃、OpenAIから GPT4o-miniが公開されました。極めて良心的な価格設定と、期待以上のクオリティにより、個人開発でAIを使う、という選択肢は一気に身近になりました。
https://openai.com/index/gpt-4o-mini-advancing-cost-efficient-intelligence/

しばらくは自分のPCだけでポスグレ文書から確認問題を生成して遊んでいましたが、gpt4o-miniが想像以上に安い。全然トークンが減らない。無料サービスにしても全然平気そうだな、ということで公開しました。

真面目な話ですと、技術記事を読む際、明確な目的があるかどうかで読み方が変わるかと思われます。抱えた課題を解決するために記事を訪れた場合と、ただトレンドの記事を眺める場合では、吸収効率が違うように思います。

特に課題はなくキャッチアップのために記事を読む場合、読みっぱなしで終わってしまいがちです。確認問題モジュールがあれば、それはひとつの明確なゴールになるのではないでしょうか。

技術的なあれこれ

技術選定

おおよそベーシックな技術選定なので、簡単に紹介だけ。

chrome拡張のほうは React+viteを使い、Plasmo等のブラウザ拡張用フレームワークの採用は見送りました。特定のwebページに軽量モジュールを挿入するだけの拡張なので、あまりリッチな選択はしませんでした。

サーバーのほうは、Next.jsのPageRouterを採用。chrome拡張から叩かれる前提でapi設計をすることになったので、AppRouterは見送りました。DBはSupabase、接続はPrismaに丸投げしたので、かなり楽ができました。外部接続周りの課題は、キャッシュとレートリミットで何とかしています。デプロイはCloudRunですが、固有ドメインを取得していないので、urlがぐっちゃぐちゃです。

前述の通り、問題作成用の生成AIはOpenAI-GPT4o-miniを採用。トークンが切れたらサービスごと停止するかも。

プロンプトの課題

自分はAIを用いたアプリを開発した経験は薄かったので、乗りこなすのは結構苦戦しました。以下は課題の一例です。

ちょうどいいハズレ選択肢を作るのは難しい

今回は4択問題の形式で確認問題を生成させています。正解を作らせるのは難しくないのですが、ハズレ選択肢を作らせるのは一苦労です。ハズレなのに部分的に正解、みたいなものが出力されかねません。教習所みたいなやるせなさを覚えることになります。

学びにならない出題

記事の内容確認として相応しくない問題が度々吐き出されます。たとえば、

  • この記事の対象読者はどのような人ですか?
  • この記事で紹介された成果物はどこに公開されていますか?
  • この記事で、手法Aの評価は星いくつですか?

などなど。プロンプトを調整してどうにかならないか試行錯誤しましたが、どうにかなったか、と問われると首を傾げてしまいます。

振り返り

サービスとして

この手のアプリを真面目にサービス化しようとすると、構造的な歪みがネックになりそうです。

PC版はchrome拡張で実現したのに対し、SPだと専用サイトに遷移してクイズを検索する必要があります。ユーザー体験として、PC > SPとなります。

一方で、実際にZennやQiitaを読む際、

  • PCで読む時 → 業務中や個人開発中の課題解決
  • SPで読む時 → あらたな技術のキャッチアップやトレンド追い

なので、本来はSPユーザーにこそ届いてほしい機能なのに、SPユーザーの体験が残念、というのは結構致命的だったりします。スマホでもchrome拡張が使える日がやって来ればいいのですが、そういうわけにもいかないので。

一応、スマホ版ブラウザの中でもKiwi Browserなんかは拡張が使えるはずなので、このあたりを浚ってみるのもいいかもしれません。

所感

自分用アプリでは、はてなブログやnoteやYahooニュースを読むときにも、この手のクイズモジュールを挿入しています。記事を読む行為に締まりが出る気がします。多分気のせいです。

やりすぎなきらいはありますが、自分に合った形でAIを活用する、という意味では、今後この手の工夫をする機会は増えていくのではないでしょうか。AIがより身近に、よりローコストになるのはほぼ確定的である以上、うまく乗りこなしていきたいものです。

Discussion