プロンプトエンジニアリングの精度向上には、Few-Shot(例示)、Chain-of-Thought(推論過程の明示)、Self-Consistency(複数回答の集約)の3技法が効果絶大です。基本プロンプトで限界を感じたら、順番に適用していくとよいでしょう。ただしコスト増とレイテンシ悪化は不可避であり、精度と性能のトレードオフを常に意識する必要があります。

なぜ高度なプロンプト技法が必要か

基本的なプロンプトテクニック(明確な指示、ロール設定、出力形式)で多くのタスクは解決できます。しかし、複雑な推論、論理計算、専門的な判断を要するタスクでは、基本テクニックだけでは限界が来ます。ここで登場するのが高度なプロンプト技法です。Few-Shot、Chain-of-Thought、Self-Consistencyなどの技法は、LLMの潜在的な能力を引き出す「加速器」の役割を果たします。

注意すべきは、これらの技法はコストとレイテンシを増加させるということです。Few-Shotは例示のぶんトークンが増え、CoTは推論過程を出力するのでトークンが膨らみ、Self-Consistencyは複数回呼び出すのでコストが倍増します。プロンプトエンジニアリング入門、ハルシネーション対策、LLM評価方法の記事と合わせて、トレードオフを踏まえた設計が求められます。

Few-Shot Prompting――例示で精度を上げる

Few-Shot Promptingは、プロンプトに入出力のペアをいくつか例示し、LLMにパターンを学習させてから本番の入力を与える技法です。「ゼロから推論させる」より「例を見せてから推論させる」方が、期待フォーマットへの追従性が劇的に上がります。分類タスク、抽出タスク、フォーマット変換タスクで特に効果的です。

from openai import OpenAI
client = OpenAI()

prompt = """以下の例に倣い、問い合わせをカテゴリに分類してください。

問い合わせ: 「注文がまだ届きません」 → 配送
問い合わせ: 「請求金額が間違っています」 → 請求
問い合わせ: 「返品したい商品があります」 → 返品

問い合わせ: 「サイトでログインできない」 → """

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": prompt}]
)
print(response.choices[0].message.content)

例示の数は3〜5が理想的です。多すぎるとコンテキストを圧迫し、少なすぎるとパターン認識が不十分になります。また、例示は入力パターンの多様性を反映させるのが重要で、似た例ばかりだと応用が効きません。

Chain-of-Thought(CoT)――思考過程を明示させる

Chain-of-Thought(CoT)は、LLMに「答えを出す前に推論過程を書き出させる」技法です。単純に見えますが、複雑な計算や論理推論のタスクでは、CoTの有無で回答精度に大きな差が生まれます。特に数学問題、論理パズル、多段階の意思決定で効果絶大です。「ステップバイステップで考えてください」という魔法のような一文が、LLMの性能を引き上げます。

from openai import OpenAI
client = OpenAI()

question = "りんご3個は180円です。5個買ったとき、10%の会員割引を適用するといくらになりますか?"

cot_prompt = f"""次の問題を、順を追って考えてから最終答えを出してください。
問題: {question}

考え方:
1. りんご1個あたりの価格を計算
2. 5個ぶんの合計を計算
3. 10%引きを適用
最終答え:
"""

response = client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[{"role": "user", "content": cot_prompt}]
)
print(response.choices[0].message.content)

CoTの副次的な効果として、LLMの推論過程が可視化されるため、誤答時のデバッグが容易になる点も挙げられます。どこで判断を誤ったかが追跡できるので、プロンプト改善のヒントになります。

Self-Consistency――複数回答から最善を選ぶ

Self-Consistencyは、同じプロンプトを複数回実行し、得られた複数の回答から最も一致するものを選ぶ技法です。LLMの出力は非決定的なので、一度の回答では外れ値になることがあります。複数回サンプリングして多数決を取ることで、安定性と精度を両立できます。

from collections import Counter
from openai import OpenAI

client = OpenAI()

def self_consistency(prompt, n=5):
    answers = []
    for _ in range(n):
        response = client.chat.completions.create(
            model="gpt-4o-mini",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.7
        )
        answers.append(response.choices[0].message.content.strip())
    counter = Counter(answers)
    return counter.most_common(1)[0][0]

result = self_consistency("りんご3個が180円、5個買うといくら?", n=5)
print(result)

コストはサンプル数だけ線形に増えるため、5〜7回程度が現実的です。高価値な判断が必要な場面(医療、法務、金融)で使うのが費用対効果の高い選択です。

その他の高度な技法(Tree of Thought、ReAct等)

さらに高度な技法として、Tree of Thought(ToT)、ReAct、Step-Back Prompting等があります。ToTは思考を木構造に展開し、複数の経路を試して最良の結論を選びます。ReActはReasoningとActionを交互に実行し、ツール使用と推論を統合します。Step-Backはまず抽象的な問いに戻り、そこから具体的な答えを導きます。

技法原理精度向上度コスト影響実装難易度適したタスク
Few-Shot例示による学習分類・抽出
CoT推論過程の明示論理・計算
Self-Consistency複数回答の集約中〜高大(N倍)高価値判断
Tree of Thought木構造探索計画立案
ReAct推論+ツール中〜大エージェント
Step-Back抽象化複雑な質問
ユースケース推奨技法理由
問い合わせ分類Few-Shotパターン学習で安定
数学・計算問題CoT+Self-Consistency推論過程の検証
複雑な戦略立案Tree of Thought多経路の比較検討
ツール活用エージェントReAct推論と実行の統合
要約・分析Step-Back+CoT抽象化してから具体化

重要なのは、技法の組み合わせは慎重にという点です。Few-Shot+CoT+Self-Consistency+ToTを全部載せると、コストが指数的に膨らみます。問題の難易度に応じて、必要最小限の技法だけを選ぶのが賢明です。

まとめ

  • Few-Shotは例示による学習で分類・抽出精度を高める
  • CoTは推論過程を明示させて論理問題の精度を上げる
  • Self-Consistencyは複数サンプルの集約で安定性を確保する
  • コストと精度のトレードオフを踏まえ、必要最小限の技法を選ぶ

よくある質問

Chain-of-Thoughtプロンプトとは

LLMに推論過程をステップバイステップで出力させることで、複雑な問題の回答精度を向上させる技法です。「考えを段階的に示してください」のような指示を追加するだけで効果があります。

Few-Shotプロンプトで何例示せばよいですか

一般的に3から5例が効果的です。例が多すぎるとコンテキストを圧迫し、少なすぎるとパターンの学習が不十分になります。入力パターンの多様性を意識して代表的な例を選定してください。

これらの技法はどのLLMでも使えますか

はい、Transformer系のLLM(GPT、Claude、Gemini等)で広く効果が確認されています。ただし、モデルの性能によって効果の度合いは異なります。小規模モデルではCoTの効果が限定的な場合があります。