はじめに
こんにちは、株式会社ナイトレイの開発部のアレックスです!
AIの出力をもっと良くしたいと思っている人は多いですよね。よりいいアウトプットを出させるためには、まずLLMへの入力、つまりプロンプトの質を上げることが大切です。
LLMの出力は、与える入力によって大きく変わるため、どんなモデルでも効果的なプロンプト作りが重要になります。この記事では、AIの答えをもっと良くするための「プロンプトエンジニアリング」の基本と、今すぐ使えるコツを紹介します!
プロンプトエンジニアリングとは?
プロンプトエンジニアリングとは、AIがちゃんと意図を理解できるように、質問を工夫することです。質問をうまく作ると、AIの答えの質がグッと良くなります。
プロンプトエンジニアリングのテクニック
Chain-of-Thought (CoT)
CoT(Chain-of-Thought)プロンプトは、AIに段階的に考えさせることで、より論理的で正確な回答を得るプロンプトテクニックです!(最近のo1、o3-miniモデルがある程度自動的にこのプロセスをやりますが、指示を与えないとどの方向に行くかがLLMの判断になります!)
特に複雑な問題や推論を要するタスクに適しています。このテクニックでは、AIに途中の思考過程を明示的に示させることで、一貫性のある答えを生成できます。
カラスは問題解決が得意な動物として知られています。
以下の状況に対し、あなたの思考過程を段階的に、かつ番号を付けて詳しく説明してください。
【状況】
カラスが細長い筒の中の餌を取ろうとしていますが、くちばしが届かず、直接餌にアクセスできません。
【タスク】
1. まず、この状況でカラスが直面している問題を整理してください。
2. カラスが考えられる解決策を複数挙げ、各解決策に至る思考の流れを詳しく説明してください。
3. 各解決策のメリット・デメリットを評価してください。
4. 最後に、カラスが学習や経験を通じてどのように新たな解決策を見出す可能性があるかについて考察してください。
Self-Consistency(自己整合性)
Self-Consistencyプロンプトは、AIに複数の答えを考えさせ、それらを比較して最も良いものを選ばせるテクニックです。
これにより、より信頼性の高い回答を得ることができます。
「カラスの知能について、以下の各視点から考察してください。
各視点では、少なくとも3通りの異なる説明(推論経路)を生成し、その中から最も一貫性があり説得力のある説明を選び、選定理由を簡潔に述べてください。さらに、3視点で選んだ説明の中から、全体として最も納得できるものとその理由を一文でまとめてください。
【視点】
1. 生物学的視点:カラスの脳構造や神経回路が知能にどう寄与しているか。
2. 行動の視点:カラスがどのように学習し、道具使用や環境適応を行うか。
3. 問題解決の視点:カラスが複雑な問題にどう取り組み、解決策を見出すか。
例:
各視点ごとに3種類の説明を出力
最も整合性のある説明を選び、その理由を記述
最後に、3視点で選んだ説明から全体で最も説得力のあるものと、その理由を一文で述べる」
AIが複数の方法を検討し、最適な答えを導き出せるようになります
Tree-of-Thought
Tree-of-Thought(ToT)は、AIが問題を解決する際に、いくつかの方法を考えて、それぞれの結果を比べながら最も良い方法を選ぶ考え方です。
Self-ConsistencyとToTは似ているように見えますが、Self-ConsistencyはAIに同じ質問を何度も答えさせ、その中で最も一貫性のある答えを選ぶ方法です。
一方、ToTでは、AIにいくつかの方法を考えさせ、それぞれのメリット・デメリットを評価させながら、最適な答えを選ばせるのが特徴です。
つまり、Self-Consistencyはたくさん出た答えを選ぶのに対し、ToTは色々な方法を比べて一番良いものを選ぶという違いがあります。
「カラスが食べ物を手に入れる方法を考えて、それぞれのステップを説明してください。
1. 直接拾う - 目の前にある食べ物をそのまま取る。
2. 道具を使う - 小枝や石を使って、手の届かない場所の食べ物を取る。
3. 他の動物を利用する - 人間や他の動物が食べ物を落とすのを待つ。
それぞれの方法について、成功しやすさ、かかる時間、リスクを考え、一番良い方法を選んでください。また、最初の方法がうまくいかなかった場合、次にどの方法を試すのが良いかも考えてください。」
このように、Tree-of-Thoughtプロンプトを使うことで、AIが計画的に考え、問題解決の選択肢を比較しながら、より良い解決策を導き出すことができます。
Few-Shot Prompting
Few-shotプロンプティングは、AIモデルにいくつかの例を提示することで、特定のタスクのパターンを学習させ、より適切な応答を生成させる手法です。
この方法により、モデルは文脈内学習を行い、複雑なタスクにも対応できるようになります。
例えば、以下のようなプロンプトを使用します:
「次の文章が表現する感情を判定してください。
感情は "Positive" または "Negative" のどちらかで答えてください。
以下の例を参考に、文章の語調や文脈から適切なラベルを選んでください。
【例】
「このゲームは最高だった!」 → Positive
「とても退屈な映画だった。」 → Negative
「このレストランの料理は絶品だ!」 → Positive
「接客がひどくてがっかりした。」 → Negative
「友達との楽しい時間を過ごした。」 → Positive
【新しい入力】
「この本は感動的だった!」 → ?
「以下の症状に基づく診断と、その理由を記述してください。
【例1】
症状: 腹痛、嘔吐、下痢
診断: 食中毒
説明: 急激な腹痛と嘔吐、下痢は、
汚染された食物の摂取による食中毒の典型的な症状であり、
重篤な症状が見られないため軽度のウイルス感染は考えにくいです。
【例2】
症状: 関節痛、朝のこわばり、手指の腫れ
診断: 関節リウマチ
説明: 持続する関節痛と朝のこわばり、
手指の腫れは、自己免疫性疾患である関節リウマチを示唆する特徴的な症状です。
【例3】
症状: 喉の痛み、発熱、扁桃腺の腫れ
診断:
説明:
このように、モデルに具体的な例を示すことで、一貫性のある回答を生成できるようになります。
Meta Prompting
Meta promptingとは、具体的な例を示すのではなく、問題を解くための全体の枠組みや手順、論理構造をあらかじめ提示することで、モデル自身にその構造に沿った回答を導かせるテクニックです。
これにより、タスクに対する抽象的かつ整理されたアプローチが得られ、効率的かつ一貫性のあるアウトプットが期待できます!
次の数学問題に答える前に、まずどのような手順で解くか、簡潔に説明してください。
以下のステップに沿って解答プロセスを整理してください。
【手順例】
1. 問題に登場する変数を定義する
2. 適切な公式を選択する
3. 公式に数値を代入して計算する
【問題】
底辺が8cm、高さが5cmの三角形の面積を求めなさい。
最終的な答えを別の段落で示してください。
つまり、具体的な数値例を与えるのではなく、解答プロセスの全体的なフォーマットや手順を明確に書くことで、モデルがその構造に沿って思考し、効率的かつ一貫性のある回答を生成してくれます!
まとめ
今回紹介したテクニックを使えば、より役立つ質が高い回答をアウトプットしてもらえるかと思います。
参考にPrompt Engineering Guideをおすすめします(英語)。