🥑

AIサマリーを支える「Event Subscriber」

2024/04/24に公開

はじめに

こんにちは。mento CTOのmatsumatsu20です。
先日mentoからコーチングのセッション後に自動で要約を作成する機能「AIサマリー」をリリースしました。

プレスリリースはこちら
https://prtimes.jp/main/html/rd/p/000000027.000048788.html

mentoがなぜAIサマリーを作ったのかの記事はこちら
https://note.com/mento_sugiura/n/nc7cefd9f4e8b?sub_rt=share_b

mentoにとっては初めて生成AIをプロダクションで活用した事例であったので、 外部システムとの連携やイベントトリガーでの処理など、技術的にも新しい試みを取り入れてこの機能を実現しました。 この記事ではその仕組みを解説します。

全体の構成

まず、どうやって「AIサマリー」が作られていくかの全体感についてです。

mentoではコーチングセッションにzoomを用いてオンラインで実施しており、mentoが発行したzoom URLで録画が完了した際のwebhookを受取り、そこから「AIサマリー」の処理がスタートします。(なお、当然こちらの機能は事前にパーミッションを取得したユーザーにのみ提供されます)

その後、コーチングセッションを要約していくためにはざっくりと以下の作業が必要になってきます。

  • zoomのストレージからmentoのストレージへのデータの移動
  • セッション情報を文字起こし
  • 後続で扱いやすいようにデータクリーニング
  • GPT-4を用いテキスト情報の要約
  • 要約処理の完了通知
  • mentoのデータベースへの永続化

これをそのままナイーブに実装することも可能ですが、今後それぞれのタスクの前後に新しいタスクが追加されたり、また同じタスクを使いたい別のユースケースも想定されていたので、汎用的なイベントフックのタスクランナーをCloudRunで構築し、それが実際のタスクをキック(実際に要約処理をおこなっているのはVertexAI、等)していく、という構成を取りました。

システムの構成図

このイベント管理の仕組みを 「Event Subscriber」 と社内では呼んでおり、「AIサマリー」の屋台骨になってシステム全体を支えています。このシステムについてもう少し詳細を説明してみたいと思います。

複雑なイベントを管理するEvent Subscriber

「Event Subscriber」 主に以下の2つの責務を実行しています。

EventのSubscribe

この 「Event Subscriber」はPubSubトピックをSubscribeしており、AIサマリーに関わる処理で発生するイベントはすべてそのPubSubトピックにPublishされる作り になっています。その後、イベントを受け取った後は適切なEventHundlerに受け渡し後続処理を実行していきます。

実際に発生するイベントやPublish元としては、Audioファイルのアップデート完了がCloud Strageから通知されたり、AIサマリーの生成依頼がmento本体のAPIサーバーから通知されたりと経路も様々で、複数のシステムが絡み合うからこそ、イベントを管理できる責務が重要になっています。

Task Execution

EventHundlerの中では実際にタスクを処理していきます。

具体例をあげると

  • ファイルをCloud Strageにアップロードする
  • 要約処理用のVertexAIのカスタムジョブを実行する
  • 文字起こし用のVertexAIのパイプラインの実行
  • 後続処理のため、更にEventをPublishする
    等、イベントに応じてCloudRun自体で必要な処理を実行したり、外部の実行環境に依頼する責務を持っています。

また 処理のワークフローの情報はFirestoreに永続化されており、障害発生時の復旧や調査等もそれを参照することで迅速に対応が可能 になっています。

実際にAIサマリーを生成する際の処理のシーケンスがこちらです。

実行する処理も多く複雑なシーケンスになっていますが、この Event Subscriberのお陰でうまく処理の流れをコントロールすることができ、またTaskの流れの管理と実際の処理の中身をうまく分離できているので、VertexAIによる要約部分などの処理の部分により集中して開発できる 環境となっているかなと思います。

DXを意識した先行投資の重要性

ナイーブに実装するより、短期的には実装コストはかかりますが振り返ってもこの仕組みは絶対に必要だったと感じています。

リソースが潤沢ではないスタートアップだからこそ、Developer Experienceを意識した技術投資や意思決定をし、自分たちの中長期的な生産性を高める努力をすることが重要です。

特に複数のシステム連携が前提となっているアプリケーションの場合、障害発生時の対応コストや調査コストが相対的に高く、そのあたりをやりやすい環境整備を実装時点で検討しておくことは必須だと感じています。

We Are Hiring!

mentoではこのような生成AIを活用したアプリケーション開発も含めて、コーチングの体験を変えるようなプロダクト開発をどんどん加速していきます。

エンジニアやプロダクトデザイナーの仲間を大募集中ですので、少しでも気になる方がいればカジュアル面談やDMをいただけたら幸いです!

https://recruit.mento.co.jp/#54e3236ea62343c48c19ee5f454ec8e8

Discussion