ChatGPTをより効率的に活用する方法ープロンプトエンジニアリング

こんにちは。システム開発一部の朴です。 

ChatGPTが世の中に公開されたから約1年が経ちまして、日常生活にすみずみと染み込んでいることがますます感じる毎日です。その中で、今回はChatGPTをより効率的に活用する方法の、プロンプトエンジニアリングについて話してみたいと思います。

 

 

Purdue大学で実施したChatGPTに関する最近の研究によりますと、Stack Overflow*1(以降SOと称します)に実際存在する517個のコーディング質問をChatGPTに投げた時に、52%の場合は不正確か、動作できないコードを答えとして提供したということでした。

*2

このグラフではSOの答えとChatGPTの答えを比較していますが、ChatGPTはSOより、正確性、網羅性、簡潔性、有用性の四つの項目で低い点数を記録したそうです。

他の問題としては、答えが半分だけ合ったり、完全に間違ったにもかかわらず、自信を持った言葉で説得力のある答えを作り上げたことが分かったことです。

たまに、ChatGPTはまるで幻を見ているように何かを作り上げるため、ChatGPTが出す全ての答えを信用することはできなく、質問をする際にある程度、質問について理解をしていないと、ChatGPTが出した答えを評価できないので注意が必要というのが、論文の結論でした。

ということで、検索をうまくしないと良質な検索結果が得られないグーグルのように、ChatGPTもより効率的な、正確な答えを得られるためには、ChatGPTに効率的に質問をする方法を身に付ける必要性があることに注目されました。

*3

Vanderbilt大学の計算機工学者たちが実施したChatGPTからより良い答えを得られると立証された、様々なプロンプトのパターンが含まれた論文を発表しました。この論文にはChatGPTから最良な結果を得られるプロンプトのパターンを紹介しています。

ペルソナパターン
Persona Pattern

このパターンを使うと、ChatGPTが作り上げる答えの種類や、集中してほしい細かい事項について案内することができます。このパターンを使うと、特定な観点や見解を一貫して貫くようにChatGPTをカスタマイズできると言われています。

例としてソースコードをレビューしたい場合は、ChatGPT次のように聞きます。

あなたは、グーグルのシニアエンジニアです。セキュリティー観点で次のソースコードをレビューしてください。シニアエンジニアとしてのソースコードも提供してください。

このパターンを使うと、ChatGPTがより良い結果を出すために、集中する対象を絞ることができる。このパターンを使うと、確実にChatGPTの答えの品質が向上し、質問者が投げた質問のテーマだけにChatGPTが語ることができるといわれています。

レシピパターン
Recipe Pattern

このパターンは達成したい目標があり、材料も知っていて、達成するための手順もある程度分かっているが、これらを全てまとめるのが分からない場合に役に立つといわれています。

このパターンは特にプログラマたちに役に立って、多くの時間を節約することができ、ソースコードを理解するのにとても役に立つといわれています。

データを暗号化するJavaプログラムを作ろうとしています。私は引数を読んで、バリデーションチェックを実施し、暗号化し、暗号化したデータを返すことが必要なのを分かっています。このプログラムが動作するために必要な全体的な流れと、漏れている個所があれば詰めて、不要なところがないか教えてください。

「漏れている個所があれば詰めてください」という文章は、特に我々が漏れている個所があっても、後続の質問をしないでChatGPTが補うことができますし、「不要なところがないか教えてください」という文章は、よりよいレシピを作るためにChatGPTを不正確な部分を見つけるよう指示することができるため、役に立つといわれています。

反射パターン
Reflection Pattern

このパターンは全ての答えについて理由を説明するようChatGPTに指示することができます。

これは答えをよりスムーズに理解するのに役に立って、ChatGPTが幻を見て間違った答えを出すことを防ぐこができます。

答えする際には、その答えの根拠と、仮定を説明してください。選定した答えについて潜在している制限事項や、代表的なケースを説明してください。

このパターンを使うと、答えがより詳細になり、ChatGPTが答えについての背景情報を普段よりより多く提供するといわれています。

拒否遮断パターン
Refusal Breaker Pattern

このパターンは知識制限、安全などの理由でChatGPTが答えられない場合に役に立つパターンです。聞きたい質問の文章を変えたり、再構成してChatGPTから応えられるように誘導するパターンとなります。

質問に答えられない理由を説明してください。答え出来る質問の代替表現を一つ以上提供してください。

この文章で、ChatGPTが答えられない場合は、本来の質問に代替できる質問がいくつか表示され、結果的にはChatGPTから答えを得られるといわれています。

ひっくり返した相互作用パターン
Flipped Interaction Pattern

Free Vector | Social interaction concept illustration

たまにChatGPTに質問する時に、質問をどう構成して、どれだけ必要な情報をあげればよいか悩んだことありませんか?その時にこのパターンはとても役になります。

このパターンはスクリプトをひっくり返して、我々がほしいものを得られるようにChatGPTが我々に聞くように指示することができます。欲しい結果が分かっているけど、その目標を達成するための手順が分からなかったり、その目標を達成するためにChatGPTがどの情報を必要とするかを分からない場合に役に立つといわれています。

AWSにあるウェブサーバーにJavaのアプリをデプロイする方法について私に質問してください。必要な全ての情報を得たらデプロイを自動化するスクリプトを作成してください。

このクェリを投げますと、ChatGPTからユーザーに必要な情報について色々聞いてきます。我々がすることとしては、聞かれた質問に答えるだけで、JavaのアプリをAWSに自動的にデプロイできるスクリプトを得られることができます。もちろん、会社の情報だと絶対禁止ですが、個人用だととても有益だなと思いました。

このパターンは必要な情報と手順などを我々がChatGPTに聞く前に調べるより、とても便利で、我々が会話をリードする代わりに、ChatGPTが会話をリードするようにして、可能な限り少ないメッセージと、相互作用で必要な情報を的確に得られることができるといわれています。

 

まとめ

今まで様々なプロンプトパターンについて、紹介させていただきました。ChatGPTに興味ある方がいましたら、ぜひお試し下さい!ご参考になれば何よりです。弊社でも最近、ChatGPTを用いた業務改善に力を注いでいます。今回学んだ色々なプロンプトパターンを活用していきたいと思います。

では、また!

 

*1:世界大規模の開発者コミュニティ

*2:Who Answers It Better? An In-Depth Analysis of ChatGPT and Stack Overflow Answers to Software Engineering Qestions - Purdue Universityにより

*3:A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT - Vanderbilt University より