はじめに
今日のデジタル時代において、AIとの対話はもはや日常の一部となりつつあります。特にChatGPTは、私たちのコミュニケーションや情報収集の方法を根本から変える可能性があります。
現状、ChatGPTを活用する上で重要なテクニックとなっているのが「プロンプトエンジニアリング」です。プロンプトとは、ChatGPTに入力する文章のことですが、プロンプトエンジニアリングは、単に命令を与える以上のものです。ChatGPTに対する質問の仕方一つで、得られる応答の質が大きく変わるのです。
プロンプトエンジニアリングとは
プロンプトエンジニアリングとは、AIに対する入力文=プロンプトを、より効果的に構成する技術です。これにより、AIはより正確で有用な回答を提供することが可能になります。
プロンプトエンジニアリングの実例26種類
このブログでは、ChatGPTとのより効果的な対話を実現するための26種類のプロンプトエンジニアリングテクニックに焦点を当てます。
2023年12月26日にarXivに投稿された論文で下記のような26種類のプロンプトエンジニアリングでChatGPTの性能が向上することが示されています。なお画像はTechno edgeさんの記事からお借りしました。
実証実験
このブログでは、論文で紹介されている26種類の異なるテクニックを実践しどれほどの効果があるのか検証します。これらのテクニックを理解し、適切に適用することで、ChatGPTの性能を引き出すことができます。それでは、一緒にこれらのテクニックを活用し、ChatGPTとの対話を次のレベルへと引き上げていきましょう。
2024年1月14日現在、ChatGPTは2つのバージョンを使用できます。すなわち、ChatGPT 3.5(無料版)とChatGPT 4(有料版)が使用できる状態です。今回は敢えて性能の劣るChatGPT 3.5での実証を行います。当然ChatGPT 4でもプロンプトエンジニアリングは必要ですが、無料版のChatGPT3.5の方がプロンプトエンジニアリングの重要性は高くなります。
⓪リファレンス:ベースの回答
「生成AIの概要と、その登場がビジネスに与える影響を短く説明してください」という質問をベースにプロンプトエンジニアリングしていきます。
まずはプロンプトエンジニアリングを意識せず質問します。
使用しているのはChatGPT 3.5ですが、すでにそこそこそれっぽい回答が返ってきていますね。では、プロンプトエンジニアリングするとどのように返答を変えていけるのか見ていきましょう!
①礼儀を省く:「お願いします」などの礼儀用語は不要
ちょっと前に「ChatGPTも丁寧に聞くと人間と同じように気持ちよくやってくれるので性能があがる」なんていう噂話もききましたが、不要な気遣いだったんですかね。やってみましょう。
かなり大袈裟にやってみました。礼儀を重んじすぎている気がしますが、サラリーマンにChatGPTを初めて触ってもらうとこのように書いてしまう気もします。
あまり出力に差はないですね。返答の一行目に「もちろん、生成AIの概要とビジネスへの影響を簡潔に説明いたします。」と追加された程度で、内容自体は似たようなものがでてきました。
②対象者を明示:「専門家向け」など、返答を受け取る対象者をプロンプトに明示。
今度は説明の対象を選ぶことで出力を制限する手法になります。今回はまず「専門家向け」とすることで内容が高度になることを狙いました。
具体的な専門用語が出てきて、ちょっとそれっぽくなりました。影響していますね。
③複雑なタスクの分割:複雑なタスクを簡単なプロンプトに分ける。
今度はタスクを分割するというものです。実際の人間に頼むときも大事な手法です。出始めの頃から言われている「step by step」というキーワードも含めています。
指定したように段階的に答えてくれていますね。この手法は論理性や具体性が高まるため、かなり有効だと思います。
④肯定的指示の使用:否定的な言葉ではなく肯定的な言葉を使用。
「短くして」という指示と「長くしないで」という言葉で比較してみます。
「長くしないで」という言葉はほとんど影響を与えていないですね。「短くして」と確かに肯定的に言った方が良さそうです。しかし…
「長くしないでください」というとしっかり長くしないでくれました。難しい。この項目に関しては気を付ける程度でもいいかもしれないですね。
⑤明確化のための指示:「簡単な言葉で説明して」「中学生にも分かるように説明して」など。
先ほどの対象者と似ていますが、今度は簡単に説明をしてもらいます
簡単にするのはかなり上手ですね。これはかなり利便性が高いです。
⑥報酬の提示:「良い解答には報酬を出す」と示す。
嘘のような本当のTips。報酬を提示されると性能があがるChatGPT。これは結構いろんなところで見る話ですね。非常に人間らしい動きです。さあどうでしょうか。
**で囲っているのは太字ですね。GPTのUI上では太字で表示されています。なんだか頑張っている気がします。内容自体は大きくは変わっていないですが、少し影響ありそうです。
⑦事例を提示:既存の事例を使用。
例を見せることにより出力形式や考え方のニュアンスを汲み取ってもらう手法です。ChatGPT4だとうまく汲み取ってくれますが、ChatGPT3.5では結構きつそう?
意外といけてますね!例示はかなり有効な手法かもしれません。
⑧プロンプトのフォーマット:「###Instruction###」で始め、適宜「###Example###」や「###Question###」を含める。
これはよく使う手法の1つで、###で囲うことで、間の文字を強調することができます。ChatGPTと最も相性がよい指示の仕方の一つです。先ほどの例示の手法とも組み合わせていますね。
形式に関しては完璧に従ってくれていますね。
⑨明確なタスク指示:「あなたのタスクは」と指示。
⑩ペナルティの提示:「ペナルティあり」と伝える。
文字数指定はもともとChatGPTは苦手ですが、ペナルティをつけることで、より指示に近い出力になっていますね。
⑪ 自然言語による回答指示:「自然言語で回答して」と指示。
これはもともと自然言語でのやりとりなのであまり影響はないですね。やりとりの種類によっては少し効果があるかもしれません。
⑫先導的な言葉の使用:「ステップバイステップで考えて」と指示。
これは最も有名なプロンプトエンジニアリングの1つです。ステップバイステップと入れることで、段階的に考えてくれます。これにより具体的で深い話をしてくれることが多くなります。
かなり効果がありますね。現状は特に無料版を使うのであれば必須級のテクニックかなと思います。
⑬偏見の排除:「偏見を持たず、ステレオタイプに依存しない」と指示。
これはちょっと微妙ですね。もう少し色々な立場が存在する議題だと効果があるかもしれません。
⑭ ユーザーとの対話促進:問題解決までモデルに質問させる。
まずChatGPTに質問をさせる方法になります。この質問に答えてから出力をさせることで、出力の方向性を制御することができます。手間はかかりますが、良い方法です。
⑮テストを含む指導:テストを出してもらい、自分の理解度を試す。
双方向的なやりとりとなりいいですね。使い方の一つとしてヒントになるかと思います。
⑯モデルへの役割割り当て:モデルに特定の役割を割り当てる。
⑰デリミターの使用:特定の区切り文字を使用。
⑱繰り返しの使用:特定の単語やフレーズを複数回使用。
⑲思考の連鎖:中間ステップを生成し、事例を組み合わせる。
⑳出力プライマーの使用:期待される出力の始まりでプロンプトを終える。
㉑詳細なテキストの作成指示:「詳細に書いて」と指示。
㉒スタイル変更の防止:「スタイルを変更しない」と指示。
㉓複数ファイル対応のコーディングプロンプト:複数のファイルにまたがるコーディング作業の効率化のために、自動的に新しいファイルを作成し、生成されたコードを適切なファイルに挿入するスクリプトを作成することを提案。
このTipsは趣が違うのでスキップしますが、ChatGPTはファイルを複数同時に投げて処理することができます。その際に、ファイルを新たに生成させながら、処理部分を1つのファイルに集約することで精度があがるようです。
㉔特定の言葉でテキストを続ける:「与えられた言葉で完成させて」と指示。
㉕モデルの要件の明示:コンテンツを制作するためにモデルが守らなければならない要件を、キーワード、規定、ヒント、指示などの形で明示。
㉖サンプルに基づくテキスト作成:提供されたサンプルに基づいて同じ言語で書くよう指示。
結論
26個のTips全て試してみましたが、ちゃんと適用するには慣れが必要ですね。言い回しによって意図しない動作になったりします。また、Tipsの重要性も触ってみてわかってきました。重要性の順位付けについては追って更新していきたいと思います。