AI検索 - スマホで学べるオンライン通信資格講座
調べたいキーワードを入力すると、スタディングの様々な学習コンテンツの中から、最適なコンテンツを探して表示する機能です。従来の検索機能のように単に検索キーワードをコンテンツ内で探すのではなく、機械学習を利用して検索キーワードとの関連性や他の受講者の評価などから各ページをスコアリングし、求めているコンテンツを上位に表示します。 ...
https://studying.jp/function/aisearch.html
KIYOラーニング株式会社のページをご覧いただいている皆様こんにちは。
今回はSTUDYing(スタディング)のAI検索という機能に生成AI技術を活用した開発プロジェクトについてご紹介させていただきます。
2022年11月にChatGPTが公開されてからというもの、生成AIは高い注目を集めています。当社においても、「学びを革新」すべく生成AI技術をプロダクトに組み込む開発プロジェクトが立ち上がりました。
そして2023年7月に生成AIを使って資格合格を支援する「AI説明機能」(ベータ版)をリリースいたしました。まだベータ版ではあるものの、プロジェクト始動からリリースまではたったの3か月間!短期間での集中開発の舞台裏に迫りたいと思います。
AI説明機能はAI検索に新たに搭載された機能で、ベータ版では有料コースを受講中の講座で利用できるようになっています。
受講生がわからない用語を質問すると「AIマスター先生」が説明文を自動で生成して回答します。これにより、検索エンジン等で用語を調べて情報を取捨選択する必要がなくなり、よりスムーズに学習を継続することができます。
スタディングの学習コンテンツ等をもとに信頼性の高い説明を生成
説明文の生成にはスタディングの学習コンテンツを活用しています。受講生が入力した用語に対して関連度の高いコンテンツをピックアップするAI検索の機能を流用しつつ、それらのコンテンツの内容をもとに、生成AI(GPTモデル)により説明文を作成することで、信頼性が高くわかりやすい内容を提供いたします。
GPTが持つ情報を加味した説明でより幅広い疑問に対応
GPTが持つ情報全般を加味した説明もあわせて回答することもできますので、スタディングの学習コンテンツとは異なる観点の説明にも理解を深めることができます。
当社では、一人ひとりに合わせた学習サービスを実現するために、AI機能の開発にも力を注いでおり、このプロジェクトは社内で重要な取り組みとして進められていました。
そのため、このプロジェクトには代表の綾部さんも立ち上げから参画しており、プロジェクトメンバーと密接に連携を取りながら開発が進んでいきました。代表との距離が近いなかで開発に携われるのは当社の特徴の一つですね。
システム開発はエンジニアの山本さんがプログラムの開発を担当しました。これまでにAI検索の開発を担当していた経験もあり、技術力の高さにも定評がありますのでまさに適任者です。
▼AI検索の開発秘話はこちら
画面デザインは技術広報メンバーでもあるデザイナーの田中さんが担当しました。田中さんはAI学習プランなど、他のAI機能でも画面デザインを手がけた経験もあります。
品質保証に関しては、またしても技術広報メンバーでもあるQAエンジニアの坪根さんが担当しました。技術広報メンバーが活躍するプロジェクトですね。この記事を執筆している私(大原)も実は途中からこのプロジェクトの定例会に参加させてもらっていましたが、小数ながら精鋭揃いのメンバーで取り組んでいる姿が印象的でした。
生成AIのプロンプト開発はスタディング事業部のメンバーが担当し、システム開発と並行しながら一丸となってプロジェクトを進めていきました。
プロジェクトが始動してからしばらくの間、社内でも情報の開示は慎重に進められ、生成AIをプロダクトへ組み込むための調査活動は水面下で進められました。
開発スピードが重要な目標の一つだったこともあり、他のシステム開発計画や要員の調整を経て、プロジェクトメンバーが集中できるように環境が整えられていきました。
● 生成AIに送るプロンプトを試行錯誤
生成AIを活用した開発の中で特に難しかった点は、学習者からの質問に対して、適切な説明文を生成するためのプロンプト作成です。
スタディングの学習コンテンツの内容を基に説明文を生成してもらうため、プロンプトにはスタディングの学習コンテンツの内容を含める必要がありました。
しかし生成AIに送ることが出来るプロンプトの長さには制限があるため、必要な情報を効果的に組み込む工夫が求められました。
そのため、スタディングの膨大な学習コンテンツから関連性の高い情報を抽出し、適切な長さのプロンプトに収める工夫をしています。
回答生成に必要な指示文については、どのような文章にすれば適切な回答が得られるかを繰り返し検証し、簡潔かつ効果的なプロンプトを作っていくためのベースが出来上がりました。
● SSE(Server-Sent Events)でChatGPTライクなユーザ体験を実現
今回開発したAI説明機能では全ての回答の生成を待たずに、回答が順次画面に表示される、ChatGPTのようなユーザ体験を実現しました。
生成AIのAPIがストリーミング配信をサポートしているため、呼び出し側のスタディングのサーバサイドでストリーミング配信を受け取れる処理を新たに開発しました。これにより、回答をストリーミング形式でブラウザへ順次送信するSSE(Server-Sent Events)の仕組みを実現しています。
全ての回答の生成を待つケースに比べるとSSEでストリーミング配信した方がユーザ体験が向上すると思いますし、回答が長くなるにつれてその効果が顕著に表れると考えています。
● ボトルネックな処理は並列化・キャッシュ化でパフォーマンスを向上
開発を進める中で、プロンプトに含めるスタディングの学習コンテンツの情報を絞り込む処理がボトルネックになることが判明しました。
学習コンテンツを分割し、関連度の高いブロックを特定するためには繰り返し処理が必要ですが、情報量の多い学習コンテンツによっては処理に時間がかかる恐れがあったのです。
この処理は機械学習用のライブラリを利用するためにPythonで実装しており、AWS LabmdaでAPI化していますが、Pythonの並列処理を活用して高速化させることで解決しています。
また、処理結果をDBにキャッシュとして保存しておくことで、同じ質問をが寄せられた際に学習コンテンツから絞り込んだ情報を素早く得られるように工夫しました。
AIマスター先生がユーザの質問に回答してくれる、というコンセプトから、従来のAI検索のコンテンツが一覧表示されるだけのデザインではなく、AIマスター先生が実際に応えているようなチャットライクなデザインが採用されました。
AI説明機能がAI検索に包含される関係にあるため、機能の有効化を制御するボタンの配置の仕方や、機能として登場したことが伝わるように工夫を凝らしました。複数の案を提案し、それぞれのメリットデメリットをプロジェクト内で議論をしながらデザイン案を採用していきました。
一部の質問の仕方によって、AIが予期しない回答を生成してしまう可能性があり、それがプロンプトインジェクション攻撃につながる危険性が浮上しました。このため、通常のWebアプリケーション開発において注意を払う必要のある脆弱性に加えて、生成AI固有の脆弱性についても十分なテストを実施してきました。
生成AIの利用は、1回のアクセスごとに課金が発生する仕組みとなっています。そのため、利用可能なユーザを有料講座の受講者に限定したり、月間の利用クレジット数を設定するなど、EDos攻撃に対する対策も講じました。
EDos攻撃とは?
過大なアクセスを発生させるなどして攻撃対象に経済的な損失を与え運用停止に追い込む手法。
ベータ版のリリースまでに幾度も課題の解消や改善案の検討を繰り返しましたので、満足の出来る状態でひとまずユーザへ届けることが出来たと思っています。
リリース後にいくつか軽微な不具合も見つかりましたが、迅速に対応することができましたし、管理ツール上で利用状況をモニタリングしやすくするための機能改善も行いました。
今後はユーザの利用状況をモニタリングしながら、ユーザのフィードバックを収集してサービスの改善に向けて取り組んでいきます。また、回答の精度に影響を与える可能性のあるアーキテクチャについても、複数の選択肢を比較検証しながら改善していく予定です。