既存アルゴリズムの精度改善や新規技術開発を担当する、笹野翔太氏

笹野翔太氏:それでは、「ChatGPT利用サービス開発でわかったAIとの接し方」というタイトルでLTをいたします。ファインディ株式会社で機械学習エンジニアをしています、笹野翔太と申します。よろしくお願いします。

まず簡単な経歴を紹介させていただければなと思うのですが、私は、新卒で食品メーカーに入社をした後、1度目の転職で客先常駐の機械学習エンジニアになり、そちらで自然言語モデルと戯れながら、2度目の転職で現職のファインディに入社をしました。

現在は、既存アルゴリズムの精度改善や新規技術開発を主に担当しています。

ChatGPTを活用して作ったサービス「ChatGPTエンジニアキャリアまとめ(β)」

本題の前に、ChatGPTを活用して作ったサービスの紹介を少しさせてください。

「ChatGPTエンジニアキャリアまとめ(β)」という名前で、2023年3月6日にリリースしました。簡単にお伝えをすると、キャリアをChatGPTにまとめてもらい、さらにそれに二つ名が付くものです。

ちなみに、私の二つ名はスライドに書いてあるものです。

さて、ここから本題になりますが、本日は、先ほど紹介した、キャリアまとめを作るプロンプトができるまでに見つけたTipsについて、効いたプロンプト、効かなかったプロンプト、それぞれ3選ずつ選んできたのでそれについて話をしたいと思います。

ちょっと前後してしまって申し訳ありませんが、(スライドを示して)キャリアまとめの雰囲気はこんな感じで、項目が5つ分かれています。

この5つの項目で出力をするようにして、過去の職歴をはじめとする経歴情報や、これまでの技術力、あるいは外部発信の状況などの情報を基に要約をしています。

効いたプロンプトその1 「人間側のイメージを前提として伝える」

まず、この要約を得る上で効いたプロンプト3選から紹介をしたいと思います。

1つ目は、「人間側のイメージを前提として伝える」です。このように、例を出していますが、「いい感じに要約をしなさい」とただ命令をしても、さっぱりしすぎた要約や的外れな要約しか得られません。

(スライドを示して)このように、全体の文字数や出力形式を明確にすることで、人物紹介、経歴といったフォーマットで、それらしいものを書いてくれるようになります。

もしかすると、頻繁にChatGPTを触っている方はご存じのノウハウかなと思います。

効いたプロンプトその2 「人間がどう感じるのかを指定する」

2つ目、「人間がどう感じるのかを指定する」です。

先ほど同様、フォーマットに従って要約をさせた文章は、おもしろくない文章であることが多いかなと思います。

ここで言う「おもしろくない」とはどういうものかというと、読みごたえがなかったり、その人の経歴のすごさが伝わりにくい文章を指しています。

挙句の果てには、「この文章は経歴の文章なので、おもしろくするべきではありません」なんて答えが返ってくる始末です。ちょっと頭の固いAIだなと思うわけなんですけれども。

そこで、人間がどう感じるのかというところも付け加えた上で、あらためて「おもしろいものにしてください」と試してみると、意外や意外、人間が書いたような経歴のテイストに仕上げてくれるわけです。

このように、人間がどう感じるかを指定することで効率良く狙った出力を引き出すことができます。

効いたプロンプトその3 「リクエストの2度投げ」

3つ目ですね、「リクエストの2度投げ」です。

これは、プロンプトに対する工夫からは少し外れるのですが、プロンプトインジェクション対策という文脈でですね、防御文を貫通して変な語尾に変えられてしまうという問題が、こちらのサービスリリース直後にユーザーからのお問い合わせで発覚したのですが、その時に、どう対応するのかというところで悩んでいた時のものです。

初めは、このように1回のリクエストですべて対応させるプロンプトを考えていて、トークン数とのせめぎ合いなど、どうしたものかという思考だったのですが、その時は、このように私の経歴の語尾に「にゃん!」という、ちょっとポップな語尾が付くといったことがありました。

どうしても思い浮かばないので、ちょっと発想を変えて、リクエストを2つに分けたらうまくいくんじゃないか? ということで、試しに文章の校閲フェーズというものを要約の後に挟んでみました。

そうすると、このように「にゃん!」などの語尾の変更に対応できるようになりました。

この時は2回リクエストを投げているので、その分のコストが余計にかさんでしまいますが、「gpt-3.5-turbo」のAPIであれば、そんなにコストにはならないのかなと思います。

その分ちょっとレイテンシまでの速度は、遅くなってしまうと思いますが、ちょっと悩まれている方がいたら、試していただければと思います。

以上、効いたプロンプト3選ということで紹介いたしました。

効かなかったプロンプトその1 「ホニャララしないで」という「否定」

続いて、効かなかったプロンプト3選を紹介をしていきます。

効かなかったプロンプト3選は、3つのジャンルを用意しました。「否定、強制、抽象」を用意しています。

1つ目、否定というジャンルに代表される、「ホニャララしないで」や「ホニャララはやめて」という命令です。

