ChatGPTのAPIを活用して「AI組織改善アドバイザー(β)」機能を開発

梅原穂高氏:では「『AI組織改善アドバイザー(β)』開発の裏側と実装の工夫」ということでLTを始めます。よろしくお願いします。

始めに簡単に自己紹介します。リンクアンドモチベーションの梅原と申します。僕は、プロダクトマネージャーからエンジニアになるという、ちょっと変わったキャリアを歩んできています。

弊社についても簡単に紹介をいたします。弊社は創業以来、組織人事領域でコンサルティング事業を展開しています。現在は「モチベーションクラウド」という組織の診断や改善を支援するプロダクトを提供しています。

今回お話しするのは(スライド示して)こちらですね。先日プレスも出したのですが、このモチベーションクラウド上に実装した「AI組織改善アドバイザー(β)」という機能で、こちらはChatGPTのAPIを活用して弊社独自のナレッジを基に組織改善のアドバイスをするという機能です。今回は、この機能開発を通じて得られた気づきをお話できればいいかなと思っています。

開発を通じて一番大事だと思ったのは「Unlearn」

実際にこのGPTを使った開発を通じて学んだことというか、一番大事だなと思ったことを一言で表すと、「Unlearn」です。とにかく劇的なUnlearnが求められているなとすごく感じています。このLLMやGPTというものが普及する前と後で、プロダクトのいろいろな開発の前提が変わってくるなと感じています。

今までの常識だけで考えていると、適用できなくなってくるものがあるかなと。なので今日は、実際にこの開発を通じてどんなUnlearnが必要と感じたかを、だいたい3つほどの実体験ベースでお話できればいいかなと思っています。

構造化データを前提とした要件→非構造化データと自然言語処理を活用する要件

さっそく1つ目ですね。「After GPTのUnlearnその1」というところで、今までだと機能開発をする時に、(スライドを示して)この構造化データというものを大前提にしていたかなと。わりと僕の頭の中は、いつもRDSに囚われているんですけど。After GPTの世界において言うと、構造化されていないデータだったり、先ほど広木さんがおっしゃった自然言語処理みたいなものは当たり前のようにプロダクトに組み込まれないといけないという世界になってきているかなと。

一例として、今回開発した機能の仕組みをちょっと簡単にお話しします。ベースは、LangChainというライブラリのRetrievalQAというものを使っています。この自社のナレッジを事前にVectorstoreに格納しておいて、ユーザーから入力があったらそれをSimilarity SearchでVectorstoreに対して検索をかけて、ユーザーの入力と、この検索結果を組み合わせてLLMに回答を生成してもらっています。

これは何がすごいのかというと、単純にドキュメントの内容を回答するだけではなく、このドキュメントの情報を使って、検索結果を使って推論ができるというのがメチャクチャ優れているなと思います。(スライドを示して)このLangChainのデフォルトで実装されているプロンプトなどを見てもらうと、どういうことが起きているかがわかりやすいかなと思います。

要は、「Vectorstoreからの検索結果を活用して質問に答えてください」というプロンプトが作られているんですね。ChatGPTでも回答例を渡してから質問すると、回答の精度が上がるというのがあると思います。

弊社には、テキストベースで構造化されていないナレッジがたくさんあって、今までこれをプロダクトに組み込むのはメチャクチャ難しいなとずっと考えていたんですよ。

ただ、このLLMの普及によって、Vectorstoreからの検索結果をベースに回答を推論してもらうことで、意外と実用性のあるかたちで簡単にプロダクトに組み込めるようになってきました。なので、機能開発の要件を考え始める前提が変わってきているなとすごく感じています。

明示的なデータやロジックの設計→暗黙の前提を言語化して出力をコントロール

次ですね。「After GPTのUnlearnその2」というところで、今まで開発をする時は、明示的なデータやロジックの設計をするのがわりと当たり前だったのかなと思っています。ただ、このGPTを使うと、ロジックの設計をするというよりは、前提となっているものを言語化して自然言語で出力をコントロールしていかないといけません。

