【必見】Open AIのChatGPTを使いこなす6つのステップ(公式の見解だよ)
こんにちは!生成AIプロンプトデザイナーのヒロです!
>>>自己紹介記事はこちら
生成AIのサービスを提供している代表的な企業は4つあり、それぞれの企業で異なる生成AIを提供しています。
【生成AIを提供している代表的な会社】
1:Open AI = ChatGPT(チャットジーピーティー)
2:Microsoft = Copilot(コパイロット)
3:Google = Gemini(ジェミニ)
4:Anthropic = Claude(クロード)
このように、それぞれの会社が似たようでいて異なるサービスを展開しているわけなのですが、それぞれが公式ドキュメントとしてプロンプトの使い方を提供してくれています。
各社それぞれで、提供はしてくれているのですが、大体はこれまで僕がお話ししたことと同じことを言っていたり、各社の内容をまとめると共通しているものがあったりと使い方としては各社共通のものになっています。
また公式が発表することが全て正しいというわけではないということもあります。
けれども生成AIを使いこなす上で、こうした公式が提供するドキュメントは一つ頭の中に入れておくことが大事かと思いますし意味があると考えています。
そこで今回は公式ドキュメントとして生成AIにどのようにプロンプトを与えていけばいいのかの見解を記していきたいと思います。
全てを一つのページに収めるととても長くなってしまう可能性があるので(笑)今回はOpen AIのChatGPTの公式ドキュメントについて解説していきます。
ChatGPTの使い方【公式の見解】
Open AIが提供するプロンプトエンジニアリングの公式の見解については下記で見ることができます。
【Prompt engineering】
https://platform.openai.com/docs/guides/prompt-engineering/six-strategies-for-getting-better-results
【Best practices for prompt engineering with the OpenAI API】(ヘルプページ)
https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-the-openai-api
全て英語なので英語が苦手な人には、何を言っているのかわからないかと思いますが、今回ポイントを解説していきますので中身については僕の解説を読んでいただければ完璧です(ちなみに僕もところどころわからないところがあり翻訳に頼りました(笑))。
けれども、どうしても原文を読みたい、確認したいという人は上記のURLから読み込んでいただければと思います。
・・・ここで解説することと同じことになりますけど(笑)
もしも自分の力で読みたいという方がいれば翻訳サービスで有名なDeepL(ディープエル)などを活用していただいてもいいですしGoogleの提供するGemini(ジェミニ)を使って翻訳してもらってもいいと思います。
【Gemini】
https://gemini.google.com/app
【DeepL】
https://www.deepl.com/ja/translator
それか手っ取り早く済ませたい方はGoogle Chromeで日本語変換してみてください。
一発で全文が日本語表示されるのでサクッと読み進めることができます。
【ポイントは6つ】Open AIが公式で提供するChatGPTの使い方
ポイントは6つです。
1:明確な指示を書く
2:参照テキストを提供する
3:複雑なタスクをより単純なサブタスクに分割する
4:モデルに「考える」時間を与える
5:外部ツールを使用する
6:変更を体系的にテストする
以上の6つです。
1:明確な指示を書く
「明確な指示」は、やはり公式の見解でもプロンプトのポイントであると提示しています。
じゃあ明確な指示とはどんなものかというと
・より関連性の高い回答を得るために、クエリに詳細を含める
・モデルにペルソナを採用するよう依頼する
・区切り文字を使用して、入力の異なる部分を明確に示す
・タスクを完了するために必要な手順を指定します
・例を挙げる
・出力の希望の長さを指定します
以上の6つが公式のいう「明確な指示」です。
一つ一つ説明すると長くはなりますが、要するに「具体的に指示を投げろ」ということです。
この辺りは他人(部下)に指示を出す時と全く一緒です(笑)
より明確に、そして役割を与えて、マークダウンなどを使用してわかりやすく(相手がわかりやすく理解しやすい言語で指示をする)、必要な手順を明示して、例を挙げ、どれくらいの長さで出力して欲しいのかを提示すること。
これがOpen AIが公式で提供する明確な指示の意味するところです。
2:参照テキストを提供する
ポイントは2つです。
1:参照テキストを使用してモデルに回答するよう指示する
2:モデルに参考文献からの引用で回答するよう指示する
つまり指示をするにあたって「ヒントを与えてね」ということです。
参照テキストとして、ChatGPTに具体的なヒントを与えることで、より精度の高い回答が得られやすくなると公式の見解として提供しています(この辺りも僕の過去の記事を読んでいただければ書いてあります)。
例えば「### 出力例」や「### ヒント」のようなコンポーネントを使ってヒントを与える。事前に参考にして欲しい情報を与える。
これらをすることで、ChatGPTはより自分に与えられた命令を理解しやすくなり、出力しやすくなるということです。
3:複雑なタスクをより単純なサブタスクに分割する
ポイントは3つです。
・意図分類を使用して、ユーザークエリに最も関連性の高い指示を特定します。
・非常に長い会話を必要とする対話アプリケーションの場合、以前の対話を要約またはフィルタリングします
・長い文書を部分的に要約し、再帰的に完全な要約を構築する
ここでは難しいことを言っているようですが、シンプルに翻訳すれば
指示する内容は分解して、関連性の高い言葉で指示をする
指示は長くすぎると忘れてしまう
と言ったことです。
要するに具体的、かつ明確に、そして明朗にはっきりとした指示を出してね。
文章が長いと指示を忘れてしまうよ。
というようなあたりでしょうか。
4:モデルに「考える」時間を与える
ここについてはポイントは4つ。
・結論を急ぐ前に、モデルに独自の解決策を導き出すよう指示する
・モデルの推論プロセスを隠すために、内なる独白や一連のクエリを使用する
・前回のパスで何か見逃したかどうかをモデルに尋ねる
僕はChatGPTは「純粋無垢なアインシュタイン」と例えることが多いのですが、考え方とかそこにたどり着くまでのステップなどを指示しないと一直線に答えを叩き出そうとします。
脇目も振らずにその目的地に向かって走っていってしまうんですね。
だから途中経過をすっ飛ばしていきなりゴールに辿り着いちゃうこともあって、それがいい方向に働けばいいのですが、悪い方向に働くことも多いのです。
そして、最悪、嘘をつきます(笑)頑張って、頑張って答えようとして、自らが辻褄を合わせて作り上げる「ハルシネーション(幻覚)」を起こしてしまうんです。
このように本来必要な一旦立ち止まって「考える」ことをせずに目的地にひたすら向かってしまうので、それがネガティブに働くことがあります。
そこで「ステップバイステップで考えて(いわゆるCoTプロンプト)」や「深呼吸をして(いわゆるエモーションプロンプト)」などの指示を与えると、立ち止まって考えてもらえるようになります。
複雑なタスクは特にそうなのですが、きちんと「考える」という時間やステップを与えることはかなり大事で、この指示を与えてあげることで「考えていいんだ、確かめていいんだ、ユーザーに確認していいんだ」と理解でき、ChatGPTをコントロールできるようになります。
何度もいうようにChatGPTは「純粋無垢なアインシュタイン」なので、細かく指示をしないとこちらの意図を汲み取ってもらえず、物事をストレートに捉えてしまい、鬼滅の刃の猪之助のように猪突猛進で突き進んでいってしまうのです・・・。
5:外部ツールを使用する
ポイントは3つです。
・埋め込みベースの検索を使用して効率的な知識検索を実装する
・コード実行を使用して、より正確な計算を実行したり、外部APIを呼び出したりします。
・モデルに特定の機能へのアクセス権を与える
例えばChatGPTに「この外部ツールを使ってもいいよ」と具体的に指示を出すと「あっ外部ツール使ってもいいんだ」と理解するようになります。
何度もいうようにChatGPTは「純粋無垢なアインシュタイン」なので指示されたことに従順すぎるが故に、自分の頭の中だけでタスクを処理しようとします。
そこでタスクを処理できないとわかると勝手に捏造してしまうんですね(笑)
それを防ぐために、例えば「ブラウジングしてもいいよ」などの指示を与えることで「ブラウジングしてもいいんだ」と理解できるので、外部ツールを使いながら考えてくれるようになります。
6:変更を体系的にテストする
これは評価を行うということなのですが、評価の方法を話していくとかなり長くなり過ぎてしまうし、一般的に使う分には関係ないと思われる部分が多いため端折ります。
【ポイントは9つ】Open AIが公式のヘルプページで提供するChatGPTの使い方
続いて、より理解を深めるためにOpen AIが公式のヘルプページに書かれている内容も書いていきます。
9つあります。
1:最新モデルを使用する
2:指示をプロンプトの先頭に置き、### または """ を使用して指示とコンテキストを区切る
3:望ましい状況、結果、長さ、形式、スタイルなどについて、できるだけ具体的に、詳細に記述する。
4:例を挙げて望ましい出力形式を明確にする
5:ゼロショットから始めて、次に数ショットを試し、どちらもうまくいかなかったら微調整する
6:曖昧な説明や不正確な説明を減らす
7:何をしてはいけないかと言うのではなく、代わりに何をすべきかを言う
8:コード生成の特定 - 「リーディングワード」を使用してモデルを特定のパターンに誘導する
9:何でも生成機能を使う
以上9つです。
1:最新モデルを使用する
これは言わずもがな、新しいモデルを使ってくださいねということです。
2:指示をプロンプトの先頭に置き、### または """ を使用して指示とコンテキストを区切る
指示は必ずプロンプトの先頭においてくださいとあります。
これはChatGPTを含む大規模言語モデルの性質に関係しています。
大規模言語モデル(LLM)には「はじめ」に書かれた内容と「最後」に書かれた内容を
・覚えやすい
・記憶に残りやすい
・理解しやすい
という性質を持っています(これらは数々の大規模言語モデルに関する論文でも証明されています)。
そのため、プロンプト(命令文)の最初の部分に大事なことを言ってくださいねということが大事だということです。
またこれが「指示だよ」とわかりやすく伝える必要があるのですが、シンプルなものは伝わりやすいものの複雑になってくるとどれが指示だかわからなくなります。
そのため「### 指示:」などのコンポーネントを使って、これが指示だよ、ここまでが指示だよと伝える必要がある・・・といううわけです。
3:望ましい状況、結果、長さ、形式、スタイルなどについて、できるだけ具体的に、詳細に記述する。
つまりは、具体的に指示を出すとはどういうことかということについて触れています。
どのような出力結果が望ましいのか、何を生成して欲しいのか、文章なら長さはどれくらいか?出力形式は何か?スタイル(雰囲気)はどんな形かなどを細かく指示してねということです。
これらはシンプルかつ、明確でいて、明朗であることが大事で、ChatGPTは忖度しませんので、人間に伝えるようなフワッとした指示だと、そのままの意味で受け取ってしまい誤解を招いてしまうことがあります。
なのでハッキリと具体的に示してねということを言っています。
4:例を挙げて望ましい出力形式を明確にする
これは「### 出力形式:」や「### ヒント:」と言った形でコンポーネントに分けて、望ましい形(出力のされ方)はどんなものかを指示してねということです。
例を挙げると、その通りの形式で出力してくれます。
例を挙げることでChatGPTが、「こんな形で出力して欲しいんだ」と理解してくれるので、その通りに出力してくれるようになります。
例えばJSON形式でといえばその通りに動いてくれますし、マークダウン形式でといえばその通りに動いてくれます。
また500文字でといえば、500文字に近い形でまとめてくれたりもします(ただ誤差は大きいです。500文字と指定しているのに200文字程度で出力されてしまうこともあります)。
5:ゼロショットから始めて、次に数ショットを試し、どちらもうまくいかなかったら微調整する
これはChatGPTに準備をさせるということです。
これは事前に学習させるInformation Retrieval(情報検索)やGenerated Knowledge Prompting(知識生成プロンプティング)に近い形になるのですが、より大きな概念から出発させて、何についての質問なのかを理解させてから本題に入っていくというやり方です。
本題に入る前に、あまり長過ぎてもいけないのですが(長すぎると忘れてしまうので)、それについて広い部分から入りどんどん論を深めていくような形です。
ゼロショット(ヒントを与えない)から始めて、フューショット(複数のヒントを与える)など工夫してやってみてねということです。
また、余談ですが、新しいセッション(スレッド)になったらChatGPTは基本的に何も記憶していないまっさらな状態になります(笑)
なので「新しいチャット」になったらまた1から説明しなければなりません。
6:曖昧な説明や不正確な説明を減らす
曖昧な説明では伝わらないよ、はっきりと指示を出してねということです。
また正確に入力してねということです。
7:何をしてはいけないかと言うのではなく、代わりに何をすべきかを言う
ChatGPTを含む言語モデルでは、面白いことにネガティブなことではなくポジティブな表現で指示をした方が、出力精度が高いという論文もあります。
過去、僕が書いた記事でも触れましたが、エモーションプロンプトもそれに含まれます。
「◯◯しないでね」というよりも、「◯◯をしてね」という表現の方が回答精度が高くなるというわけです。
8:コード生成の特定 - 「リーディングワード」を使用してモデルを特定のパターンに誘導する
リーディングワードというのは先導語のことで、例えば「### 出力:」がそれにあたります。
僕のプロンプトでは「### 出力:」と最後につけていることが多いですが、これはChatGPTにここまでが指示で、これらをもとにここから出力してくださいね。ということを指示しています。
大規模言語モデルは次に続く最もらしい文章を生成する機械ですから、これを利用しているわけです。
例えば「### 出力:ステップバイステップで考えてみます」と「出力の部分に」書いておけば、自動的にCoT(思考の連鎖)が働きます。
これは本来であれば「### 出力:」以降はChatGPTが考えるのですが、あえて「### 出力:ステップバイステップで考えてみます」と先に次に続く文章を書いておくことで、ChatGPTに暗示的に指示出しをしているということになります。
大規模言語モデルは所詮、確率的に次に続く文章をもっともらしく生成する機械なのでその性質を利用して、このようにわざと記述しているわけです。
9:何でも生成機能を使う
これは言わずもがなですね。
なんでも試してみてね、使ってねということです。
まとめ
以上です。
公式のポイント6つである
1:明確な指示を書く
2:参照テキストを提供する
3:複雑なタスクをより単純なサブタスクに分割する
4:モデルに「考える」時間を与える
5:外部ツールを使用する
6:変更を体系的にテストする
とヘルプページの
1:最新モデルを使用する
2:指示をプロンプトの先頭に置き、### または """ を使用して指示とコンテキストを区切る
3:望ましい状況、結果、長さ、形式、スタイルなどについて、できるだけ具体的に、詳細に記述する。
4:例を挙げて望ましい出力形式を明確にする
5:ゼロショットから始めて、次に数ショットを試し、どちらもうまくいかなかったら微調整する
6:曖昧な説明や不正確な説明を減らす
7:何をしてはいけないかと言うのではなく、代わりに何をすべきかを言う
8:コード生成の特定 - 「リーディングワード」を使用してモデルを特定のパターンに誘導する
9:何でも生成機能を使う
について解説しました。
これらは基礎的なことなのできちんと覚えておくと良いですよ〜!
生成AIプロンプトデザイナー ヒロ