SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

「BOXIL SaaS」のChatGPTプラグイン開発の裏側を紹介します!

はじめに

こんにちは。スマートキャンプでエンジニアをしている佐々木(社内ではピーターと呼ばれています)です。

2023年6月20日のプレスリリースの通り、スマートキャンプの新たな取り組みとして2023年6月15日にChatGPTプラグインの提供を開始しました。ChatGPTプラグインを提供するのは、SaaSおよびITサービス比較サイトとしては国内初です。

prtimes.jp

私を含めエンジニアの正社員2名、インターン生1名、そしてプロダクトオーナー(PO)1名の合計4名で開発を進めました。

短期間と言える約3週間で、開発開始からリリースまでを無事に達成できました。

具体的な役割としては、私とインターン生がAPIの開発やChatGPTのレスポンスのチューニングを担当しました。一方、もう一名のエンジニアは申請関連の調査やインフラの整備、さらに、POは法務関連の調整やQAとして予想される質問のリストを作成する役割をお願いしました。

この記事では、開発の舞台裏や得られた知見などを紹介します。

BOXIL SaaSのChatGPTプラグインとは

今回開発したプラグインのイメージは次の画像のようになっています。

BOXIL SaaSのChatGPTプラグインでは、ChatGPTに対して業務を効率化したい点について相談すると、その業務の効率化に役立つサービスの一覧が見られるページを提供します。また資料ダウンロードのリンクからBOXIL SaaSに移動することで、サービスごとの詳細な資料を取得できます。

実は、カテゴリの一覧ページを検索することは、BOXIL SaaSからもできます。しかし、SaaS製品のカテゴリは年々複雑性を増している中、自分が求める製品のカテゴリがどれなのか分からないといった声が寄せられています。ChatGPTを使うことで、例のように「タイムカードを切るのが面倒だ」という潜在的な悩みがどのカテゴリに属するのか判断する手助けが行えます。

システム概要

実はChatGPTプラグインとして申請に必要なのはドメインだけです。

ただし、そのドメインから次の情報にアクセスできる必要があります。

  1. プラグインの説明が書かれたマニフェスト(ドメイン配下の決められたパスに配置)
  2. OpenAPI形式で記述されたAPI定義書(マニフェストにURLを記載)
  3. ChatGPTから叩きたいAPI(API定義書にエンドポイントを記載)

これにより、ChatGPTはマニフェストやAPI定義書にアクセスし、何をするプラグインなのか、どういう仕様のAPIが置いてあり、どこにAPIを叩きに行けばいいのかを把握できます。

そしてChatGPTがユーザーとの会話の中でAPIを叩くべきだと判断したときに、APIが叩かれるという仕組みです。

詳細は公式ドキュメントに書かれています。気になる方はご参照ください。

platform.openai.com

また、OpenAI公式からはクイックスタートとしてToDoリストのChatGPTプラグインのリポジトリが公開されています。

github.com

今回はChatGPTに叩いてもらうAPIとして次のようなものを作成しました。

リクエスト

{
  "カテゴリ名": "会計"
}

レスポンス

{
  "カテゴリ一覧ページ": {
    "リンク": "<https://boxil.jp/sc-cloud_accounting>",
    "カテゴリ名": "会計ソフト(財務会計)",
    "概要": "会計ソフトでは、会計業務に精通した方から知識が乏しく不安だという方まで、会計(買掛金台帳・売掛金台帳・賃金台帳・試算表・決算資料など)に関わる業務の効率的を実現し、生産性を飛躍的に向上させます。",
    "資料ダウンロードページへのリンク": "<https://boxil.jp/downloads/confirm/?type=category&ids%5B%5D=114>"
  },
  "検索条件": {
    "カテゴリ名": "会計"
  }
}

これにより、ChatGPTはカテゴリ名を入れたリクエストをAPIに投げることで、カテゴリ一覧ページへのリンクや資料ダウンロードページへのリンクをプラグインの利用者に提供できるようになります。

開発にあたっての主な意思決定項目

開発の進め方

ChatGPTプラグインの開発事例は国内でも数件あるのですが、自分たちにのケースに応用できるか不明で、そもそもやりたいことができそうなのか検証するという意味合いが強かったため、エンジニア主導で開発を進めました。

そのため、チームでの意思決定を高速に行うために、デザインドキュメントは必ず書き必要な人にレビューを依頼することで法務との調整やインフラのすり合わせ、申請周りの整備、APIの仕様決めなどをテンポ良く行ないました。

3週間で書いたドキュメントは約50本くらいになります。

先日デザインドキュメントについての記事も執筆したので良かったらご覧ください。

tech.smartcamp.co.jp

開発者申請

開発を進めるにあたって、最初にChatGPTプラグインの開発者申請をする必要があります。

