0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Fine-tuning vs RAG vs Prompt Engineering: How to Choose in 2026

0
Last updated at Posted at 2026-04-29

Fine-tuning vs RAG vs Prompt Engineering: How to Choose in 2026【比較ガイド】

LLMをカスタマイズする方法は大きく3つ。でも「どれを使えばいい?」で迷う人が後を絶ちません。本記事では実務視点で完全に整理します。


3つの手法の根本的な違い

Prompt Engineering → モデルを変えず、指示で動作を制御
RAG              → 外部知識を検索して文脈に注入
Fine-tuning      → モデルの重みそのものを再学習

一目でわかる比較表

比較軸 Prompt Engineering RAG Fine-tuning
コスト 最安(API料金のみ) 中(ベクトルDB + 検索) 最高(GPU + データ準備)
実装期間 数時間〜1日 1〜2週間 2〜8週間
最新情報への対応 ❌ 不可 ✅ リアルタイム更新可 ❌ 再学習が必要
プライベートデータ △ プロンプトに入れる ✅ 大規模ドキュメント対応 ✅ モデルに学習させる
文体・口調の変更 △ 限定的 ❌ 効果薄 ✅ 最も効果的
幻覚(ハルシネーション) 多い 少ない(ソース参照) 中程度
スケーラビリティ 高い 高い 低い(再学習コスト)

Prompt Engineering

いつ使うか

これに向いている:

  • プロトタイプ・PoC段階
  • 既存モデルで十分な品質が出る場合
  • タスクが明確で、例示で指示できる
  • コストを最小化したい

これには向いていない:

  • 独自用語・社内ナレッジが大量にある
  • 文体や性格を根本的に変えたい
  • コンテキスト長に収まらないデータ

実装例:Few-shot + Chain-of-Thought

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", """あなたはテクニカルサポートの専門家です。
以下のルールを厳守してください:
1. 必ず原因→解決策の順で回答する
2. 専門用語には括弧で説明を加える
3. 確信がない場合は「確認が必要です」と明示する"""),
    
    # Few-shot examples
    ("human", "APIが500エラーを返します"),
    ("assistant", """原因:サーバー内部エラー(サーバー側の問題)が発生しています。

解決策:
1. リトライロジック(自動再試行)を3回まで実装してください
2. エラーログでスタックトレース(エラーの発生箇所)を確認
3. 15分後に再試行して問題が継続する場合はサポートにご連絡ください

確認が必要な場合:エラーが1時間以上継続する場合"""),
    
    ("human", "{question}")
])

chain = prompt | ChatOpenAI(model="gpt-4o-mini", temperature=0)
response = chain.invoke({"question": "レートリミットエラーが頻発します"})

Advanced Prompting Techniques(2026年版)

# 1. Chain-of-Thought(思考の連鎖)
cot_prompt = "ステップバイステップで考えて答えてください。"

# 2. ReAct パターン(Reasoning + Acting)
react_prompt = """
Thought: [考え]
Action: [実行すること]
Observation: [結果の観察]
... (必要な回数繰り返す)
Answer: [最終回答]
"""

# 3. Self-consistency(複数回生成して多数決)
from collections import Counter

def self_consistent_answer(question: str, n: int = 5) -> str:
    llm = ChatOpenAI(model="gpt-4o", temperature=0.7)
    answers = [llm.invoke(question).content for _ in range(n)]
    return Counter(answers).most_common(1)[0][0]

RAG(Retrieval-Augmented Generation)

いつ使うか

これに向いている:

  • 社内ドキュメント・FAQ・マニュアルへの問い合わせ
  • 最新ニュースや更新頻度の高い情報
  • 回答の根拠(ソース)を示す必要がある
  • 数百〜数万ページのドキュメントを扱う

これには向いていない:

  • 特定の口調・ペルソナを身につけさせたい
  • 推論パターン自体を変えたい
  • インターネット接続なしの完全オフライン環境

実装例:シンプルRAG

from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import DirectoryLoader

# 社内ドキュメントを読み込み
loader = DirectoryLoader("./company_docs", glob="**/*.md")
docs = loader.load()

# チャンキング
splitter = RecursiveCharacterTextSplitter(chunk_size=800, chunk_overlap=150)
chunks = splitter.split_documents(docs)

# ベクトルDB構築
vectorstore = Chroma.from_documents(
    chunks, OpenAIEmbeddings(), persist_directory="./db"
)
retriever = vectorstore.as_retriever(search_kwargs={"k": 5})

# RAGチェーン
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough

template = """社内規定のみを参照して回答してください。
規定に記載がない場合は「規定に記載がありません」と答えてください。

参考文書:
{context}

