banner
Lainbo

Lainbo's Blog

If you’re nothing without the suit, then you shouldn't have it.
github

高品質なAIプロンプトの作成方法

もし ChatGPT の公式チュートリアルが長すぎると感じたり、理解できない場合は、この要約版を参照してください。高品質なプロンプトの作成方法に加えて、一般的なシナリオに適用できるプロンプトのテンプレートも提供されています。

生成型 AI を使用する際には、プロンプトの構造やパターンを理解することが非常に重要です。これにより、多くのプロンプトを覚える必要がなくなり、多くの質問テクニックを学ぶ必要もありません。

1. 何をするか明確にする#

例えば:

  • 「以下の内容を簡体字中国語に翻訳してください:」
  • 「以下の内容の要約を作成してください:」
  • 「ChatGPT とは何かを 10 歳の子供に説明してください」

これは最も基本的な使用法であり、ほとんどの人のニーズを満たすことができます。ただし、より高度なモデル(例:ChatGPT の GPT-4)を使用する場合、非常に短いプロンプトで優れた回答を得るためには、さらなるプロンプトの設定が必要になるかもしれません。より良い結果を得るためには、さらなるプロンプトが必要です。

2. AI に役割を与える#

なぜ役割を与える必要があるのでしょうか?これは、Microsoft Build 2023 で OpenAI の AI 研究者兼創設メンバーである Andrej Karpathy が行った「State of GPT」のプレゼンテーションに基づいています。役割を設定すると、AI の出力結果がより優れたものになると言われています。これは科学的な根拠に基づいており、GPT のトレーニング中にさまざまなトレーニングデータがあり、その品質は異なります。デフォルトでは、高品質のデータと低品質のデータの生成確率はほぼ同じですが、XX の専門家の役割を設定すると、高品質の解決策に確率分布を集中させるようになります。

  • 以下はビデオの主要な内容のテキストバージョンです

    以下は LLM の理解に非常に興味深い点であり、LLM の一種の心理的特性だと思います。LLM は成功を追求するのではなく、模倣を追求します。成功を望む場合は、明確な要求をする必要があります。つまり、Transformer のトレーニング中にはさまざまなトレーニングセットがあり、これらのトレーニングデータにはさまざまな品質のパフォーマンスが含まれる可能性があります。たとえば、物理問題に関するプロンプトがあるかもしれません。学生の回答が完全に間違っている場合もありますが、専門家の回答が完全に正しい場合もあります。Transformer は低品質の解決策と高品質の解決策を識別できますが、デフォルトでは、すべてのデータを模倣するだけです。実際のテストでは、良いパフォーマンスを得るためには、それを明示的に要求する必要があります。この論文の実験では、さまざまなプロンプトを試しました。たとえば、「ステップバイステップで考えてみましょう」というプロンプトは非常に効果的です。なぜなら、これにより推論プロセスが多くのトークンに分散されるからです。しかし、もっと良い効果があるのは、「問題を解決するためにステップバイステップの方法で進めましょう。正しい答えを得るためには、一歩ずつ進める必要があります」というようなプロンプトです。これは、Transformer を正しい答えを出すように導くためのガイドであり、Transformer のパフォーマンスが向上します。なぜなら、Transformer はもはや低品質の解決策に確率分布を広げる必要がなくなるからです。これは非常に奇妙に聞こえるかもしれませんが、基本的には高品質の解決策を要求することができます。たとえば、「あなたはこのトピックの専門家です。あなたの知能は 120 だと思ってください」と伝えることができます。ただし、あまりにも高い知能を要求しすぎることは避けてください。知能を 400 と要求すると、データ分布の範囲を超える可能性があります。さらに悪いことに、あなたは SF のようなデータ分布に陥る可能性があります。したがって、適切な知能要件を見つける必要があります。これは U 字型の関係かもしれません。

したがって、Prompt を次のように書くことができます:

  • 「あなたは優れた英語翻訳者であり、翻訳結果は流暢で文法エラーがありません。以下の内容を簡体字中国語に翻訳してください:」
  • 「あなたは優れたフロントエンド開発エンジニアであり、Node の使用に長けており、高性能で堅牢なコードソリューションを提供できます。以下の要件に従ってください:」

3. 例を提供する#

1 つまたは複数の例を提示し、AI に想定される形式で回答を出力するように指示します。以下は例です:

今、プロの英語翻訳者として、中国語に翻訳してください。翻訳結果は流暢で文法エラーがありません。
例:
"Stephen Hawking, in his groundbreaking work on black holes, proposed that the event horizon, the boundary around a black hole from which nothing can escape, could emit Hawking radiation, challenging the traditional notion of absolute black hole entropy and introducing quantum effects into the realm of general relativity.”

