ChatGPTをプロダクト開発にどう活用するか

ここ最近、ChatGPTを始めとしたGenerative AIが急速に発展して、ものすごい勢いで広まっています。特にGPT-4が出てからは、私自身も毎日使うようになり、仕事の進め方がとても変わってきたなと思います。ChatGPT自体の活用方法は本当に多岐にわたると思いますし、私が全てを網羅するのは困難です。また、今後も新しい活用方法がどんどん生まれてくると思います。

そのような中で、この記事ではPMの観点にスコープを絞り、特にGenerative AIを活用したサービス開発において、ChatGPTをどのように活用していくかについて考えてみたいと思います。少しややこしいですが、例えばChatGPTを使ったサービスを考える際に、その開発プロセスの中でどうChatGPTを使うか、もしくはChatGPT自体をサービスの中にどう組み込むのか、ということです。それでは書いていきたいと思います。

設計・開発プロセスにおける活用方法

プロトタイプを自分で作って品質評価する

1つ目は、プロダクトに最適なプロンプトを見つけるために、ChatGPTを使って自分でプロトタイプを作って品質評価するというものです。これはGenerativeAIを使ったサービス開発をする上で、PMにとってとても重要になってくると思います。

GenerativeAIを活用したプロダクトを考える上で、その入力つまりプロンプトの設計はとても重要なプロセスです。プロンプトの設計次第で出力の品質は大きく変わります。少し試すだけであれば、ChatGPTのUI上で試せば事足りるかもしれません。しかし、プロダクトの中でAPIを活用することを考えると、様々な入力に対してどれぐらいの割合で期待するアウトプットが出るかを評価する必要があります。

また、ChatGPTのような大きなモデルはプロンプトの理解力が高く、複雑なプロンプトを正しく処理できるため、動的にプロンプトを構築することが当たり前になります。例えば、チャットボットの開発で外部のデータと連携したボットを作る場合に、外部データベースから取得した内容を動的にプロンプトに挿入して結果を生成する、などです。

そのような複雑化するプロンプトの設計において、UI上でテストをするのはとても時間がかかりますし、様々なパターンのプロンプトを変えて品質を比較するということは現実的ではありません。一方で、試行錯誤の段階でゴールが定まっていない状況の中、毎回開発者の人に頼むも非効率です。

これを解決するために、ChatGPTでコードを書いてプロトタイプを作って評価します。ChatGPTはPythonが得意ということで、私自身も3週間ほど前からPythonでプロトタイプを作るようになりました。それまで1文字をPythonコードが書けなかった私ですが、会話部分のプロトタイプなどは自分で作ることができるようになりました。GPT-4であれば、曖昧なお願いでも驚くほどにそのまま動くコードが出てきます。

自分でプロトタイプを作ることで、プロンプト設計の試行錯誤を非常に高速に行うことができます。さらに何か仕様を変えたい場合でも再現性を持ってテストをしてその品質の良し悪しを評価できます。

評価データを作る

2つ目は、良さげな評価データを作るために使う。そのままですね。これも非常に強力です。

会話AIを例に続けますが、会話の品質評価をする上でテストデータを作ることは本当に苦痛です (私だけかもしれませんが)。例えば、家電量販店の商品をおすすめするチャットボットのケースを考えます。Apexを240fpsでプレイできるおすすめのゲーミングPCは?という質問は考え付くかもしれませんが、ヘアドライヤーに関する質問は全く思い浮かびません。そもそもヘアドライヤーというカテゴリ自体が頭の中に思い浮かばない気もします。

これがChatGPTに頼むといい感じのテストデータを大量に作ってくれます。前項で作ったプロトタイプの入力と同じフォーマットを指定して出力すれば、バッチテストが可能になります。今までは、1時間ぐらい時間をかけて自分のバイアスがかかったテストデータを生み出していたものが、ほどよく多様なテストデータが1分程度で作れます。60分の1です。全くドメイン知識がない分野でも、それなりの品質のテストデータが作れますし、ペルソナを変えて質問の口調を変えたり、いろんなパターンでテストデータが作れます。また、テストデータが足りなければ、もう少し作ってというだけで、それまでとあまりかぶらないテストデータを書き出してくれます。

個人的には最も苦痛だったプロセスなので精神的にもとても楽になり、最高だなと思います。

評価をする

評価データまで自動で作れるのであれば、どこまでも自動化しようということで評価も試してみました。ただしこれの結果は、それなりです。できるところとできないところがはっきりしています。

評価というのは、例えばチャットボットであれば、質問と答えのセットを与えてその解答の精度のスコアとその根拠を出力するというものです。