開発者申請が通ったChatGPT Plusのアカウントがなければ、ローカルのAPIや申請前のAPIを登録してChatGPTから叩けるか動作検証することはできないからです。(2023年6月現在)

私たちも、本プロジェクトが始まる際に急いで申請をしましたが、承認されるまでに16日かかりました。(5/30にChatGPT Plugin waitlistに登録、6/16にChatGPT Plugins Developer Accessが承認)

そのため、承認が下りるまでの期間は私の個人的なアカウントで動作確認を行なっていました。

もし開発に乗り出したい方は早めに申請するといいでしょう。

法務周りの対応

法務としては、主にBOXIL SaaSで利用されている情報をChatGPTに提供した際に、個人情報の第三者提供等にあたるかが一番の懸念となりました。

そのため、BOXIL SaaSから口コミ情報などを提供する場合には個人情報をマスクすることにし、現段階では個人情報は提供しないことにしました。

また、マニフェストのlegal_info_urlにはBOXIL SaaSの利用規約を入れることにしました。

インフラ構成

今回は1日でも早く世に出したかったので、BOXIL SaaSで元々運用しているAPIサーバーにChatGPT用のエンドポイントを実装することにしました。ChatGPTプラグイン機能はOpenAPI形式で記述したエンドポイント以外にはアクセスしないため、このような設計でも問題ないと判断しました。

今後アクセス数が伸びればBOXIL SaaS本体とは切り離すことになるかもしれません。

カテゴリ検索APIの開発

リリースできる最低限の機能としてBOXIL SaaSで使われている検索機能をベースに、カテゴリ一覧ページへのリンクが取得できるAPIを作成しました。

今後、一覧ページへのリンクではなく具体的なサービスをChatGPTから提供できるようにする可能性もありますが、今回は見送りました。

私たちは今回のプロジェクトのために結成された急拵えのチームで、普段はBOXIL SaaSの開発とはあまり関わりがありません。

そのため、BOXIL SaaSの開発チームには、実装方針のアドバイスをいただいたり、コードレビューを手伝っていただいたりしました。

その時に、やはり便利だったのはデザインドキュメントです。

これにより、コードレビューを迅速に進め、滞りなく開発を進めることができました。

ChatGPTプラグインのここがすごい3選

ここでは実際に調査・実装する中で分かったことについて紹介します。

プラグインの使用を促してくれる

プラグインを有効にしたら、必ずしもそのAPIをいきなり叩けるような質問を投げかける必要性はありません。

下記画像のように、純粋に困っていることを相談するように話しかけても自然な流れでAPIの利用を促してくれます。

これは私たちがこのChatGPTに求めていた「ユーザーの潜在的な悩みを吸い上げ、具体的なSaaSサービスに紐づける」ことにおいて大きなメリットだなと感じました。

用意したAPI同士の連携ができる

これは実際に実験して分かったのですが、特定のAPIエンドポイントから取得した情報を、別のAPIエンドポイントへの入力として使うことができました。

これにより何が嬉しいのかといいますと、検索のマッチ度の判断をChatGPTに移譲できます。

下記の例では、最初に「タイムカード」というキーワードでAPIが叩かれましたが、該当するカテゴリが見つからなかったために、カテゴリ一覧をChatGPTが取得し、その中から関連の高い「勤怠管理システム」というキーワードで再度APIを叩き直しています。

このようにユーザーの知りたい内容と合致したカテゴリがどれかという判断をAPI内で行わずにChatGPTに移譲できます。

今回、カテゴリ検索のAPIとしてBOXIL SaaS内部の検索ロジックを流用したのですが、カテゴリ検索の部分はデータベースから部分一致するカテゴリを検索するようなロジックになっており、検索ワードが長いと検索に引っかかりませんでした。

そのため、カテゴリ一覧を別のAPIエンドポイントとして用意し、そちらから検索ワードを取得してもらった上で、ChatGPTにどの検索ワードで調べるかの判断を任せるような設計が有効でした。

申請から承認まで最短1日!?

たまたま運が良かったからかもしれませんが、申請した次の日には承認されました。

参考になるかは分かりませんが、公式ドキュメントには明記されてないものの申請するにあたって注意したのは次です。

  1. マニフェストは英語で書く
  2. マニフェストのdescription_for_humanにはJapanという単語を入れる(当該プラグインは国内利用を想定しているため)
  3. 申請項目のプロンプト例は英語で書き、やりとりを繰り返さなくても一度目の返答でAPIが叩かれる

さいごに

スマートキャンプでは「Small Company, Big Business.」というVisionを掲げています。

新卒でもこのような新しい技術を使ったサービス開発を機会をもらえたり、少人数チームが故の機動力の高さでプロジェクトを進めていけるのが魅力だと思います。

今後も新たな技術を活用し、よりユーザーにとってぴったりなサービスを快適に探せるよう取り組んでいきます。

最後まで読んでいただきありがとうございました!