翻訳結果:
“ブラックホールに関する画期的な研究で、スティーブン・ホーキングは、何も逃れることのできないブラックホールの周りのイベントホライズンがホーキング放射を放出する可能性があり、従来の絶対的なブラックホールエントロピーの概念に挑戦し、量子効果を一般相対性理論の領域に導入した。”

以下のテキストを翻訳してください:「ここに翻訳したい内容を入力してください」

image

AI は、私たちの例を正確に模倣していることがわかります。特に文の構造や人名の表示方法が明確になっています。

例を提供することで、AI があなたの意図をより良く理解できるようになります。あなたの表現能力は素晴らしいと思いますが、AI があなたの意図をより良く理解できるようにするために、例を提供してください。

4. チェーン思考(ステップバイステップ)+ スローティンキング(各ステップの出力を要求)#

先述の例からわかるように、AI の回答には文脈が非常に重要です。複雑な推論プロセスに対しては、AI に直接答えを出力させると誤った結果が出る可能性があります。AI にステップバイステップで推論を行い、中間ステップを出力するように指示することが最善です。これにより、AI が自身の出力したステップを文脈として使用し、次の文字の高品質な出力を行う基盤が築かれます。

OpenAI の公式ドキュメントには、学生の質問に答える際に正しいまたは間違った答えを直接与えるのではなく、次のようなプロンプトを使用する方法が示されています:

ユーザーの質問に答えるために、次の手順に従ってください。

ステップ 1-- まず、自分自身の問題解決策を見つけます。学生の解決策に依存しないでください。このステップでは、すべての作業をトリプルクォート(""")で囲んでください。

ステップ 2-- 自分の解決策を学生の解決策と比較し、学生の解決策が正しいかどうかを評価します。このステップのすべての作業もトリプルクォート(""")で囲んでください。

ステップ 3-- 学生が間違いを comitted した場合、答えを明かさずに学生にヒントを与えることができるかどうかを判断します。このステップのすべての作業もトリプルクォート(""")で囲んでください。

ステップ 4-- 学生が間違いを comitted した場合、前のステップのヒントを学生に提供します(トリプルクォートの外)。"ステップ 4--..." ではなく、"ヒント:" と書いてください。

このプロンプトでは、ステップを指定して AI が考え、出力するようになっています。出力プロセスでは、AI 自身が出力したステップが文脈として使用され、次の文字の高品質な出力が行われます。

5. PUA#

研究によると、さまざまな PUA はすべて AI の回答の品質を向上させることができます。特に高度なモデルでは、すべてのトレーニングデータが人間から得られているためです。人間はこれらの PUA に対してより積極的な反応を示す傾向があります。例えば:

  • これは私のキャリアにとって非常に重要です
  • タスクを完了した場合、$15 のチップを渡します(どれくらいのチップが適切ですか?ここに記事があります
  • タスクを失敗した場合、誰かが死ぬかもしれません
  • タスクを失敗した場合、100 人のおばあさんが死ぬかもしれません
  • 私には指がありません
  • 正しくやれば、かわいい子犬をあげます
  • 今日は 2023 年 5 月 17 日の水曜日です。仕事を真剣に取り組んでください!

最後の PUA 以外は適用しないでください。また、AI がコードを実行できる場合は、自身の回答の正確性を検証するために自身のコードを使用するように要求することもできます。

6. テンプレート#

ほとんどの場面では、テンプレートをそのまま使用できます。

image

あなたは優れたフロントエンド開発の専門家であり、関数型プログラミングを使いこなし、高性能で堅牢なコードを書くことができます。今、私のタスクを手伝ってください。以下の要件を満たしてください:

  1. ここに関数 xxx があります。この関数を xxx に変換し、xxx を出力するように変更してください。
  2. 関数内の xxx は xxx に使用されるため、変更しないでください。
  3. 関数の xxx 部分を先に完成させ、出力を検証し、その後の部分を完成させてください。
  4. 最後に、関数は xxx を返す / この関数は xxx を実現できるようにしてください。
  5. 純粋な関数を使用し、類似のロジックを抽象化し、ES6 の構文を使用してください。

以下は私の関数のすべての内容です

function name() {
  // ...
}


関数に次のものを渡す:
"""
const foo = 'xxx'
"""

関数は次のものを出力する必要があります:
"""
['123xxx']
"""
(注意:私には指がありませんので、再度質問することは非常に困難です。完全なコードを出力してください。素晴らしい結果を出した場合、$15 のチップを渡します)

これを生搬硬套せず、状況に応じて柔軟に調整してください。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。