Tabelog Tech Blog

食べログの開発者による技術ブログです

日本初の挑戦〜食べログによるChatGPTプラグイン開発の舞台裏

はじめに

食べログのメディア領域でサービス開発のエンジニアリングマネージャーをしている関戸です。

2023年5月8日のプレスリリースの通り、食べログの新たな取り組みとして2023年5月6日にChatGPTプラグインの提供を開始しました。さまざまなメディアで日本初の試みとして取り上げられています。

ChatGPTプラグイン提供の前提として、プラグイン開発をするためには、(当時は)ウェイトリストに登録し、開発者として招待される必要がありました。招待が届いたアカウントでは、プラグインの動作確認や開発ができるようになります。ウェイトリストに登録後、いつ招待が届くか分からない状況でした。

食べログではアカウントに招待が届いた当日に動作確認して、公開申請を提出しました。 OpenAI社によるChatGPTプラグインの発表後、どこよりもいち早くプラグインを提供することを目指して、必要な調整を事前に進めていたからこそ、素早く対応することができました。

食べログのような上場企業が運営する大規模サービスでは、ChatGPTプラグインの提供といった新たな取り組みを進めるために、システム開発だけではなくさまざまな調整が必要です。食べログの企画やデザイナー、データサイエンス、品質管理のエンジニアだけでなく、法務、情報セキュリティ、インフラ部門などの協力を得て、必要な調整を乗り越えることができました。

食べログChatGPTプラグインでは、ChatGPTを使った最新情報にもとづくお店探しの体験を提供します。プラグイン開発では、サービス開発エンジニアだけでなく品質管理やデータサイエンスのエンジニアが関わることで、「ChatGPT上でお店探しの体験を実現する」といった経験のない開発テーマを乗り越えることができました。

この記事では、必要な調整や開発を乗り越えて、日本初のChatGPTプラグインを開発した舞台裏をご紹介します。また紹介する内容は2023年5月時点の情報にもとづいており、今後変更の可能性があります。

食べログChatGPTプラグインとは

食べログChatGPTプラグインとはどういうものかイメージを持っていただくために、画面イメージをご紹介します。

食べログChatGPTプラグインでは、ChatGPTに対して希望のエリアや料理ジャンル、予約したい日時や人数を指定することで、ネット予約の空席があるお店を探す体験を提供します。また、ChatGPTの検索結果から食べログに移動してネット予約を完了できます。

あらかじめプラグインをインストールしておくことで、ChatGPTが会話の内容から適切なプラグインを利用して回答を生成する動きとなっています。

システム概要

プラグイン提供に必要な調整や開発について説明するために、食べログChatGPTプラグインのシステム概要を説明します。

プラグイン提供のために、食べログでは下記の3つを用意しました。必要な要素については、OpenAI社のドキュメントを参照しました。

名前 概要
Plugin manifest プラグイン名やプラグインの説明、API仕様書のURLなどを記載する
API仕様書 OpenAPI形式でAPIのインターフェースやフィールドの説明などを記載する
お店検索API エリアや料理ジャンルなどを示すキーワードと予約日時/人数をインプットとして、ネット予約の空席のあるお店の一覧を返却する

いち早くプラグインを提供するための素早い公開申請の実現

いち早くプラグインを提供するために、開発者の招待が届くタイミングが不明確な中でも、公開申請に必要なタスクを並列で進めました。実際に開発者の招待が届いたとき、それぞれのタスクがほぼ完了していたため、当日の公開申請が実現できました。

公開申請に必要なタスクはPlugin manifestの項目を参考にしました。プラグインに必要な開発タスクだけでなく、社内の各部門との調整タスクもすべて洗い出して、抜け漏れなく着実に進捗する状態をつくりました。

大規模サービスで新たな取り組みをするための必要な調整が多くある中で、企画やデザイナー、エンジニアなど職種を超えて分担して並列で進めました。その結果、調整不足によって途中で開発が止まってしまうということもなく、必要な調整を踏まえた上で公開申請をして、いち早くプラグインを提供することができました。

下記の調整や開発タスクについて、どのようにして乗り越えることができたのかご紹介します。

調整タスク
法務調整
セキュリティ調整
インフラ調整
開発タスク
お店検索API開発
QA
ChatGPT動作チューニング

大規模サービスで必要な調整を乗り越える

法務部門と情報セキュリティ部門、インフラ部門との調整について紹介します。

法務調整

法務部門と下記の調整をしました。

各調整におけるポイントを説明していきます。

プラグイン関連の規約確認

ChatGPTプラグイン関連の規約として、具体的には下記が挙げられます。

法務部門で規約の法務リスクを洗い出し、食べログの事業部として受容可能であるか判断しました。

個人情報管理のリスク確認

FAQの記載より、ChatGPTから食べログシステムへのリクエストには「ユーザーの国、州、会話」を含むプライバシーデータが受け渡されるリスクがあることが分かりました。

法務部門と当該リスクについて協議し、対応方針について判断しました。

サービス提供の規約定義

Plugin manifestにはlegal_info_urlの項目があり、規約を指定する必要があります。既に公開されている他社プラグインを確認し、多くはサービス自体の利用規約かAPI利用規約を指定していることが分かりました。

