見出し画像

マーケSaaSでChatGPT APIの活用をして分かったこと~確率的視点からのツール設計~

Repro(https://repro.io/ )でカスタマーサクセス(兼 Repro Surveyという新ツールのBizDevチックなこと)を担当している河村と申します。

このnoteでは、マーケティング系SaaSでChatGPT APIの活用をやってみて分かった3つの学びを、自身の振り返りの意味も含め綴っていきます。(プロンプトに関して発信している方は大分増えましたが、プロダクトに実際落としてみて、その経験を発信している方はまだまだ少ないので、あえてそっちの内容を書いてみようと思った節もあります)

このnoteの読者は主に以下の2つをイメージして書いています。
・事業開発・プロダクト設計に携わる方々(toB・C限らず)
・業務上のChatGPTの扱いに悩んでいるマーケターの方々


Repro Surveyの簡単なご紹介

今回の話をするにあたって、まず7/5にリリースした弊社の新ツールについて簡単に紹介させてください!(いきなり自社製品の紹介かよ!と思った方もいらっしゃるかもしれませんが、今回ChatGPT APIを繋ぎこんだツールですので本題の前にどういうことをしたのかご理解頂くために、少しだけ紹介させてください)

この度ReproはRepro Surveyというサーベイツールをリリースしました。
近年Cookie規制やIDFA制限に伴うユーザー像やインサイトの迷霧化が進んでいるデジタルマーケティング業界において、ユーザーが自ら提供するゼロパーティデータへの注目が集まっています。
そして、アンケートはゼロパーティデータを収集するにあたってすぐに思いつく手段ではありますが、目的に沿った対象者・タイミング・内容でアンケートを集めない限りは意味を成しません。
そこで、デジタル上のユーザーをセグメントし適切なタイミングで情報を出すことが出来るツール(ReproWeb/App)を持つ弊社がサーベイツールを出すことに価値があると考えており、今回のリリースに至りました

今回特にお伝えしたいのは、Repro Surveyの機能の一つであるAI連携についてです。
2023年7月現在では、Repro Surveyでは以下のことをAIにより自動化が可能です。
・設問及び選択肢の生成
・回答結果のサマリの生成

設問及び選択肢の生成の様子

アンケートのカテゴリ・目的・対象者を入力すると自動で設問と選択肢を生成します。
個人的には選択肢が設問に合わせてMECEな形で生成されるのは結構マーケターの負担を減らせるのではないかと考えています!

回答サマリの生成の様子

任意の設問にチェックを入れ「サマリ生成」を押すことで、選択された設問と回答結果からサマリを生成します。つまり、組み合わせの数だけサマリを生み出すことが可能です。
設問単体で見たい場合、設問をクロス的に見たい場合などマルチに対応できるため、目的に合わせて柔軟かつクイックに結果を理解することが出来ます。

御覧になって頂いたようなことをChatGPT APIを活用し実現をしております。こういった取り組みを基に学んだことをこの後お伝えいたします。
他にもRepro Surveyにどんな価値があるのかなどは、ホームページをご覧になって頂くかお問い合わせ頂くのが早いと思うので、Repro Surveyのご紹介は本noteではこれくらいにしておきます!

ご興味持っていただけた方は是非ご連絡ください!

ChatGPT APIの活用をしてみて分かったことの共有

私は先ほどご紹介したRepros Surveyで利用しているプロンプトを書いています。
その他にも社内向けにChatGPTの勉強会を開催したり、社外でもChatGPT APIを活用したサービスをリリースしプロンプトを書いていました。
今回は、ChatGPTをはじめとする生成系AIの扱いやツールに組み込む際の考え方・注意点について、私がこの数か月間で感じてきた・学んだことをお伝えしようと思います。
ちなみに、今回はプロンプトのテンプレートなどは記載していません。(プロンプトの情報は既に沢山出回っていますし、正直意味がないパターンも多いと思っています。)
以下の3つのパートに分けてお伝えします。

  1. ChatGPT API活用におけるツール設計の大事な1つのこと

  2. アウトプットの安定性の確保

  3. デリバリー時の落とし穴

①ChatGPT API活用におけるツール設計の大事な1つのこと

ChatGPT APIの活用で一番大事なことは生成されるアウトプットがユーザーの期待に応えうるものか? であると思います、当たり前ですよね。
流行り的にChatGPT APIの活用をしてみた結果まったく使われない機能になった なんてことになったら本末転倒です。
では、アウトプットがユーザーの期待に応えるものになるために、私が大事だと感じた2つの観点をこれからお伝えしようと思います。

その観点とは以下の2つです
・変数という考え方
・影響の大きい変数を見つける

変数という考え方
私はChatGPT APIの活用では、「変数を指定しユーザーが受け取るアウトプットの確率を支配しよう」と考えています。
そもそもChatGPT APIの活用する過程において、手始めにすることはChatGPTがどのようにアウトプットを生成しているかを感覚的でも構わないので理解することです。
私の解釈の粒度で語ってしまいますが、ChatGPTのようなLLM(大規模言語モデル)は変数の値(テキスト情報)によって確率が調整され、アウトプットが決まります。(個人の解釈です、専門的にいうと異なっているかもしれませんがその点はご容赦ください)
よく分からん!という方も多いかと思うのでもう少し説明します。
連想ゲームを思い浮かべてください。

例えば、「赤い食べ物」と言われたら何を思い浮かべますか?
リンゴやパプリカ、唐辛子など色々と思いつきますよね
では続いて「赤くて丸い食べ物」と言われたら何を思い浮かべますか?
りんご、トマト、さくらんぼとかでしょうか?
では「赤くて丸くてリコピンが多く含まれる食べ物」と言われたら何を思い浮かべますか?
トマト以外思いつきますかね?

連想ゲームの例

さて、ここで言いたいことは、変数の中身を指定してあげればあげるほど候補は絞られてくるということです。
ここで言う変数とは、各情報のハコのようなイメージです。
最初は「色」と「カテゴリ」、次は更に「形」、更に「成分」というように変数(ハコ)となっている部分の中身をドンドン埋めることで出てくる回答が絞られています。
ちなみに、当たり前ではありますがこのハコは限りなく無数にあります。
上記の例と似たようなことがChatGPTでは常に行われています。
こちらが入力するテキスト情報が、無数にある変数の値となり、そこから確率的にアウトプットが出されます。

最後の確率という部分についてもう少し言及します。
以下の画像は、特定のテキストを打ち込んだ場合に、その次にどんな単語が来るかの確率をChatGPTに表示させたものです。

「私はReproという会社に属しています」と入力したことに対するアウトプットの確率が表示されています

このようにChatGPTのアウトプットは常にインプット情報から形作られる確率によって決まるものだと考えられます。
この考え方を少し言い換えると、変数を効果的に使えばアウトプットもある程度狙った所に落とせる と解釈できます。
つまり、ChatGPT APIの活用において、変数をうまく使うことでユーザーの期待通りのアウトプットが出やすくすることが出来るわけです。
改めて見ると非常に当たり前のことですが、この変数という考え方を意識するのが第一ステップです。

ここら辺の話は、私はハヤシシュンスケさんの”ゴールシークプロンプト”の動画やnoteを参考にさせて頂いておりますので、気になる方は是非ご覧になってみてください。

影響の大きい変数を見つける
上記ではひとまとめに変数としていましたが、確率に影響を与える変数には、影響度の大小が存在しています。
例えば、プレゼン資料を作ろうとした際、アウトプットへ影響を与える変数として「目的」や「完成期限」など様々ありますが、「どんな場所でプレゼンをするか」よりも、「誰に対するプレゼンか」の方がアウトプットへの影響が大きいですよね。
このように、変数にはアウトプットへの影響の大小があります。
そして、アウトプットに対する影響の大きい変数を見つけ、事前に固定をしておくことが非常に重要です。

もう少し詳しくお伝えします。
話をツール連携の観点に進めましょう。
世の中に沢山ツールはありますが、どんなツールも万能ではないことは間違いありません。
となると連携先ツールは何かしらの目的に特化されたツールなはずです。
今回のRepro Surveyであれば「ゼロパーティデータの取得」を目的としたツールです。
そのツールの目的 はChatGPTのアウトプットのための変数として非常に影響度の高いものです。
そのため、ChatGPT APIを活用する際には予め、このツールは「ゼロパーティデータを取集するためのものですよ」とプロンプトで情報を与えておくと、アウトプットはアンケートに関連したものである確率が高まりますよね。
このような作業を同じように、影響度の大きい変数から順に指定していくことで理想のアウトプットに近づくわけです。

これが私の言う「影響の大きい変数を固定(or 選択)せよ」です。
影響度の大きい変数をある程度裏側で固定しておくことで、ユーザーは期待通りのアウトプットを受け取れる確率が高まります。
更に良いアウトプットを出すためにユーザーにインプットを入力してもらうのも大事です。

ただし、ユーザーに入力してもらうのはフリーテキストに頼りすぎず選択式にできるものは選択式にするのが良いでしょう。
理由は主に2つあります。

  • フリーテキストはユーザーにとって面倒

  • 影響度の高い変数から固定したいが、フリーテキストの場合ユーザーごとのブレが大きくなってしまうため、選択式にすることで一定質の安定性を図ることが出来る

そのためユーザー側のフリーテキストは最小限とし、フリーテキストを行う前である程度変数の値が固定されている状態が理想だと考えています。
ここまで出来るとかなりアウトプットの質が高まり、ユーザーの期待値にミートする可能性が高くなります。

このパートのまとめに入ります。

  • LLMは確率的にアウトプットが変わり、その確率は変数によって変わる

  • 変数には影響度の大小がある

  • 影響度の大きい変数を指定してあげることで期待通りのアウトプットが出やすくなる

  • 影響度の大きい変数は、こちら側が裏側で投げているプロンプトで指定しておく(毎回インプット情報と合わせて投げるなど)か もしくは ユーザーに(出来れば)選択させる

この考え方を持っておくことで、ユーザーが求めるアウトプットを出す確率が高いChatGPT API活用がしやすくなると考えています。

②アウトプットの安定性の確保

実際にChatGPT APIをサービスに活用してみると割と早い段階で当たる壁がアウトプットの安定性です。
一つ前のパートでも述べたように、基本的に確率的にアウトプットが出てくるため出力結果自体が不安定です。
逆に言うと、それ故価値があるのですが、、、ただ、サービスに組み込むという面ではその不安定さが仇になりやすいです。

もう少し理解しやすいように具体の話をします。
そもそも、ChatGPT API活用の大まかな設計は以下のようになることが多いと思います。

  1. サービスのUI上にユーザーがインプット情報を入れる部分を作る

  2. そのインプット情報+システム側で用意しているプロンプトをAPIでChatGPTに投げる

  3. 返ってくるアウトプットの一部または全体をサービスのUI上に表示する

3つ目がどのようにUI上に表示されるかが大きな分かれ目となります。
まず、シンプルに返ってきたアウトプットのテキスト情報をただそのままUI上に返すパターンは、アウトプットの不安定性の影響はあまり大きくありません。もちろんアウトプットが安定しないことによる、確率的な質の低下はありますが、そこはある程度一つ前のパートで記載した内容でカバー出来る範囲です。
もう一つのパターンとして、返ってきたアウトプットの一部もしくは全体をルールベース(システム的に)で拾い、それをUI上に落とし込むパターンです。

具体例を出します。
採用プラットフォームで応募者向けに、いくつか情報を入れるとそれっぽく職務経歴書を埋めてくれるChatGPT API活用を行ったとします。
アウトプットは【経歴】【過去の経験】【スキル/職能】などカテゴリに整理されUI上に整理されます。

この時、API経由でChatGPTから返ってきたアウトプットをシステム的に、UI上に振り分け、表示することが求められます。
そのためには、例えばChatGPTからのアウトプットの時点で「それぞれのカテゴリが分かるように以下のようにアウトプットしてください」「-経歴:○○ -過去の経験:○○ -スキル/職能:○○」
とプロンプトで指示する必要があります。
決まった形で返ってこないとシステム的に拾うのが難しいからです。
(当然正規表現で出来る限り要素を拾う等もできますが限界があります)

ただ、指示したように毎回「-経歴:○○ -過去の経験:○○ -スキル/職能:○○」の形式で返ってくれば、その情報をルールベースで拾ってUI上に載せれるのですが、ChatGPTのアウトプットは不安定なのでそうもいきません。10回に8回は「-経歴」と返ってくるとしてもたまには「・経歴」や「【経歴】」「-職歴」のようなアウトプットもあるわけです。そうするとなかなかシステム的に拾うのが難しくなり、そもそもUI上に何も表示されないということが起こりえます。
このようにChatGPTの不安定性は、ルールベースで決まったアウトプットを返すシステムに対しても不安定性を生む要因にもなるわけです。
これではなかなかサービスとして出すには難しい部分もあります。

さて、そこでChatGPT側の良さを残しつつ安定性を強化する必要があります。
方法は主に2点あります。

1.プロンプトを調整する
2. ChatGPTAPIの機能を利用する

プロンプトを調整する
一番シンプルな考え方で、アウトプットが安定するようにプロンプトを組むということです。
今回は冒頭に記載したようにプロンプト自体に関することはあまり書くつもりはないのでここでは詳細は省略します。
ちなみにですが、私はTwitter等を中心に良いとされるプロンプトを調査しそのプロンプトの要素を応用したり、In-context Learning (ICL)のfew-shot learningのようなより専門的(ぽい)書き方を活用してみたりしてPDCAを回しながらプロンプトを作成しています。

ChatGPTAPIの機能を利用する
どちらかというこちらが本命です。
その機能というのは2023/6/14に公開された「Function Calling」という機能です。
まるっというと、こちらのインプットに応じて予め決めておいた関数の中から何を呼び出すかChatGPTに判断してもらい、指示通りに処理を実行した後に、関数の実行結果と質問を基にもう一度ChatGPTからメッセージを返してもらうような機能です。
詳しくは公式サイトをご確認ください。

よく分からないのでここで重要なことを1つだけピックアップすると、こちらから指定した形でアウトプットが返ってくるようになりました。
つまり、このパートの前段で述べたように、これまではプロンプトで「ハイフンをつけてアウトプットしてください」など半ば無理やりアウトプットの形式を指定させていましたが、その必要がなくなったのです。

プロンプトでの制限はどうしても限界があり、アウトプットの形式にブレが出てしまい、最終的にそれをシステム側が拾えないという課題がありました。
しかし、このFunctionCallingを使うと、こちらから指定した形式でアウトプットが返ってくるようになるので、システム的に拾いやすくなりました。
これはChatGPT APIを既存サービスで活用するうえでは非常に重要なポイントです。
ChatGPTの有能さを残しつつシステム的な安定性を保つことが出来るため、是非積極的に活用してくべきだと思います。

このパートのまとめです。

  • ChatGPTのアウトプットの不安定さは、良さでありChatGPT APIの活用においては難しいポイントの一つとなります

  • 回避方法として最も良いのがFunctionCalling機能です

  • この機能を使うと、こちらが指定した形でアウトプットが返ってくるようになるため、システム的にアウトプットを拾いやすくなります


③デリバリー時の落とし穴

デリバリー時の落とし穴、それはズバリ「ユーザーの過剰な期待」です。

リリース以前のユーザーヒアリングで気づいたのですが、どうやら”AI”というワードが入っているだけでユーザーの期待値は高いのです。
例えば、ChatGPTが出てきたとき皆「なんでもできる」ように感じ、超話題になりましたが、実際まだ日常的に利用している人はどれくらいいるでしょうか?恐らくピーク時の半分以下とかではないでしょうか笑

これは、色々な要因があると思いますが、大きな要因として、皆の期待値とChatGPTのアウトプットの質に差分があったからだと思います。
もっというと皆が思い描くほどのアウトプットを出せるほど、皆がChatGPTを扱い切れていなかった ということだと思います。
ただこれは、扱い切れなかった点というより、期待値の大きさの要因が大きいと思っています。
AIって言われるとなんかすごい色々自動でやってくれて、自分の思い浮かべてくれることを完璧にやってくれる存在のように感じる人が多いわけです。(SF映画とかの影響ですかね?)
ただ実際は”現状は”そんなことも出来るわけがなく、離脱してしまう人が多いです。

この現象は、ChatGPT APIを活用したサービスでも同様のことが起きうるわけです。
ChatGPT APIを活用して、○○が自動化出来るようになりました!とプレスリリースなどを打つわけですが、どんなにプロンプトなどを良くしようとユーザーが求めているアウトプットを毎回100点で返すなんてことは不可能です。
よくて、60点~70点程度ではないでしょうか。
しかし、ユーザーは80,90,100点レベルを求めているわけです。
すると、ChatGPT初期と同じように「なんだこの機能使えないわ、いらないな」と思われ一部の人しか利用しない、もしくは全く利用されない機能が爆誕してしまう可能性があるわけです。

そうならないためには、アウトプットの確率性のカバーをすることが重要だと考えています。要は期待値調整です。これは通常のサービスや機能以上に必要になってくると思っています。
このnoteで何度も述べている確率的に出てくるアウトプット という話ですが、やはりブレがあることはユーザーに分かるようにしておいた方が良いと考えています。

アウトプットの質が低い場合を想定して
「期待通りのアウトプットが出ない場合、もう一度試してみてください」

上手くシステム側でChatGPTのアウトプットを拾えずUIに反映されない場合を想定して
「画面に何も表示されない場合、もう一度試してみてください」

何度も言うように確率によって支配されているため、当たりが出るまで回してもらうような誘導が重要です。
人間、1回やってみて期待通りでなかった場合、全く使わなくなるなんて話はよくあります。確率的に悪い体験が出た時のカバーは出来る限りしてあげるべきだと思います。

その他にも、アウトプットに時間がかかる場合は「表示に1,2分ほど時間がかかる場合があります」とローディング中表示するなど、細かい期待値調整はサービスによって色々あるかと思います。
そして、期待値調整と同時に、(私が言うまでもないですが)ユーザーにとってどういったアウトプットが出てくるのが喜ばしいのかを追及し、そういったアウトプットが出てくるよう確率を高める努力が何より大事だと考えています。
そのためにも定期的なフィードバックの回収や利用状況の確認、プロンプトの改善は継続的に行っていくべきでしょう。

このパートのまとめです

  • AIに対して多くのユーザーは過剰な期待を寄せている

  • アウトプットの質を高める努力と(通常以上に)期待値調整の両方を行う必要がある


最後に

以上、私がChatGPT APIをサービスで活用する中で学んだことの共有でした。
皆さんにとって少しでもタメになれば幸いです。引き続き、サービスの改善には取り組んでいくので、また学びがあれば積極的にシェアしていこうと思っています!もし、ご興味持っていただけた方はフォローの方お願いします。(本noteがデビュー作なので、スキ・シェア・フォローしてくると凄い喜びます!)

最後に(完全に宣伝ですが笑)、私の所属しているRepro株式会社のGrowthMarketingチームはポジション大募集中でございます。

GrowthMarketerとしてクライアント様のサービス改善に取り組む一方で、私のように新規事業への道も開けているポジションとなっています。私は有難いことに新卒2年目にして既に様々な経験をさせて頂いており、日々成長を感じられるような状況です。
そんなエキサイティングなチームにご興味ある方がいらっしゃいましたら、弊社ホームページから申込や私に直接でも構いませんので、ご連絡いただけますと幸いです!!
https://herp.careers/v1/repro/SulTFcp9drUH

それでは、最後まで読んで頂きありがとうございました!


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