Flaps

プロンプト Chain‑of‑Thought (CoT)

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

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

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

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


Chain-of-Thought(CoT)とは?

概要
Chain-of-Thought は、LLM に「思考の過程を明示的に書くように促す」手法。
→ モデルが「まずこう考える → 次にこう考える → 最後にこう答える」の流れで、論理的・段階的な思考を出力することで、複雑な問題の精度・信頼性が向上する


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

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

Example 1:
Input: [問題文]
Thought: [段階ごとの思考]
Output: [最終答え]

Example 2:
Input: [別の問題文]
Thought: ...
Output: ...

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

3️⃣ 実際の使い方例

📐 数学・計算問題

Task: 以下の数式を解いてください。思考過程を「Thought」で説明し、「Output」に答えを記載してください。

Example 1:
Input: 15 ÷ 3 + 4 × 2
Thought: まず割り算 → 5。次に掛け算 → 8。最後に足し算 → 13。  
Output: 13

Now solve:
Input: (9 - 2)² / 7
Thought: 9-2 = 7。平方 → 49。除算 → 7。  
Output: 7

🧠 推論・ロジック問題

Task: 以下の文章を読んで質問に答えてください。思考過程を「Thought」で説明し、「Output」に答えを記載してください。

Example 1:
Input: ジョンは20歳、メアリーはジョンより5歳年上です。  
Question: メアリーは何歳ですか?  
Thought: ジョンの年齢 = 20。メアリーは +5 → 25。  
Output: 25歳

Now solve:
Input: アリスはボブより2倍の年齢です。アリスが30歳なら、ボブはいくつ?
Question: ボブは何歳ですか?  
Thought: アリス = 2 × ボブ → 30 = 2 × ボブ → ボブ = 15。  
Output: 15歳

🌱 学習教材作成

Task: 次の「文章理解」問題を作ってください。思考過程を「Thought」で説明し、「Output」に答えを記載してください。

Example 1:
Input: 山田さんは毎朝7時に起き、8時に会社へ向かいます。  
Question: 山田さんは何時に会社に着くのですか?  
Thought: 起床 → 7:00、移動時間 1h → 8:00。  
Output: 8時

Now solve:
Input: 佐藤さんは毎日9時に歯医者へ行きます。そこから10時に家に帰ります。  
Question: 佐藤さんは何時に家に着きましたか?  
Thought: 歯医者 → 9:00、戻る時間 1h → 10:00。  
Output: 10時

4️⃣ 実装のポイント

項目ポイント
トークン数Thought が長くなると制限に引っかかる可能性。必要な情報だけを抜粋。
フォーマット統一Input:, Thought:, Output: を必ず揃える。
思考の段階①「何を求めるか」→②「どんな操作を行うか」→③「結果」 → という順序で書く。
例数2〜3 件がベスト。多すぎてもトークンオーバー、少なすぎても学習効果が低い。
エラー検出思考過程に誤りがあれば、後から修正しやすい。
ユーザー入力の位置Input: の直後にユーザーが問題を入れる。Question: は固定の指示か、必要ならユーザーも入力できるようにする。

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

質問回答
CoT を使わない場合は?シンプルなタスク(単純計算や短文要約)は Zero‑Shot で十分ですが、複雑な推論では CoT が効果的。
Thought の長さが制限に引っかかったら?「思考の要点」だけを抜き出す、または「ステップごとに短く分割する」。
自動で Thought を生成したい場合?Generate a step-by-step reasoning のような指示を入れることで、自動化できる。
複数言語で使える?可能。日本語・英語の両方で同じフォーマットを使えば、言語間の CoT が学習できる。

6️⃣ 実装例(Python + Ollama)

import ollama

# ---------- 入力データ ----------
user_problem  = "田中さんは毎朝8時に起きて、15分で朝食を食べます。その後、通学のバスに乗って学校に着くまでに20分かかります。学校の授業は9時からです。"
user_query    = "田中さんは何時何分に学校に着きますか?"

# ---------- プロンプトテンプレート ----------
sys_template = """
Task: 以下の文章を読んで質問に答えてください。思考過程を「Thought」で説明し、「Output」に答えを記載してください。

Example 1:
Input: 田中さんは毎朝5時に起きて、30分で朝食を食べます。その後、通学のバスに乗って学校に着くまでに30分かかります。学校の授業は9時からです。
Question: 田中さんは何時何分に学校に着きますか?
Thought: 5時 + 30分 + 30分 = 6時
Output: 6時に学校に着きます。
"""

user_template = """
Now solve:
Input: {user_input}
Question: {user_question}
Thought:
Output:
"""

user_prompt = user_template.format(
    user_input=user_problem,
    user_question=user_query
)
  

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

出力結果: Thought: 8時 + 15分 = 8時15分。その後、20分かかるので、8時15分 + 20分 = 8時35分。 Output: 8時35分に学校に着きます。


🎯 まとめ

  1. **CoT は「思考過程を明示」**することで、精度・透明性が向上。
  2. 基本テンプレートInput → Thought → Output を例で示し、最後に実際の問題を解く構造。
  3. ポイント:トークン制限、フォーマット統一、思考段階の順序化。
  4. 使いどころ:数式・論理推論・文章理解など、多段階でミスが発生しやすいタスクに最適。

これをベースにプロンプトを作成すれば、CoT を最大限に活かした回答が得られます! 🚀