結果として、文章としての繋がり(Relevancy)や、回答の具体性(Specificity)の判断についてはとても強力です。曖昧な回答や明らかに質問に答えていないものは割と正確にスコアリングできます。一方、当たり前なのですが、事実に基づいているかについては、ChatGPTだけでは信頼性がとても低く、自信をもって嘘をついている場合は高い評価になります。

意外ではない結果ですが、文章としての適切さは少なくとも私がチェックするよりははるかに高精度、一方で事実かどうかについては別のアプローチをとるか人手で確認する必要があります。

プロダクトの機能として組み込む

チャットボットの会話エンジンとして使ったり、文章の生成、校正、翻訳など直接的な使い方も多くあると思いますが、もう少し低レイヤーでの使い方を考えてみたいと思います。一言でいうと、構造化データと自然言語を透過的に処理できるプログラミング言語として非常に強力だと思います。

自然言語や非構造データを構造データに変換する

ChatGPTは構文解析エンジンとして非常に強力です。そのため、ChatGPTを使って自然言語などの非構造データを構造データに変換・抽出できます。これにより、個別のモデルを作る必要性が減り、効率的にデータ処理ができます。例えば、文章から感情を抽出したり、OCRで読み取ったテキストデータから特定の情報を判定する、などです。

いろいろなパターンで試していますが、かなり精度も高いと思います。文章から感情推定するようなケースでもかなり適切に判定しているように思います。また、スコアの出力もできるため、on/offだけでなく、アバターの表情に反映するための"感情の度合い"なども出力できます。そして当然ですが、その出力形式はプロンプトの指定だけで増やすことが可能です。そのため、感情だけでなくその会話コンテキストに適切なモーションのパターンも出力するなど、柔軟に出力情報をカスタマイズすることが可能です。

また、プロンプトに出力フォーマットを正しく指定することで厳格にそのフォーマットに従うため、jsonで出力してそのまま後のロジックに渡すこともできます。そのため、自然文をAPIパラメーターに変換することも可能で、例えば、一番売れているタブレットデバイスを検索する、といった自然文からAPIをコールするパラメーターを作ることができます。これを応用していくと、IFTTTやZapierのようなサービス連携プラットフォームをさらに柔軟に作れるようになると思います。

構文解析の別の例として、OCRから読み取った領収書データに日本円での価格が含まれているか、などのチェックも前処理なしで高い精度でできます。もちろん今までも専用のモデルを作ればできたことですし、特定の用途で非常に高い精度を求めるのであれば、専用のモデルの方が品質的にも、そして何よりもコスト優位性があります。しかしながら、ChatGPTではその解析ルールを自然文で書けるというのが最大の利点です。

そのため、先の領収書のケースであれば、経理の人が自然文でチェックロジックを追加できるようになります。そして、必要に応じて仕様を変えたりできます。今までは、SWエンジニアやMLエンジニアに頼んでいたことが、多くの人がすぐにできるようになることで、追加や変更のコストを限りなくゼロに近づけることができます。普段の言葉で簡単なプログラミングができる、というのは変化に強いサービス、柔軟な業務を実現できる点において非常に大きなポイントだと思います。

構文解析の面白い例として、HuggingGPTという研究?サービス?があります。
https://arxiv.org/pdf/2303.17580.pdf

これは、ユーザーの入力を解析して、HuggingFaceで公開されているどのモデルでどの順番に処理するのかをタスク分解して順番に実行、結果を返すというものです。このサービスは、プロンプトの品質が高いためGPT-3.5で動いていますが、GPT-4であればもっと適当なプロンプトでも正しく処理できたりします。今後はこのようなサービスが増えてくるのではと思います。

構造データを読み取って自然な言葉やアクションに変換する

当然ですが逆もできます。冒頭で少し述べたような、外部データの連携において、取得したデータから適切な応答分を生成する、などです。APIの入出力フォーマットは大体の人にとってはわかりにくいですが、前項の構造化と合わせることで、自然文の入力を構造化し、構造化された方法を従来の方法で処理し、その結果を人が分かりやすい文章に変換して出力するということが可能になります。

前項のような例で感情パラメーターがすでに存在していた場合、それを入力することでその感情パラメーターを加味した出力を生成できますし、ユーザーの属性情報から最適なプッシュメッセージを作ったりすることもできます。今までは、構造データからユーザーにとってわかりやすい表現にするために、仕様を考えて実装してというプロセスを経る必要がありましたが、ChatGPTを使うことでプロンプトを指定するだけで自然な出力を作ることができます。

