この書き起こしは、プロンプトエンジニアリングの基礎から高度なテクニックまでを包括的に解説したガイドである。Googleが作成したプロンプトエンジニアリング指南書をベースに、大規模言語モデルから最適な結果を得るための戦略について詳しく説明している。内容は基本的なプロンプトの構造から始まり、温度設定、サンプリング制御といった技術的パラメータの調整方法、そしてゼロショット、ワンショット、フューショットプロンプティングなどの実践的手法へと発展する。特に思考の連鎖(Chain of Thought)、自己一貫性(Self-Consistency)、思考の木(Tree of Thoughts)、ReAct(Reason and Act)といった高度なプロンプティング技術についても詳細に解説され、最終的には自動プロンプトエンジニアリングの活用方法まで網羅している。
これはプロンプトエンジニアリングについて知っておくべきすべてのことです。もしプロンプトエンジニアリングという言葉に馴染みがないなら、これは人工知能を最大限に活用するための素晴らしい戦略の集合体なのです。Googleがこのプロンプトエンジニアリングガイドをまとめましたので、私がそれを詳しく解説していきます。より深く掘り下げて、最終的にはあなたをマスタープロンプトエンジニアにします。
まず基本的なことから説明しますと、ChatGPT、Gemini、Claudeなどのモデルとチャットする際、あなたは自然言語で何かを入力し、モデルも通常は自然言語で出力を返します。これらのモデルの動作原理は、あなたの入力、つまりプロンプトを受け取って、そのプロンプトに基づいて出力がどうなるべきかを予測するというものです。だからこそ、あなたのプロンプトが本当に重要なのです。
どのように構造化するか、どんな言葉を使うか、どんな例を示すか、これらすべてがプロンプトエンジニアリングなのです。そして試行錯誤を重ねて実証された多くのプロンプトエンジニアリング戦略があります。これらはあなたが使用するモデル、その性能、トークン制限などにも依存します。これらすべてについて詳しく説明していきます。
LLMがどのように動作するかを思い出してください。これは予測エンジンです。モデルは順次的なテキストを入力として受け取り、つまりあなたのプロンプトを受け取って、トレーニングされたデータに基づいて次のトークンが何であるべきかを予測します。トークンについて馴染みがないなら、基本的には単語だと考えてください。通常は単語の4分の3程度です。技術的な詳細にはあまり深入りしませんが、トークン=単語と考えてください。
そしてモデルは次のトークンを予測しようとし、それが最初のプロンプトに追加されます。そして、元のプロンプトプラス追加されたトークンに基づいて、その次のトークンを予測しようとします。適切な出力を生成したと判断するまで、これを何度も何度も繰り返します。
プロンプトエンジニアリングとは、LLMに正確な出力を生成させるための高品質なプロンプトを設計するプロセスです。これは素晴らしい定義ですね。もしあなたが大規模言語モデルにプロンプトを送って、期待通りの結果が得られず、プロンプトを変更したらうまくいったという経験があるなら、それがプロンプトエンジニアリングです。
具体的なプロンプトエンジニアリング戦略に入る前に、いくつかの基本用語について説明しましょう。
すべての大規模言語モデルは異なります。大きく異なるものもあれば、少し異なるものもあり、これらの違いはすべて重要です。これらの設定を正しく行うことで、プロンプトから最大限の効果を得ることができます。
まず出力長について。出力長は、プロンプトに対してモデルが出力すべき最大トークン数です。出力長が長いほど、プロンプトに対する応答が長くなる可能性があります。2+2は何ですかと尋ねただけなら、答えは簡単で短いので、何段落にもわたって説明することはありません。しかし、コードを求める場合は、この出力長設定が大きな違いをもたらす可能性があります。
モデルがより多くのトークンを出力すると、潜在的により多くの費用がかかり、時間も長くかかり、より多くのエネルギーや電力を使用します。
しかし、ここで興味深いニュアンスを覚えておいてください。LLMの出力長を短くしても、LLMがより文体的に簡潔な出力を作成するようになるわけではありません。代わりに、制限に達したときにLLMがより多くのトークンの予測を停止させるだけです。出力長を本当に短く設定しても、より短く簡潔な答えを得られるわけではありません。その制限に達したときに出力を停止するだけです。
例を見せましょう。これはGoogle AI Studioです。出力長設定がここにあります。現在65,000トークンに設定されています。これを5トークンに設定してみましょう。パンダの物語を書いてくださいと言います。非思考モデルのGemma 327Bを使用していますが、「竹のささやき手」と言っただけで意味をなしておらず、これが最大5トークンです。
今度は50トークンに上げてみましょう。同じプロンプトを再度与えると、「竹のささやき手」そしてリンは霧のピーク保護区の他のパンダとは違っていて、などと続いて、ここで突然止まります。「彼は味わうだけでなく」、これが最大50トークンでした。
もちろん、5,000トークンに設定すれば、物語を完成させるでしょう。しかし、ここで分かるように、簡潔な物語を書いたわけではありません。単に出力を停止しただけです。これは本当に重要な点です。
次の設定はサンプリング制御です。大規模言語モデルが次のトークンをどのように予測するかの要点は以下の通りです。
LLMは正式には単一のトークンを予測するのではありません。むしろ、LLMは次のトークンが何であるかの確率を予測し、LLMの語彙内の各トークンに確率を与えます。「牛が飛び越えた」と言えば、月を予測するだけではありません。語彙内のすべての単一トークンに確率スコアを与えます。そして最も高い確率のものがあなたが見るものです。
これらのサンプリング制御内には主に3つの設定があります。温度、Top K、Top Pです。これらすべてについて説明します。
個人的には、温度がサンプリング制御内で最も重要な設定だと思います。温度はトークン選択のランダム性を制御します。しかし、より簡単に考える方法は、温度が高いほど、応答がより創造的でユニークになり、温度が低いほど、創造性が低くなるということです。
再びパンダの物語を書いてくださいと言います。温度を1に設定しています。これが最も創造的です。試してみましょう。出力が得られました。竹林の雨は霧雨ではなく、大洪水でした。ここで止めて、再び同じプロンプトを与えてみましょう。何が起こるか見てみましょう。
まったく同じモデル、まったく同じプロンプトですが、ご覧のように、まったく異なる物語です。
温度をゼロに設定するとどうなるでしょうか。見てみましょう。同じプロンプトを再び与えます。パンダの物語を書いてください。竹の森は葉のそよぎと見えない鳥のさえずりで満ちていました。素晴らしいです。
今度は温度ゼロでもう一度やってみましょう。見てください。竹の森はセミの低い鳴き声で満ちていました。前の温度ゼロのものと非常に似ています。これがあなたが得るものです。温度が本当に高い場合は、同じプロンプトを与えるたびに非常に異なる応答を得て、温度が非常に低い場合はその逆になります。非常に一貫した応答を得ることになります。
使用事例に応じて温度を調整することを忘れないでください。
次に、Top KとTop Pについて。正直に言うと、私はTop PとTop Kの設定をまったく使用しません。温度を使用すれば、それで十分です。しかし、それらが何であるかを簡潔に説明しましょう。
Top Kは温度と非常に似た働きをします。Top Kサンプリングは、モデルの予測分布から最も可能性の高い上位Kトークンを選択します。予測分布とは語彙セットと割り当てられた確率のことです。Top Kが高いほど、モデルの出力はより創造的で多様になります。低いほど、より制限的で事実的になります。
非常に似ていて、創造性を調整するための別の設定に過ぎません。Top Pサンプリングは、累積確率に基づいてモデルが選択する語彙のセットを制限する方法です。理解できなくても心配しないでください。正直なところ、私はTop Pをほとんど使用しません。それが何をするかを一般的に知っているだけで十分です。これら3つの設定を試してみてください。
この文書では、これら3つの設定すべてに対して推奨される開始点を示しています。一般的に、使用しているチャットインターフェースでも、デフォルト設定が提供されます。しかし、ここでは一般的な開始点として、温度0.2(これは私が通常開始する温度よりもかなり低く、私は通常0.6程度から始めます)、Top P 0.95、Top K 30が、創造的でありながら過度ではない、比較的一貫した結果を与えてくれます。
より創造的な結果が欲しい場合は、Top PとTop Kを上げてください。明らかに、より一貫性があり、創造性の低い結果が欲しい場合は、その逆を行い、これらの設定を下げてください。
さて、あなたがここに来た目的であるプロンプティング技術について話しましょう。
最初に話すのは一般的なプロンプティングまたはゼロショットです。ゼロショットについて聞いたことがあるなら、これはモデルに1回の試行を与えることを意味するのではありません。その点で少し紛らわしいのです。ショットという用語は、モデルにどれだけの例を与えるかを意味します。ゼロショットでは、あなたが望む出力の例をモデルに全く与えません。
ゼロショットでは、達成したいタスクの説明を提供するだけです。物語を書く、数学をする、コードを書くなど、しかしそれ以外は何もありません。探しているものの詳細な説明だけです。通常、必要な例が多いほど、大規模言語モデルに依頼するタスクがより複雑です。
物語を書くなどの比較的単純なタスクであれば、おそらく多くの例は必要ありません。
ゼロショットプロンプトの例を見てみましょう。映画レビューをポジティブ、ニュートラル、ネガティブに分類するようモデルに求めています。そしてこれがレビューです。「彼女は人類が向かう方向を明らかにする不穏な研究です。AIが制御されずに進化し続けることが許されるなら、この傑作のような映画がもっとあればいいのにと思います。」
感情:と。これが求めていることです。感情は何か?ポジティブ、ニュートラル、ネガティブを使用してください。そして正解を得ました。完璧です。
ゼロショット以上では、ワンショットまたはフューショットがあり、これは大規模言語モデルにより多くの例を与えることを意味します。ワンショットは1つの例を与えることを意味します。フューショットは2つ以上を意味します。
ワンショットでは、モデルはあなたが与えた例を模倣しようと最善を尽くします。フューショットを使用する場合、あなたの例から望ましいパターンを正しく得るためのより多くの機会をモデルに与えています。特定の形式での出力が欲しい場合、これは素晴らしい方法です。
フューショットプロンプティングに必要な例の数は、タスクの複雑さ、例の品質、使用している生成AIモデルの能力など、いくつかの要因に依存します。素晴らしい例を提供できれば、大規模言語モデルの仕事がそれだけ簡単になります。
一般的な経験則として、フューショットプロンプティングには少なくとも3から5つの例を使用すべきです。
この文書で示されている例を見てみましょう。目標はピザの注文をJSONに解析することです。
プロンプトは以下の通りです。顧客のピザ注文を有効なJSONに解析してください。例:チーズ、トマトソース、ペパロニの小さなピザが欲しいです。
この正確なプロンプトを他に何も与えずにモデルに与えると、モデルはJSONオブジェクトの構造がどうあるべきかを推測します。問題は、これを1000の異なる注文で1000回行うと、異なるJSONオブジェクト構造を得る可能性があることです。
しかし、ここのような例を提供すれば、サイズ、タイプ、材料が欲しく、材料内には材料の配列が欲しいということになります。すると、モデルはこの正確な構造を使用する可能性がはるかに高くなります。
そして、同じプロンプトの続きがあります。例:トマトソース、バジル、モッツァレラの大きなピザをもらえますか?サイズ、タイプ、材料がそこにあります。
今、前半はチーズとモッツァレラ、後半はトマトソース、ハム、パイナップルの大きなピザが欲しいです。JSON応答。これがモデルからの出力を求めているところです。サイズ、タイプ、材料、そして例で使用したのと全く同じ構造です。これはフューショットプロンプティングの素晴らしい使用例です。
次に、システムメッセージ、コンテキストプロンプティング、ロールプロンプティングについて話しましょう。これらが行うことの要点は、基本的にモデルに何かの役割を演じさせることです。シニア開発者として行動する、CEOとして行動する、教師として行動する。その役割の説明を与えるとすぐに、モデルはその役割がどうあるべきかと思う行動や品質を取り始めます。
まずシステムプロンプティングは、言語モデルの全体的なコンテキストと目的を設定します。言語の翻訳、レビューの分類など、モデルがすべきことの大きな絵を定義します。Google AI Studioを見ると、ここに小さなクリップボードがあり、システム指示と書かれています。
これはシステムメッセージと同じことです。クリックすると、モデルのオプションのトーンとスタイルの指示と書かれており、ここであなたが達成しようとしていることの全体的なテーマを説明することになります。
次はコンテキストプロンプティングです。コンテキストプロンプティングは、現在の会話やタスクに関連する具体的な詳細や背景情報を提供します。求められていることのニュアンスを理解し、それに応じて応答を調整するのに役立ちます。
文書では、この例を示しています。コンテキスト:あなたはレトロ80年代アーケードビデオゲームについてのブログを書いています。実際のタスク:この記事に含むべき内容の数行の説明とともに、記事を書くための3つのトピックを提案してください。
実際のタスクでは、レトロ80年代アーケードビデオゲームのブログを書く必要があるとは言っていませんが、それがコンテキストにあります。実行すると、ここに行きます。縁の下の力持ち5、ピクセルからパワーへ、コインオペレーション文化衝突。コンテキストを手元の実際のタスクから分離しているのです。
最後に、ロールプロンプティングです。ロールプロンプティングは、言語モデルが採用する特定のキャラクターやアイデンティティを割り当てます。これにより、モデルは割り当てられた役割とその関連する知識や行動と一致する応答を生成するのに役立ちます。私がこれを最もよく見るのは、エージェンティックフレームワーク、特にCrew AIです。
Crew AIは実際にこれをさらに一歩進めることを上手に行い、これを行うための多くのデータを持っています。そしてこの戦略は、直接的な大規模言語モデルプロンプティングでも同様に機能します。
これを見てください。エージェント定義で使用できる役割属性があります。クルー内でのエージェントの機能と専門知識を定義します。また、エージェントの意思決定を導く個別の目標やタスクもあります。
さらに、エージェントに文脈と個性を提供し、相互作用を豊かにする背景もあります。ロールプロンプティングは非常に強力です。
文書からの別の例があります。旅行ガイドとして行動してもらいたいです。私があなたに私の場所について書くので、あなたは私の近くで訪問する3つの場所を提案してください。実際の役割は旅行ガイドで、タスクは訪問する3つの場所を提案することです。
私の提案があります。私はアムステルダムにいて、博物館だけを訪問したいです。旅行提案をください。実行してみましょう。
ここに行きます。あなたのリクエストに基づいて、あなたのアムステルダム博物館ガイドになる準備ができています。3つの博物館の提案があります。これがロールプロンプティングが本当に強力になる時です。
次は、実際に聞いたことがなかったものです。ステップバックプロンプティングと呼ばれるものです。これは私が知っている他のいくつかのプロンプティング技術に似ていますが、少しユニークです。お見せしましょう。
ステップバックプロンプティングは、手元の特定のタスクに関連する一般的な質問を最初に考慮するようモデルに求め、その一般的な質問への答えを特定のタスクの後続のプロンプトに供給するものです。
これが混乱して聞こえるなら、すぐに例をお見せします。それのポイントは何でしょうか?LLMが特定の問題を解決しようとする前に、関連する背景知識と推論プロセスを活性化することを可能にします。より広い基本原理を考慮することで、LLMはより正確で洞察に満ちた応答を生成できます。
LLMが批判的に考え、新しく創造的な方法で知識を適用することを奨励します。LLMが直接プロンプトされた場合よりも多くの知識をLLMのパラメータで活用することで、タスクを行う最終プロンプトを変更します。魅力的ですね。
まず、デフォルトプロンプトの例があります。これはステップバックプロンプティングではありません。挑戦的で魅力的な一人称シューティングビデオゲームの新しいレベルのストーリーラインを1段落で書いてください。そして、これは標準的なプロンプティングであり、ステップバックではないことを覚えておいてください。
エンターを押して見てみましょう。荒廃した廃棄宇宙ステーション・イカロスは致命的な迷宮となり、巨大な重力異常がステーションを引き裂いてしまい、などなど。かなり良いです。
ここで言われていることは非常に興味深く、私がいつも遭遇することです。モデルに本当に創造的なことを求めるときはいつでも、温度を1に設定しても、本当に一般的な応答を与える傾向があります。創造的な文章は、実際に私が大規模言語モデルを最も利用しない分野の1つです。
今後、ステップバック手法を試してみます。代わりに、実際に割り当てられたタスクを与える前に、このトピック空間について考えさせましょう。人気のある一人称シューティングアクションゲームに基づいて、一人称シューティングビデオゲームにおいて挑戦的で魅力的なレベルストーリーラインに貢献する5つの架空の重要な設定は何ですか?
5つの架空の重要な設定について非常に堅実な答えをくれました。
この出力をすべてコピーして、これがコンテキストですと言って貼り付けました。そして一番下で、テーマの1つを取って、挑戦的で魅力的な一人称シューティングビデオゲームの新しいレベルの1段落のストーリーラインを書いてくださいと言います。それがどうするか見てみましょう。
プレイヤーは、急速に進化するナノボットの群れで満たされた恐ろしいゼロG セクションから出現したばかりの廃棄宇宙ステーションの中心部にいることに気づきます。
大規模言語モデルからより多くの正確性と知識の幅を得る良い方法です。
次に、大規模言語モデルを完全に変えたプロンプティング技術について話しましょう。思考の連鎖(Chain of Thought)です。
これに入る前に、思考の連鎖は今日これらのモデルの多くに組み込まれています。テスト時間計算や推論時間計算について聞くときはいつでも、これが彼らが話していることです。モデルは実際の出力を与える前に、出力の思考セクションで思考の連鎖の形で思考を出力します。
しかし、これらがモデルに組み込まれる前は、標準出力のようなものでこれを行うようにモデルにプロンプトしていました。実際には非常にシンプルですが、本当に強力です。
6か月前や1年前の私のモデルベンチマークを思い出してもらうと、すべてのプロンプトに「段階的に考えて、段階的に作業を示してください」を追加していました。プロンプトにそれを追加するだけで、モデルからはるかに良い、はるかに正確で、高品質な出力を得ました。
先ほど言ったように、多くのモデルにはこれが組み込まれていますが、すべてではありません。小さめのモデルや思考モードやテスト時間計算モードを持たないモデルでは、これは依然として非常に強力なプロンプティング方法です。
面白いことに、最新のモデルのほとんどは、いわゆる思考モデルでなくても、デフォルトでこれを行います。見てみましょう。
これはGemini 2.0 Flash Lightです。これは思考モデルではありません。プロンプトです。私が3歳の時、私のパートナーは私の3倍の年齢でした。3対9です。今私は20歳です。私のパートナーは何歳ですか?
問題の解決方法があります。パートナーの年齢を見つけてください。段階的に考えています。答えは26歳です。そしてそれは正しいです。
文書の例を見ると、出力は作業を示さず、したがって63歳となり、それは間違いです。しかし、段階的に考えるように求めると、実際に思考の各ステップを出力し、正しい応答を得ることができました。
より小さなモデルや古いモデルがある場合はいつでも、ところで、推論速度が重要な場合、コストが重要な場合など、適切なモデルを選択する際には多くの考慮事項があり、特定の使用事例でそれらのモデルを使用すべきです。これらのより小さな、言ってみればより知的でないモデルから、これらのプロンプティング戦略のいくつかを使用するだけで多くを得ることができます。
それだけでなく、プロンプティング技術を組み合わせることも可能です。ワンショットまたはフューショットプロンプトを取って、思考の連鎖と混ぜることができます。その例を見てみましょう。
質問:私の兄弟が2歳の時、私は彼の2倍の年齢でした。今私は40歳です。私の兄弟は何歳ですか?段階的に考えてみましょう。
そして例を与えます。答えです。私の兄弟が2歳の時、私は2×2=4歳でした。これは2歳の年齢差で、私の方が年上です。今私は40歳です。だから、私の兄弟は40−2で38歳です。答えは38歳です。そして質問をします。
私が3歳の時、私のパートナーは私の3倍の年齢でした。今私は20歳です。私のパートナーは何歳ですか?段階的に考えてみましょう。そして、私たちが与えた例とまったく同じ思考を基本的に模倣しました。
思考の連鎖は多くの異なる使用事例で本当に強力です。基本的に、STEM(科学、技術、工学、数学)のカテゴリーにあるものなら何でも、思考の連鎖は非常に非常に強力です。しかし、論理と推論でも同様です。モデルに段階的に考えさせることで出力が大幅に改善される分野は本当にたくさんあります。
次に、別の非常に強力なプロンプティング技術である自己一貫性について話しましょう。LLMの推論能力は、モデルサイズを増やすだけでは克服できない制限としてしばしば見られます。モデルは人間が問題を解決するように推論ステップを生成するようにプロンプトできます。
しかし、思考の連鎖は単純な貪欲復号化戦略を使用し、その効果を制限します。貪欲復号化とは、最も高い確率のトークンを選ぶことを意味します。文書によると、それは効果を制限します。
そこで自己一貫性の登場です。自己一貫性は、サンプリングと多数決を組み合わせて多様な推論パスを生成し、最も一貫した答えを選択します。これが基本的に意味することは、同じプロンプトをモデルに対して、例えば5回異なる回数実行し、その後モデルを使って、どれが正しい答えまたは最良の解決策だと思うかについて投票させることです。
大規模言語モデルによって生成される応答の精度と一貫性を向上させます。
例を見てみましょう。メールを重要または重要でないで分類するタスクがあります。そしてこれがメールです。「こんにちは、あなたがウェブサイトにWordPressを使用しているのを見ました。素晴らしいオープンソースコンテンツ管理システムです。私も過去に使用したことがあり、などなど。」
重要な部分はここです。名前フィールドを選択した時に起こるコンタクトフォームのバグに気づきました。これは重要なメールです。誰かが潜在的なバグについて連絡しているのです。
上記のメールを重要または重要でないに分類してください。段階的に考えて、理由を説明してください。出力がここにあります。
ステップ1、目的を特定します。メールの目的は、コンタクトフォームのバグについて受信者に知らせることです。ステップ2、バグの潜在的な影響を評価します。ステップ3、送信者の信頼性を考慮します。結論、重要。素晴らしいです。バグの潜在的な影響と送信者の信頼性に基づいて、メールは重要として分類されるべきです。受信者はバグを修正し、攻撃からウェブサイトを保護するために即座に行動を取るべきです。
2番目の出力を見てみましょう。再び、私たちはモデルに複数回プロンプトしてから、モデルにどの出力が最良かを決定させます。出力2では、緊急性の欠如、非重要なバグレポート、個人的な影響の欠如、行動要求の不在、送信者の意図。結論、重要ではない。
試行3では、重要と判断されました。大規模言語モデルからの3つの出力のうち2つが重要と判断しました。これを3回、5回、50回行うことができます。そして基本的に、最も頻繁に起こった出力または応答を真実として、または最良の応答として取ります。
この場合、3つのうち2つが重要でした。重要として分類しましょう。しかし、大きなコストが伴います。明らかに、すべての単一タスクでこれらのプロンプトを複数回実行しているなら、高いコスト、高いレイテンシがあります。このプロンプティング戦略を使用する際のトレードオフを決定する際に覚えておくべきことです。
思考の連鎖と自己一貫性に慣れたところで、思考の木について話しましょう。LLMが単一の線形思考の連鎖をたどるだけではなく、複数の異なる推論パスを同時に探索することを可能にします。
このように見えます。思考の連鎖では、入力、異なるステップ、そして出力があります。しかし、思考の木では、入力があり、各ステップで最終的に最終出力につながる次の出力セットにつながる異なる出力をテストします。これは自己一貫性と思考の連鎖の組み合わせを使用しています。
このように想像できます。入力があり、最初のステップ、複数の最初のステップを思いつき、どれが最も正確または最良かを決定させます。それから次のステップに進み、最終的に最終出力を得るまで、再び再び行います。
思考の木を、ユーザーとモデルへのプロンプトボックスに入力できるものとの間で厳密に行うことは、実際には実行可能ではありません。あまりにも多くのことが起こっています。思考の木をコードで実装するか、あなたのためにそれを行うフレームワークを使用する必要があります。
このアプローチは、探索を必要とする複雑なタスクに思考の木を特に適したものにします。より複雑なタスク、より洗練されたタスクがある場合、思考の木があなたにとって素晴らしいかもしれません。
次に、ReActについて説明しましょう。これは推論と行動です。推論と行動プロンプティングは、大規模言語モデルが外部ツール、検索、コード解釈などと組み合わせた自然言語推論を使用して複雑なタスクを解決することを可能にするパラダイムです。
ツールは、大規模言語モデルの生の知能を取って、現実世界のタスクを達成することを可能にするために非常に重要です。
ReActは人間が現実世界でどのように操作するかを模倣します。ReActをエージェントのようなものと考えることができます。基本的に、論理、コア大規模言語モデルがあり、それにツールを与えます。新しい知識を得るツール、記憶を保存するツール、他のエージェントと通信するツール。基本的に、あなたが望むものは何でもです。
ReActプロンプティングは、推論と行動を思考-行動ループに組み合わせることで機能します。LLMは最初に問題について推論し、行動計画を生成します。それから計画の行動を実行し、結果を観察します。
これが馴染みがあるように聞こえるなら、最近の最先端モデルの多くにはこれが組み込まれています。異なるツールをオンオフできて、思考モードに組み込まれた思考の連鎖があります。
これは2025年5月6日現在のGemini 2.5 Pro previewです。そしてこれがそのツールです。構造化出力、コード実行、関数呼び出し、Google検索。これはあなたのために行われるReActの完璧な例です。
しかし、もちろん、最先端のモデルを使用している場合、最も多く支払い、おそらく最も長く待っています。最高コスト、最高レイテンシです。しかし、ReActフレームワークを使用するだけで、古いまたはより小さく、より高速で、より知的でないモデルでこれらの利益の多くを得ることができます。
ReActは本当にエージェントに過ぎません。この例では、これの非常に基本的なバージョンを見ています。Pythonコードがあります。Lang Chainsエージェントをロードしています。
プロンプトがあります。メタリカのバンドメンバーは何人の子供を持っていましたか?これがLLMです。GoogleのプロダクトであるVertex AIを使用しています。Google検索APIであるSER APIツールを使用しており、ウェブ検索をモデルのツールとして利用できるようにしています。
実行すると、それで良いです。これらの数行のコードで、LLMに計画、実行、何が起こったかをレビューし、必要に応じて再び実行する能力を与えました。出力がここにあります。
メタリカには4人のメンバーがいます。検索をしましょう。検索というツールがあり、アクション入力があります。ジェームズ・ヘットフィールドは何人の子供を持っていますか?観察。3人の子供。思考メタリカのバンドメンバーは3人の子供を持っています。別の検索をしましょう。ラースまたはカーク・ハメットなど、ずっと下まで続きます。
バンドメンバー1人につき1回の検索を行い、子供の総数を見つけ、すべてを足し合わせて、それが答えです。これは本当にエージェントに過ぎません。10回中9回、エージェンティックフレームワークを自分で書く理由はありません。Lang Chain、Crew AIを取ることができ、これらのフレームワークを素晴らしく組み立ててくれます。
これらのプロンプティング技術はすべて、明らかに非常に複雑で退屈になり、手動で書くのに長時間かかる可能性があります。しかし、AIにプロンプトを書いてもらうことができるとしたらどうでしょうか?これは私がいつもやっていることです。これは自動プロンプトエンジニアリングと呼ばれます。私がこれをどのように行うかお教えします。
私は頻繁に大規模言語モデルにコードを書いてもらいます。しかし、私はまた、詳細なPRD(製品要件書)を書きたくありません。これは私が書いてもらいたいコードの要件リストに過ぎません。
私がすることは、構築したいものの数文の説明を考えるだけです。それから、モデルにPRDを書いてもらいます。そのPRDを取って、別のモデルに戻し、このPRDに基づいてコードを書いてくださいと言うと、私が構築したいもののために広範囲な詳細を書く仕事をしてくれます。
あなたが書いているプロンプトに多くの詳細を追加する良い方法です。しかし、それだけでなく、今日話したプロンプティング技術のいずれかを取って、単純に「これが私の最も基本的なプロンプトです。それに思考の連鎖を使用してください、または自己一貫性を使用してください」と言うことができます。そうすると、そのプロンプティング技術を実際に行うために大規模言語モデルに戻すことができるプロンプトを書いてくれます。
次に、私が使用するプロンプティング技術について話したいと思います。それが何と呼ばれるかさえ分かりません。しかし、基本的にプロンプトの解決策に対してモデルにコードを書いて実行してもらう時期と、自然言語解決策を与えてもらう時期を決定することです。
私がいつもやっていたプロンプトテストを使いましょう。しかし、今はすべてのモデルが正解を得ます。これはGPT-4oで、ストロベリーという単語にRはいくつありますかと言っています。正解を得ました。ストロベリーという単語には3つのRがあります。しかし、頻繁に他のモデルはこれを間違えていました。
これについて異なる考え方があり、常に正しい答えを得ることができます。多くのモデルはコードを書いて実行する能力を持っています。
ストロベリーという単語にRがいくつあるかと言うだけでなく、与えられた単語内のRの数を数えるコードを明示的に書くように指示し、ストロベリーという単語から始めます。その単語を入力として受け取り、その単語内のRの数を数えるコードを書けば、コードが正しい限り、常に正しいでしょう。
このような使用事例では、モデルのコードを書く能力は、実際にはコードなしでこれらの質問に正しく答える能力よりもはるかに優れています。
例があります。与えられた単語内のRの数を数えるコードを書いてください。ストロベリーという単語から始めて、そのコードを実行してください。
分析を開いてみると、単語を定義してコードを書き、ここが出力です。実際にコードを書いて実行し、それが正確であることが分かります。私はこれをコードを使用したプロンプティングと呼んでいます。
まとめとして、いくつかのベストプラクティスについて話しましょう。
1つ目、例を提供してください。ゼロショット、ワンショット、フューショットについて話しました。できる時、可能な時は、特に一貫した出力を得ようとしている時は、モデルに例を与えるようにしてください。
シンプルさを重視した設計。私は本当にこれに同意します。シンプルなプロンプティングから始めて、絶対に必要な時にのみ、より多くの指示やより微妙な指示を追加してください。モデルのためにタスクやプロンプトを書く時はいつでも、これは私が求めていることの最もシンプルなバージョンですか?と考えるようにしてください。
出力について具体的に指定してください。これは本当に重要です。JSONを期待しているなら、JSONを期待していると言ってください。出力の最初の単語のすべての文字がBの文字であることを期待しているなら、必ずそれを言ってください。それが何であれ、出力を指定してください。そうでなければ、モデルはあなたが求めていることを推測しようとするだけです。
制約よりも指示を使用してください。指示は、応答の望ましい形式、スタイル、または内容について明示的な指示を提供します。制約は制限や境界を設定します。何をしてはいけないかを言うよりも、何をすべきかを言ってください。
次に、最大トークン長を制御してください。これは私が積極的に行うことではありませんが、特により大規模な本番使用事例では、レイテンシとコストを最適化するために本当に重要です。
大規模または本番使用事例についてのもう一つの注意は、変数を使用することです。プロンプトで変数を使用してください。例があります。変数があります。都市:アムステルダム。プロンプト:あなたは旅行ガイドです。都市について事実を教えてください。都市。今後、ここにプログラム的に任意の都市を挿入できます。
最後に提案することは、これらすべてのモデル、その能力、制限について最新の情報を入手し続けることです。なぜなら、それが最も効果的に求めているものを得るためにプロンプトをどのように形式化するかを知るのに役立つからです。
明らかに私のチャンネルをフォローしてください。まだ購読していないなら、それが私が一日中毎日やっていることだからです。うまくいけば、あなたに情報を提供し続けることができるでしょう。私はまた、future.aiで同じことを扱うニューズレターも持っています。
このプロンプトエンジニアリングガイドについて、GoogleそしてこのドキュメントのAuthorであるLee Bonstra氏に感謝したいと思います。素晴らしいです。チェックしてみてください。以下の説明にリンクを載せます。このビデオを楽しんでいただけたなら、いいねと購読を検討してください。次のビデオでお会いしましょう。


コメント