質問: {question}"""

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | ChatPromptTemplate.from_template(template)
    | ChatOpenAI(model="gpt-4o", temperature=0)
)

print(chain.invoke("育児休業の申請手続きを教えてください"))

Fine-tuning

いつ使うか

これに向いている:

  • 特定ドメインの専門用語・文体を習得させる
  • 医療・法律・金融など高精度が求められる分野
  • 一貫したペルソナ(キャラクター)を持たせる
  • 同じタスクを大量に処理してコストを下げる(小モデルで代替)

これには向いていない:

  • 訓練データが少ない(最低でも数百〜数千サンプル必要)
  • 情報が頻繁に更新される(再訓練コストが高い)
  • 予算が限られている

実装例:OpenAI Fine-tuning

from openai import OpenAI
import json

client = OpenAI()

# 訓練データの準備(JSONL形式)
training_data = [
    {
        "messages": [
            {"role": "system", "content": "あなたは当社の丁寧なカスタマーサポートです。"},
            {"role": "user", "content": "返品したいのですが"},
            {"role": "assistant", "content": "ご不便をおかけして誠に申し訳ございません。返品には購入から30日以内であることと、商品が未使用状態であることが条件となります。ご注文番号をお知らせいただけますでしょうか?"}
        ]
    },
    # ... 最低500サンプル推奨
]

# JSONL書き出し
with open("training.jsonl", "w", encoding="utf-8") as f:
    for item in training_data:
        f.write(json.dumps(item, ensure_ascii=False) + "\n")

# アップロード
file = client.files.create(
    file=open("training.jsonl", "rb"),
    purpose="fine-tune"
)

# ジョブ開始
job = client.fine_tuning.jobs.create(
    training_file=file.id,
    model="gpt-4o-mini",  # 小モデルをFT → コスト削減
    hyperparameters={"n_epochs": 3}
)
print(f"Fine-tuning job: {job.id}")
# 完了後: ft:gpt-4o-mini:org:name:xxxxx

組み合わせ戦略(実務では混在が最強)

入力
 │
 ├─ シンプルな質問? → Prompt Engineering のみ(安い・速い)
 │
 ├─ 社内ドキュメント参照が必要? → RAG
 │
 ├─ 特定の口調・専門性が必要? → Fine-tuned Model
 │
 └─ 複雑なタスク → Fine-tuned Model + RAG + CoT Prompt
                    (三者を組み合わせた最高精度)

実践的な選択フローチャート

def choose_strategy(task: dict) -> str:
    if task["data_size"] == "small" and not task["needs_latest_info"]:
        return "prompt_engineering"
    
    if task["needs_latest_info"] or task["large_document_base"]:
        if task["needs_custom_style"]:
            return "rag + fine_tuned_model"
        return "rag"
    
    if task["needs_custom_style"] and task["training_data_available"]:
        return "fine_tuning"
    
    return "prompt_engineering"  # デフォルト:まずここから

コスト試算(実務ベース)

月間10万クエリを処理する場合:

手法 初期コスト 月額ランニング 合計(6ヶ月)
Prompt Engineering ¥0 ¥15,000 ¥90,000
RAG ¥50,000 ¥25,000 ¥200,000
Fine-tuning ¥200,000 ¥8,000 ¥248,000
RAG + Fine-tuning ¥250,000 ¥20,000 ¥370,000

Fine-tuningは長期運用でコストが逆転する:初期投資が高くても、推論コストが安い小モデルに置き換えれば1年後には最安になりうる。


まとめ:2026年の選択基準

  1. まずPrompt Engineeringを試す(最速・最安)
  2. 最新情報や大量ドキュメントが必要 → RAGを追加
  3. 文体・専門性・コスト削減が目的 → Fine-tuningを検討
  4. 本番環境では組み合わせが最強

460以上のAIエージェントツール・LLMインフラを網羅したAgDex.aiもぜひチェック!


🔍 AIエージェントツールをもっと探す

この記事で紹介したツール以外にも、2026年注目のAIエージェント関連ツールを探したい方は、ぜひ AgDex.ai をご活用ください。

AgDex.ai

AgDex.ai は、550以上のAIエージェントツール・フレームワーク・LLMプロバイダーをカテゴリ別に整理したキュレーションディレクトリです。

  • 🗂️ カテゴリ別検索:コアフレームワーク / エコシステム / LLM / クラウド / ツール
  • 🌐 4言語対応:日本語・英語・ドイツ語・スペイン語
  • 🔍 フィルター機能:オープンソース/クローズドソース・無料/有料・初心者/上級者
  • 🔗 直接リンクhttps://agdex.ai

毎週更新中。お気に入りのツールが見つかったらブックマーク & シェアをお願いします!


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?