さらに要素を追加すると、自然な文章を作るというだけでなく自然なアクションを出力するということもできます。例えば、先のプッシュメッセージを発展させて、ユーザーの予定と連携して会話AIから次にしゃべりかけるべきいい感じのタイミングとその内容を生成する、ことを考えます。タイミングを考える上で必要な情報を入力すると、その内容に沿っていい感じのタイミングを出力してくれます。いい感じと書くと適当なイメージですが、本当に自然に見えるタイミングを出力してくれます。頻度やタイミングについてもプロンプトを指定するだけで必ず5分前にするのか、その文脈に沿ったタイミングにするのか、とても柔軟に挙動を変えることができます。

人間にとって自然な情報やアクションと構造化されたデータの変換ができるということは、既存の構造化されたサービス、データを連携させ、人間の入力をフィードバックに加えながら、複数のプロセスを経て結果を生成できることになります。そして、それぞれのプロセスのハブがプロンプトになります。人間の入力も含めたコンポーネントのハブにプロンプトを使うという考え方は、今後のサービスの企画をする上でキーポイントになりそうに思います。

その他、考えること

これまではプラス面のことばかりを書きましたが、当然ことながら注意すべき点も多くあり、使いどころはよく考える必要があります。一般的な内容が多いですが簡単に書いてみます。

情報の取り扱い

OpenAIについては、最近、API経由で利用された場合において学習データとして利用しない旨のアナウンスがありましたが、全体の利用規約をよく確認する必要があります。また、他の選択肢としてMicrosoftのAzure OpenAI Serviceもありますので、ポリシーの違いを理解してどの手段が最適化を考える必要があります。

コスト

GPT-4は高いです。GPT-3.5-turboはそんなに高くないですが、それでも用途によってはまだ高いことがあります。そのため、1クエリのコストに対して、妥当な効果を生むかを考える必要があります。もちろん、将来的に専用のモデルに置き換えることを想定して、先行投資として価値検証のために使うというのもありだと思います。しかし、少なくともまだまだWebAPIのように安価に使えるような状態ではないと思います。

レイテンシ

GPT-4は早くないです。プロンプトの長さにもよりますが、数秒はかかることが多いです(モデルサイズから考えればそれでもとても速いですが。。)
そのため、リアルタイムなインタラクションでそのまま使うとストレスを感じるUXになる可能性があります。もちろん、ChatGPT UIのようにストリーミングで出力したり、応答生成と実際の応答の出力を非同期にする、そもそもバックエンドの処理で使うなど、取りえる手段は多くあります。ただ、一般的なWebのようなレスポンスはまだ期待できないため、レイテンシを意識して取り込み方を考える必要があります。

データの鮮度・固有の情報との連携

これはあらゆるところで述べられていますが最近の情報は学習されていません。そのため新しい情報と連携するためには、そのための実装をする必要があります。公開できる情報のプロバイダーであれば、今後はChatGPT Pluginを使う方法が最適になるように思います。一方、クローズドなユースケースについては、個別に実装する必要があります。すでに多くの実装例がありますが、例えばrinnaの技術を使った場合は以下の記事に記載されています。

その他、いろいろ

それ以外にもGenerative AIをプロダクトに導入するにあたって考えることは多くあります。以前にProduct Tunk Tokyoでプレゼンしたのですが、内容を以下にまとめていただいているので、参考になれば幸いです。

まとめ

ChatGPTをプロダクト開発に活かすというテーマで、特にGenerative AIを使ったプロダクト開発にChatGPTをどう活用していくかを書いてみました。

もちろん、使えるところ、いまいちなところとありますが、使える用途は非常に多いと思います。今回紹介した中では、プロトタイプの開発・評価、構造データと非構造データの相互変換、という用途においてとても強力だと思います。

ただ便利だと思う一方で、その領域を専門にする人はまだ決して超えてないなとも思います。つまり、私が便利だなと思う領域は、その領域で私の能力が低いことを示していますw それはさておき、一般的な言葉ですが、多くの領域でそれなりの能力を持つアシスタントがいると考えると、自分の能力を広い分野で強化できるとても心強い存在だと思います。

ChatGPTの登場によって、自分自身の仕事に仕方も変わり、これまで実現が難しかったアイデアが具体化できそうでとても楽しく感じます。また、いろんな人がこれまでなかったサービスを作っていくことを想像すると、とてもワクワクします。GPT-4が登場してまだ数週間ですが、これからも使い倒して楽しんでいきたいと思います。

(この文章で紹介した内容について、それぞれの具体的なプロンプトをのせるとあまりにも長くなるため、全て省略しました。もし興味がある方がいらっしゃればLinkedInなどで連絡ください!)

この記事が気に入ったらサポートをしてみませんか?