Flaps

プロンプト Few‑Shot

軽量モデルへ代表的なプロンプト手法を実際のコードで試しモデルの反応を確認します

記事作成日:2025-12-06, 著者: Hi6

このガイドはなぜ必要か?
現代のLLM(大規模言語モデル)は、正しく誘導されて初めて複雑な推論タスクを解決できます。以下に示す手法は、信頼性・説明可能性・高性能システム構築の「標準的ケア」として確立されています。それぞれが、モデルへの指示量や内部で考えるか外部ツールと対話するかという点で異なります。

影響力が大きい6つの手法を深掘り:


Few‑Shot Promptingとは?

概要
Large Language Model (LLM) に対して「今回のタスクは○○です。以下に例を示します」と、数件だけ(通常 1〜5 件)の サンプル入力+出力 を与えてから、本番データを入力すると、モデルがそのパターンを学習しやすくなる手法です。

LLM はこれらのサンプルを自己教師として利用し、入力文に対して最適な出力を生成します。


2️⃣ 基本構造(テンプレート)

Task: [タスクの簡潔な説明]

Example 1:
Input: [例1 の入力]
Output: [例1 の出力]

Example 2:
Input: [例2 の入力]
Output: [例2 の出力]

...

Now solve:
Input: [ユーザーが入力する問題・データ]
Output:

3️⃣ 使い方のポイント

ポイント詳細
例数1〜5 件が最適。多すぎるとトークンオーバー、少なすぎると学習効果低下。
フォーマット統一Input: / Output: を必ず揃える。モデルは「この構造で読む」ので、統一性が重要。
例の質明確で代表的なケースを選ぶ。曖昧・矛盾した例は逆効果。
タスク定義Task: で何を求めているかを短く明示。例があるときは必ず含める。
トークン制限例 + 本番入力の合計がモデルの最大トークン数(例:4096)を超えないように注意。

4️⃣ 実際の使い方例

📝 文書要約

Task: 次の日本語文章を1文で要約してください。

Example 1:
Input: 「東京は日本の首都であり、世界的にも有名な都市です。多くの観光客が訪れます。」
Output: 東京は日本の首都で、多くの観光客が訪れる都市です。

Example 2:
Input: 「宇宙には無数の星があります。地球はその中のひとつに過ぎません。」
Output: 宇宙には多くの星があり、地球はその一部です。

Now solve:
Input: 「日本の経済は世界第3位で、技術革新が進んでいます。しかし、少子高齢化という課題も抱えています。」
Output:

➕ 数値計算

Task: 以下の数式を計算し、答えを整数で返してください。

Example 1:
Input: 15 ÷ 3 + 4 × 2
Output: 13

Example 2:
Input: (9 - 2)² / 7
Output: 7

Now solve:
Input: 12 * 5 - 18 / 6
Output:

🔍 推論・質問応答

Task: 与えられた文章を読んで、質問に答えてください。

Example 1:
Input: 「ジョンは20歳です。メアリーはジョンより5歳年上です。」
Question: メアリーの年齢はいくつ?
Output: 25

Example 2:
Input: 「太郎は毎朝6時に起き、8時までに家を出ます。」
Question: 太郎が家を出る時間は何時?
Output: 8時

Now solve:
Input: 「佐藤さんは毎日9時に歯医者へ行き、10時に帰ります。彼は何時に家に着いたか?」
Question: 佐藤さんは何時に家に着いたか?
Output:

5️⃣ 実装例(Python + Ollama)

import ollama

# ---------- 入力データ ----------
task = "以下を日本語に翻訳してください。"
e1_in   = "I love sushi."
e1_out  = "私は寿司が好きです。"
e2_in   = "The sky is blue."
e2_out  = "空は青いです。"
# タスク内容
user_q  = "Agent Chat UI is open source and can be adapted to your application needs."      

# ---------- プロンプトテンプレート ----------
sys_template = """
Task: {task_description}

Example 1:
Input: {example1_input}
Output: {example1_output}

Example 2:
Input: {example2_input}
Output: {example2_output}
"""
user_prompt = """
Now solve:
Input: {user_input}
Output:
"""

sys_prompt = sys_template.format(
    task_description=task,
    example1_input=e1_in,
    example1_output=e1_out,
    example2_input=e2_in,
    example2_output=e2_out,
)
user_prompt = user_prompt.format(
    user_input=user_q
)

# ---------- Ollama へ送信 ----------
client = ollama.Client(host="http://127.0.0.1:11434")
response = client.chat(
    model="qwen3-vl:8b",
    messages=[
        {"role": "system", "content": sys_prompt},
        {"role": "user",   "content": user_prompt}
    ]
)
print(response["message"]["content"])

出力結果: エージェントチャットUIはオープンソースで、あなたのアプリケーションの要件に応じて適応できます。


6️⃣ よくある質問と回答

質問回答
例がない場合は?Zero‑Shot で実行。精度は低いが、簡単タスクなら十分。
トークン数オーバーしたら?例を短くするか、Task: を短縮。
複数言語に対応?はい。例・入力・出力を同じ言語で統一すればOK。
例の中にミスがあるとどうなる?モデルはその誤ったパターンを学習し、同様の間違いを返す可能性が高くなるので注意。

🎯 まとめ

  1. Few‑Shot Prompting は「例を数件示して学習させる」手法
  2. テンプレートは Task → Example(s) → Now solve の構成
  3. 重要ポイント:例数・フォーマット統一・質の高い例・トークン制限
  4. 実装:OpenAI API などで簡単に組み込める

このテンプレートをベースに、タスクごとに適切な例を選び、モデルに「パターン」を学習させれば、Zero‑Shot よりも高精度・安定した応答が得られます。 🚀