いわゆるプロンプトエンジニアリングと呼ばれるようなものに近いところです。メチャクチャありきたりな例を出すと、例えば「ChatGPTって何ですか?」を説明してもらうのにも、ただ聞くのとエンジニア以外にもわかるように教えてくださいだと、回答の結果がかなり変わります。

今開発中のものなので、ちょっと資料に載せられなかったのですが、360度サーベイの結果を基にユーザーにフィードバックするというプロンプトを今作っています。そのプロンプトだと、「この人はまわりの人にすごく好意的に思われています」という一文を入れるか入れないかで、そのフィードバックの質がすごく変わるという、そういうのもあったりします。

ほかにはバリデーションみたいなところですね。今までバリデーションをがんばって設計していましたが、自然言語で「こういうのはやらないでね」と渡すだけでバリデーションができたりします。

(スライドを示して)これは実際に、今回実装しているプロンプトの一部をちょっと抜き出して持ってきたものです。例えば「政治とか宗教に関することは答えないでください」と入れておくと、実際に「政策について教えてください」という質問をした時も「お答えすることができません」というかたちでバリデーションがうまく実装できるようになっています。

テストケースを作成して網羅的にテスト→自然言語データに基づくランダムテスト

最後ですね。「Unlearnその3」というところで、テストのフェーズについて。一定のロジックや構造化データをベースに作っている場合、網羅的なテストケースを作成するというのが基本的な考え方だったと思いますが、GPTを活用すると、ロジック自体がブラックボックスになっているので、今までの感覚でテストケースを作ってテストするというのが通用しなくなってくるかなと(思います)。

代わりとして自然言語データに基づくランダムテストということで、いろいろなパターンの質問を想定してテストを行うというのが必要になってきます。

実際に今回どんなテストを行ったかというと、バリデーションが効いているかどうかはわからず不安になったので、みんなで不適切と思われる質問をいろいろ考えて実装した機能にひたすら投げてみました。あまりに過激な質問がたくさん出てきたので一部しか載せられませんが、こんなことをやりました。

振り返ると、(ここは)僕らがプロセス自体をUnlearnできなかったなと思うポイントの1つです。このランダムテスト自体、GPTが一番得意とする領域なので、このランダムテストをGPTに作ってもらい、さらにそれを開発した機能に対してテストするというのを繰り返すというプロセスでアップデートできていくといいかなと感じています。

今後Unlearnしなければいけないこと

今後、もっとこんなところでUnlearnしなきゃいけないなと思っているところでいうと、今までプロダクトでやるのが難しいなと思っていたことを全部見直していかないといけないなと強く感じています。「ここは人がサポートしないといけないな」とか「ユーザーに入力してもらわないといけないかな」と思っていた部分がわりと簡単に実現できるようになっているので、ゼロベースで全部見直ししていきます。

ほかにも構造化されていないデータや、自然言語データの活用幅が一気に広がっていくので、データの取り方などを見直していかないといけないのかなということもこの開発を通して気づいたところです。

これまでの非常識が明日の常識になるかもしれない時代が到来

最後にまとめです。今はLLMの普及など爆発的なスピードで技術が進歩しているので、明日朝起きたらまた新しいことができるようになっているかもしれない世界です。なのでUnlearnしながら新しいベストプラクティスをみんなで探していけるといいかなと思っています。

最後にちょっとだけ告知をさせてください。このあともChatGPT関連のいくつかのイベントに弊社のメンバーが登壇をします。1つは「ChatGPT×カスタマーサクセス」で、もう1つはこのあと登壇されるファインディさんのイベントで「ChatGPT×エンジニアの組織づくり」というテーマで登壇します。興味がある方もいたら、こちらもぜひ参加をお願いします。自分の発表は以上です。ありがとうございます。