BASEプロダクトチームブログ

ネットショップ作成サービス「BASE ( https://thebase.in )」、ショッピングアプリ「BASE ( https://thebase.in/sp )」のプロダクトチームによるブログです。

ChatGPTを活用した文章生成機能のシステム構成

はじめに

みなさん、こんにちは。BASEでエンジニアをしております田村(taiyou)です。

2023年4月6日に、ChatGPTを活用してショップオーナー向けに文章の作成をサポートする機能「BASE AI アシスタント」をリリースしました。そのため、この記事では、BASE AI アシスタントのシステム構成について紹介します。

今回は、システム設計についてのテックブログなのでChatGPTのプロンプトについての言及はしません。(要望があれば次のテックブログに執筆いたします!)

また、前回のテックブログで「IdPとしてSAML認証機能を自前実装した」を執筆したのでこちらも是非見てみてください!

BASE AI アシスタントとは

BASE AI アシスタントとは、ショップオーナーがよりクリエイティブな作業に時間に費やせるように機械学習・深層学習などのAIを用いて、ショップオーナーをアシストするサービスのことです。

2023年6月現在では商品登録/商品編集画面にある「商品説明文の例を書き出す」機能を指します。今後、他の機能も公開予定です。

BASE AI アシスタントとは

システムの構成

アーキテクチャ

2023年6月現在では、BASE AI アシスタントのアーキテクチャは以下のようになっています。Vue.jsとCakePHPから構成される「商品登録/商品編集」システムからDSチームが管理するDS APIへリクエストし、ChatGPTに送信しています。

DSチームとは、Data Strategyチームのことで機械学習やデータ基盤などの専門知識を持つチームです。

システムの構成

「商品登録/商品編集」システムから直接ChatGPT APIへリクエストを送信しなかった理由は以下の通りです。

  • BASE AI アシスタントは機械学習・統計分析などの専門知識が必要になるため、領域的にDS APIを管理しているDSチームに責務を持たせたほうが組織的に適切である。
  • 採用している言語がチーム間で異なり(PHP vs Python etc...)、また分割することでより適切な技術選定が可能になり、将来的な開発速度が向上する。
  • 将来、BASE独自の文章生成モデルが誕生しても「商品登録/商品編集」システム側の対応が不要である。

上記の理由から「商品登録/商品編集」システムから直接ChatGPTにリクエストせずに、「商品登録/商品編集」システムとDS APIで領域を分割しました。

処理の流れ

アプリケーションの処理の流れは以下の図の通りです。

  1. Frontend : 生成リクエスト
    • フォームがsubmitされたら、Backend(API)に商品情報を送信する
  2. Backend : ショップ情報を取得
    • 商品説明文を生成するために必要なショップの情報(カテゴリ/...)をデータベースから取得する
  3. Backend : 商品説明文の生成リクエスト
  4. DS API : ChatGPTに送信
  5. DS API : 生成された文字列を返却

処理の流れ

2023年4月リリース当初では、フォームを押下してから実際に商品説明文がショップオーナーに表示されるまでに20~30秒ほどかかりました。

ビッグシルエットTシャツの例

リリース後

上記の処理で正常に動作していたもののある日からうまく文章が生成されない事象が度々発生するようになりました。

原因は、ChatGPTからのレスポンス時間が増加して、DS APIとBackend(API)の通信がタイムアウトしたためです。DS APIは AWS のAPI GatewayとLambdaで構成されたシステムなのですが、API Gatewayはタイムアウトの上限を30秒までしか設定できません。

原因は不明ですが、ChatGPT側のレスポンスタイムが30秒を超過したことでAPI Gatewayの接続がタイムアウトになり、結果としてBackend(API)でエラーになったのです。

改修

ChatGPTによる文章生成時間が30秒を超過した場合でも文章が表示されるようにで次のように処理を改修しました。

  1. Frontend : 生成リクエスト
    • フォームがsubmitされたら、Backend(API)に商品情報を送信する
  2. Backend : ショップ情報を取得
    • 商品説明文を生成するために必要なショップの情報(カテゴリ/...)をデータベースから取得する
  3. Backend : 商品説明文の生成リクエスト
  4. DS API : 生成リクエストIDを発行し、文章を生成し始める
  5. Backend : 生成リクエストIDを返却
  6. Frontend -> Backend : 生成リクエストID指定で取得リクエストを送信
    • 文章が生成されていない場合は生成中ステータスが返却される
    • 一定時間間隔で取得リクエストを送信しつづけるする
    • 文章が生成されたら、商品説明文を返却する

こうすることで仮に文章生成時間が30秒を超過してもエラーが発生しなくなりました。

今後の課題

上記の改修で仮に文章生成時間が30秒を超過してもエラーが発生しなくなり、正常応答率が更に向上しました。しかし、これはあくまで暫定的な対応であるため、ショップオーナーにより早く文章を生成し、表示する改修を行う必要があります。(こちらの対応はChatGPT側へ問い合わせ中です。)

おわりに

この記事では、ChatGPTを活用した「BASE AI アシスタント」のシステム構成について紹介しました。要望があれば次回以降にBASE AI アシスタントを実現するプロンプトエンジニアリングについての記事を書こうかと思います!