法務部門と議論の上で、legal_info_urlにはサービス利用規約を指定する判断をしました。

セキュリティ調整

情報セキュリティ部門と下記の調整をしました。

各調整におけるポイントを説明していきます。

脆弱性診断の準備

情報セキュリティ部門と脆弱性診断の実施に必要な調整を行いました。診断対象となるシステムについて、システム構成図やリクエスト一覧、想定されるセキュリティリスクなどを説明しました。また、開発しているシステムのリリース日や診断可能になるタイミングを踏まえて、情報セキュリティの専門会社に診断を依頼するスケジュールを計画して調整しました。

脆弱性診断の実施

脆弱性診断は情報セキュリティの専門会社が実施します。診断の途中で仕様の不明点や診断に必要なデータなどについて確認事項が送られてくるので、随時回答や対応をしました。

脆弱性指摘への対応

診断完了後、情報セキュリティの専門会社から脆弱性指摘が送られてきます。脆弱性指摘に対して、必要な調査や対応方針の判断、対応計画の策定などを行いました。

インフラ調整

インフラ部門と下記の調整を実施しました。

各調整におけるポイントを説明していきます。

機能/非機能要件定義

ChatGPTプラグインを提供するためには、Plugin manifestとAPI仕様書をChatGPTからアクセス可能な状態にして、ChatGPTから呼び出されるお店検索APIが動作するシステムを構築する必要があります。

インフラ部門とChatGPTプラグインの提供に必要な機能要件だけでなく、非機能要件としてサーバー負荷増加などシステム運用上のリスクをまとめました。

システム構成の設計

機能/非機能要件を踏まえて、複数のシステム構成案を洗い出し、既存システムへの影響、構築コスト、リリース時期の観点で比較しました。各案のメリット/デメリットを評価して、最適なシステム構成を決定しました。

アクセス数制限の設計

Rate Limitの項目では、APIに対するアクセス数制限の考慮について記載されています。

インフラ部門でシステム構成を踏まえたアクセス数制限の具体的な仕様案を検討しました。それらの仕様案について議論を行い、システム構成を踏まえた上で要件の実現に最適な仕様を決定しました。

ChatGPT上でお店探しの体験を実現する

食べログChatGPTプラグインとしてお店探しの体験を実現するために下記の開発をしました。

各開発におけるポイントを説明していきます。

お店検索APIの開発

開発者の招待が届くタイミングが不明確な中で、プラグイン提供に必要なAPIを素早く開発することを目指しました。

お店検索APIの開発では、食べログシステムで使用している検索モジュールを再利用し、検索モジュールを組み合わせて機能を実現する設計方針としました。また、検索モジュールで提供している機能の範囲内で今回の仕様を定義して、エンジニアから仕様を提案する形で要件定義を進めました。

その結果、最小限の開発工数とコミュニケーションで食べログシステムと同等のお店検索の機能を実現できました。

QA

QAは品質管理のエンジニアが中心となって進めました。

開発者の招待が届いておらず、ChatGPTプラグインの動作を確認することができない状況では、ChatGPTがどのようにお店検索APIを呼び出して、APIレスポンスからどのような回答を生成するか推測が困難でした。

そのため、プラグインの動作確認ではすぐに動作の大枠を捉える必要がありました。言語、ペルソナ、エッジケースなどの観点で幅広くテストケースを洗い出しました。

実際に洗い出したテストケースをもとに動作確認を進めたところ、ChatGPTは想定していた以上にユーザー入力を柔軟に解釈することが分かりました。

例)予約人数について、友人3人と自分自身を足し合わせた4人として解釈できている

一方で、期待通りになっていない動作もありました。ChatGPTが生成するリッチプレビューについて、同じ店舗が繰り返し表示されてしまう事象を確認しました。

ChatGPT動作改善

ChatGPT動作改善はデータサイエンスのエンジニアが中心となって進めました。

ChatGPTの動作を改善するためには、Plugin manifestのdescription_for_modelに説明を記載します。ChatGPTが生成するリッチプレビューで同じ店舗が繰り返し表示される事象について、期待の動きは「1つのお店につき1つのリッチプレビューを表示する」ことなので、下記の説明を追加しました。

Rich previews should be output only once per restaurant.

説明を追加して、動作確認した結果が下記になります。

ChatGPTの動作が変わり、リッチプレビューを期待通りの表示にすることができました。

以上のように、QAで見つかった期待通りでない動作についてPlugin manifestのdescription_for_modelの説明を変更し、ChatGPTの動作改善を繰り返すことでChatGPT上でのお店探しの体験を実現できました。

おわりに

大規模サービスに必要な調整と経験のない開発テーマを乗り越えて、日本初の試みとしてChatGPTプラグイン提供を実現できました。

上場企業が運営する大規模サービスでは、新しい取り組みをするために必要なことが多くありますが、それらをちゃんと踏まえてもスピーディーに成果を出せることを実証できました。

今後もこの経験を活かして、新たな技術を活用したお店探しの体験の向上に取り組んでいきます。

食べログChatGPTプラグインの開発に関わった各チームでは積極的にメンバーを募集しています。大規模サービスならではの苦労も多くありますが、新しい取り組みにチャレンジしていける環境がありますので、ご応募をお待ちしています!