例えば「書き出しを挨拶で始めないでください」みたいな伝え方をすると、無事に「こんにちは!」と挨拶が付いてしまうわけです。守ってくれないんですね。

そこで、「何々しないで」とか「やめて」という伝え方をするのではなく、「書き出しの挨拶は要りません」という書き方にうまいこと言い変えたりすると、挨拶を書かないというハックがあります。

このように、うまく言い換えることで改善できるので、このへんはアンチパターンになるのかなと思っています。

効かなかったプロンプトその2 「絶対だぞ!?」という「強制」

続きまして、2つ目ですね。強制というジャンルに代表される「絶対」「必ず」などの命令です。

(スライドを示して)このように、「絶対に文章の中に名前を何回も入れるな!」と。「絶対だぞ!?」と「絶対」を何度書いてみても、まず守ってくれないです。このように、次の文章では名前が入っていませんが、その次の文章ではもう1度名前が入って、ちょっと気まぐれなAIとなってしまい、まぁ、守ってくれません。

先ほど同様に、「名前の書き出しは1回だけにしてください」と、具体性を持たせた上で少し言い回しを変えると、無事に名前は最初の1つだけ、最初の文章の先頭に1つだけ、と変えられるというハックです。

効かなかったプロンプトその3 「数値に対する抽象的な表現」

最後に、3つ目ですね。抽象というジャンルに代表される、「数値に対する抽象的な表現」を紹介します。

こちらの例のように、「コントリビューション数:12」と、「『GitHub』のコントリビューション数は大きければ大きいほどいいんだ! わかったな!?」という命令を投げたとします。

そうすると、「わかりました、笹野さんのコントリビューション数は12と、積極的に活動していますね」と言ってもらえます。

これ自体はうれしいのですが、このようにですね、12という数字を積極的に判断してほしくないケースにおいては、勝手に勘違いしてしまうので、これはよろしくありません。この目安となる表現を与えることで、その状況に合わせた解釈をしてほしいなというところになります。

この例のように、同じく「コントリビューション数が12」という数字を与えるわけですが、例えば「下限は0で上限はありませんが、こちら側で抱えているユーザーのデータは、平均ホニャララです」みたいな、閾値を与えてあげます。

このように、「決して活動的とは言い難いかもしれないけれど、今後に期待できそうです」みたいな言い回しに変えてもらえるハックです。

「あれ? ちょっと人にお願いする時と似てない?」

以上、合計6選の知見を紹介しました。このようなかたちで、目指した職務経歴サマリーを達成してきました。

そんな中、私はあることに気がつくわけです。「あれ? 人にお願いする時とちょっと似てない?」

取り組む前は、AIとの会話は、もっと無機質で、適当な文章を投げると適当な応答が返ってくると勝手に想像していました。

実際にやってみたら、目的と前提を明らかにした上でお願いをしないとうまく出力してくれなかったので、大変驚きました。

このように、AIとやり取りをしているはずなのに、まるで人間とやり取りをしているかのような感覚になり、「(自分の)ふだんの人とのやり取り、コミュニケーションは大丈夫かな?」と少し心配になる場面もありました。

ちなみに、今日お伝えしたTipsたちは、OpenAIをはじめとした各所で少しずつ言及されてきており、ある程度効果が認められるTipsになりそうなので、試してもらえればと思います。

「人間の理解とGPTの理解をすり合わせること」が大事

最後、まとめとお気持ちというところです。「人間の理解とGPTの理解をすり合わせること」が、取り組む上では非常に重要だということがわかりました。むちゃ振りをしても、想定する答えは返ってこないし、人と接する時と同じように、心を通わせる必要があるんだなと感じました。

一方で、そうやって心を通わせるのが大事である上で、ChatGPTをはじめとするLLMというのは、あくまでツールなんだなということも再認識しました。

なんでもできるようで、まだ万能ではないんだなという部分と、使い方としてゴールが明確になっている用途の場合は、非常に強力なツールになり得るなと思うので、物は使いようではありませんが、目的を明確にすることが一番大事なのかなと感じました。

最後に、ノウハウが陳腐化する速度が非常に速いところにも驚いています。今日紹介したノウハウは、より高精度なプロンプトやより高精度なモデルの登場によって、その形を少しずつ変えそうだなと予想をなんとなくしています。

ほかの方の発表でもあったとおり、寝て起きたら世界が変わっているかもしれないという、情勢の変化もあるのですが、会社として、また私も含めて、そういった情勢の変化を楽しみながら、このLLMの行く末を見守っていければなと思っています。

ちょっとここからは少し宣伝をさせてもらえればなと思います。

今日話した内容を活かして、また機能をリリースしています。「次はAIとインタビューだ!」と勢いよく書いてあるのですが、AIとインタビューできるような機能を本日のお昼頃(※登壇当時)にリリースをしています。この後共有する資料で、リンクなどを掲載しておくので、ぜひみなさまご覧いただければなと思います。

ご清聴ありがとうございました。