LCL Engineers' Blog

バス比較なび・格安移動・バスとりっぷを運営する LCLの開発者ブログ

移動手段比較をAIでサポート!格安移動ChatGPTプラグインの開発記録

はじめに

LCLエンジニアの地引です!

7月19日に格安移動ChatGPTプラグインをリリースしました🎉

prtimes.jp

本記事では格安移動ChatGPTプラグインの概要と開発過程をまとめて紹介していきます!


格安移動ChatGPTプラグインとは

こちらの画像のように、出発地、目的地、出発日を入力するだけで、バス、飛行機、新幹線・特急列車など、さまざまな交通手段の料金と所要時間を一覧で見ることができます。

また、ChatGPTの検索結果から格安移動のサービスページに遷移して、詳細の確認から予約まで進むことができます。


プラグイン開発

先日、いち早くChatGPTプラグインをリリースした食べログ(カカクコム社)の取り組みが大きな話題になったと思います。 「日本初の挑戦〜食べログによるChatGPTプラグイン開発の舞台裏

今回LCL社でプラグインを開発するにあたり、カカクコムグループ会社の繋がりを通して食べログのエンジニアの方に直接知見を共有していただいたお陰で、スムーズに開発を進めることができました。

この場を借りてお礼申し上げます。この度はご協力ありがとうございました!

※LCLはカカクコムのグループ会社です。

www.lclco.com

GPTプラグインについては、基本的にはOpenAIの公式ドキュメントを参考に作成しました。

基本的な仕様については以下の図にわかりやすくまとめました。

図にある通り、プラグイン開発にあたって、新規に作成したものは、以下の3つになります。

  • 格安移動API
  • openapi.yaml(API定義書)
  • ai-plugin.json(マニフェストファイル)

それぞれを詳しく解説します!


格安移動API

本プラグインの肝となるAPIです。 基本的な仕様としては、出発地・到着地・出発日のリクエストを受け取り、それに基づき高速バス・飛行機・新幹線のデータをレスポンスします。

既存の格安移動サイトの検索ロジックをベースに、ChatGPT用に最適化したAPIをエンジニア2人で1週間少々かけて実装しました。

具体的には、「移動手段の比較の概要」と「移動手段の詳細情報」の2つをレスポンスに持たせて、ChatGPTの方でそれらを出し分けるようにしています。

例

"search_summary": [
  {
    "type": "express_bus",
    "detail": {
      "four_rows_of_seats": {
        "lowest_price": "2,000",
        "detail_url": "https://idou.me/search/bus/tokyo/osaka/20230725
      },
      "three_rows_of_seats": null,
      "total_time": "8時間0分"
    }
  },
.
.
.
"search_result": [
  {
    "type": "express_bus",
    "detail": {
      "four_rows_of_seats": [
        {
          "departure_place": "池袋サンシャインシティ文化会館",
          "arrival_place": "大阪梅田",
          "departure_time": "23:30",
          "arrival_time": "07:30",
          "price": "2,000"
        },
.
.
.


openapi.yaml(API定義書)

上記の格安移動APIのリクエスト・レスポンス形式等をこちらのファイルで定義します。

具体的にはそれぞれ以下の通りです。

リクエスト形式を定義する場合は、APIのリクエストで受け取りたい形式に変換する記述をこちらに記述することで、ユーザーのリクエスト内容を解析して、APIのリクエスト形式に合わせたパラメータをセットしてくれます。

例
parameters:
  - name: from_prefecture
    description: Specify the prefecture of departure in Roman (lowercase) letters.


レスポンス形式を定義する場合は、レスポンスで想定される内容をなるべく分かりやすく、具体的に記述することで、ChatGPTがレスポンスを生成する際に、その意図を汲み取った回答をしてくれる確率が上がります。

例

SearchSummaryDetail:
  type: object
  description: Detailed information about a specific type of transit.
  properties:
    type:
      type: string
      description: Type of transit (e.g., bullet train, airplane, express bus).


ai-plugin.json(マニフェストファイル)

上記のAPIとopenapi.yamlで制御できない項目については、こちらのai-plugin.jsonで制御します。

主にAPIのレスポンスを受け取ったChatGPTに対して、そのレスポンスをどのように出力してほしいかを記述します。

複雑な処理でない限りマニフェストファイルに記述した内容を逸脱する回答はしませんが、チューニングをしてみた感じ英文字で250字を超えると、予期しない回答やマニフェストファイルに反する回答などを生成する確率が上がるので注意が必要だと感じました。

例
Answer in the language asked.


プラグイン開発を通して

元々エンジニア内で、ChatGPTを使ったサービス開発ハッカソンなどを行なっており、プラグイン開発の機運が高まっていたタイミングで、格安移動ChatGPTプラグインプロジェクトが立ち上がりました。

SEOに依存しない流入経路の確立や、新時代のサービス開発への挑戦など、これまで経験したことのなかった新しいチャレンジを行えて、エンジニアとして知見を広げることができました。

格安移動プラグインをきっかけに、今後もLCLエンジニア全体で新たなチャレンジをしていきます!!!


JOIN US!!!

LCLは、主要サービスの急成長期を終え、現サービスを安定稼働・改善させながら新しいビジネスに挑戦していくフェーズに入りました。ChatGPTプラグインのような新しい時代の新しいサービス作りに、一緒にチャレンジしてくれる仲間を募集しています!

まずはカジュアル面談からでも、随時対応していますのでぜひお気軽にお声がけください。

www.lclco.com