AI Prompt Engineering · レッスン

ユースケースに合わせたパラメータ選択

事実ベースのQ&A、創作、コード、チャットに推奨される設定を学びます。

レッスン 4/413 ステップ

「ユースケースに合わせたパラメータ選択」はCoddyKit上の無料AI Prompt Engineeringレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Prompt Engineering学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Prompt Engineeringコースには全4レッスンが含まれています。

パラメータ決定フレームワーク

サンプリングパラメータの選択は当て推量ではありません。タスクの要件に基づく論理に従って決められます。適切な設定を決める主な軸は2つあります。

  1. 出力の正確性:出力が正確で予測可能であることはどの程度重要ですか?
  2. 出力の多様性:出力に変化を持たせ、さまざまな可能性を探ることはどの程度重要ですか?

正確性が高い → 低いtemperature。多様性が高い → 高いtemperature。ほとんどのタスクは、この両極端の中間に位置します。

事実に基づくQ&A:正確性が最優先

事実に基づく質問応答では、通常、正解は1つです。ランダム性があると、誤答の可能性が高まります。次の設定を使用してください。

  • temperature = 0:貪欲デコードによる完全に決定論的な出力
  • top_p = 1.0:制限なしにします。temperature=0ではtop-pは効果を持ちません

これにより、モデルは常に最も確信度の高い回答を選択します。その回答が正しい可能性が最も高くなります。

import openai
client = openai.OpenAI(api_key='sk-...')

# Factual Q&A configuration
def factual_qa(question):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'Answer factual questions concisely and accurately.'},
            {'role': 'user', 'content': question}
        ],
        temperature=0,
        top_p=1.0
    )
    return resp.choices[0].message.content

answer = factual_qa('What is the boiling point of water at sea level?')
print(answer)  # Always: '100 degrees Celsius (212 degrees Fahrenheit).'

コード生成:ほぼ貪欲な設定

コードには、構文的な正しさと意味上の正確さが必要です。ランダム性があると、構文エラー、変数名の誤り、ロジックの間違いなどが発生します。次の設定を使用してください。

  • temperature = 0–0.2:ほぼ貪欲な設定 — わずかな変化を許容しつつ、正しいトークンの選択を強く優先します
  • top_p = 0.95:構文エラーの原因になり得る確率分布の極端な裾にあるトークンを除外します
# Code generation configuration
def generate_code(task):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'You are an expert Python programmer. Write clean, correct code.'},
            {'role': 'user', 'content': task}
        ],
        temperature=0.1,
        top_p=0.95
    )
    return resp.choices[0].message.content

code = generate_code('Write a Python function that merges two sorted lists.')
print(code)

要約:中程度の設定

要約には正確性(事実を歪めないこと)が必要ですが、適度な変化があると、実行するたびに異なる側面を強調できます。次の設定を使用してください。

  • temperature = 0.3–0.5:軽いランダム性により、自然な言い回しを保ちます
  • top_p = 1.0:temperatureが低い場合、nucleusによる制限は必要ありません
# Summarization configuration
def summarize(text):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'Summarize the following text in 3 sentences.'},
            {'role': 'user', 'content': text}
        ],
        temperature=0.4,
        top_p=1.0
    )
    return resp.choices[0].message.content

summary = summarize(long_article)
print(summary)

会話型チャット:自然な変化

チャットの応答には自然な変化があると効果的です。同じ質問に対して、常にまったく同じ言い回しになる必要はありません。ランダム性が大きすぎると、応答の一貫性が失われます。次の設定を使用してください。

  • temperature = 0.7–0.9:自然で変化に富んだ会話
  • top_p = 0.9–0.95:不自然な言い回しにつながる、確率分布の裾にある確率の低いトークンを除外します
# Chat configuration
def chat_response(user_message, history):
    messages = history + [{'role': 'user', 'content': user_message}]
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'You are a friendly, helpful assistant.'},
            *messages
        ],
        temperature=0.8,
        top_p=0.9
    )
    reply = resp.choices[0].message.content
    history.append({'role': 'user', 'content': user_message})
    history.append({'role': 'assistant', 'content': reply})
    return reply, history

クリエイティブ・ライティング:高い多様性

クリエイティブ・ライティングでは、独創性と意外性が重視されます。temperatureが低いと、決まり文句のような予測しやすい出力になります。temperatureが高いと、生き生きとした意外性のある選択が生まれますが、高すぎると一貫性が失われます。次の設定を使用してください。

  • temperature = 0.9–1.2:多様な語彙と、すぐには思いつかない単語の選択
  • top_p = 0.95:幅広い探索を可能にしながら、一貫性のない確率分布の裾にあるトークンを防ぎます
# Creative writing configuration
def write_story_opening(prompt):
    resp = client.chat.completions.create(
        model='gpt-4o',
        messages=[
            {'role': 'system', 'content': 'You are a creative fiction writer. Write vivid, original prose.'},
            {'role': 'user', 'content': f'Write a story opening for: {prompt}'}
        ],
        temperature=1.1,
        top_p=0.95
    )
    return resp.choices[0].message.content

opening = write_story_opening('A detective discovers her partner is the killer.')
print(opening)

ブレインストーミングとアイデア創出

ブレインストーミングでは、通常とは異なるものや意外なものも含め、アイデアの多様性を最大にすることが目標です。実用上可能な範囲で最も高いtemperatureを使用してください。

  • temperature = 1.0–1.5:アイデア空間を幅広く探索します
  • top_p = 0.95–1.0:制限を最小限にします

複数回実行してすべての出力を集め、その後で最良のアイデアを手作業で絞り込んでください。ブレインストーミング用のプロンプトでは、多様性を明示的に求めると効果的です。例:「型破りなものも含め、異なるアプローチを10個提示してください。」

# Brainstorming: run multiple times for variety
def brainstorm(topic, n_runs=5):
    ideas = []
    for _ in range(n_runs):
        resp = client.chat.completions.create(
            model='gpt-4o',
            messages=[
                {'role': 'system', 'content': 'Generate creative, diverse ideas. Include unusual approaches.'},
                {'role': 'user', 'content': f'Give me 3 ideas for: {topic}'}
            ],
            temperature=1.3,
            top_p=0.95
        )
        ideas.append(resp.choices[0].message.content)
    return ideas

all_ideas = brainstorm('reducing customer churn')

パラメータ感度テスト

パラメータを決定する前に、パラメータ感度テストを実行してください。プロンプトを固定したまま、一度に1つのパラメータだけを変え、それぞれの設定で出力品質を評価します。

def sensitivity_test(prompt, evaluator, temperatures, n_samples=5):
    results = {}
    for temp in temperatures:
        scores = []
        for _ in range(n_samples):
            resp = client.chat.completions.create(
                model='gpt-4o',
                messages=[{'role': 'user', 'content': prompt}],
                temperature=temp
            )
            score = evaluator(resp.choices[0].message.content)
            scores.append(score)
        results[temp] = sum(scores) / len(scores)

    for temp, score in sorted(results.items()):
        print(f'T={temp}: avg score = {score:.2f}')
    best_temp = max(results, key=results.get)
    print(f'Best temperature: {best_temp}')
    return best_temp

デフォルトのままにする場合

すべてのアプリケーションでカスタムパラメータが必要になるわけではありません。次の場合はデフォルトのままにしてください。

  • ユースケースが一般的なチャットである — デフォルトのtemperature(ほとんどのAPIでは1.0)は適切に調整されています
  • プロトタイプを作成中で、まだ適切な設定が分かっていない
  • タスクが正確性と創造性の中間にある(例:メールの下書き)

経験則として、テストでデフォルトの動作に測定可能な品質上の問題が見つかった場合にのみ、パラメータをカスタマイズしてください。早すぎるパラメータ調整は、測定可能な利点がないまま複雑さを増やします。

# Defaults are often correct
default_resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'Draft a professional email declining a meeting.'}]
    # No temperature or top_p specified — API defaults apply
    # OpenAI default: temperature=1, top_p=1
)
print(default_resp.choices[0].message.content)

クイックリファレンスカード

ユースケース別に推奨設定をまとめた表です。

PARAMETER_PRESETS = {
    # task: (temperature, top_p, notes)
    'factual_qa':        (0.0, 1.0, 'greedy, max accuracy'),
    'classification':    (0.0, 1.0, 'deterministic labels'),
    'code_generation':   (0.1, 0.95, 'near-greedy, avoid tail tokens'),
    'data_extraction':   (0.2, 1.0, 'slight variation for robustness'),
    'summarization':     (0.4, 1.0, 'preserve facts, vary phrasing'),
    'translation':       (0.3, 1.0, 'accurate but natural'),
    'chat':              (0.8, 0.9, 'natural conversation'),
    'email_drafting':    (0.7, 0.9, 'professional but varied'),
    'creative_writing':  (1.1, 0.95, 'vivid, original'),
    'brainstorming':     (1.3, 0.95, 'maximum diversity'),
}

for task, (temp, top_p, notes) in PARAMETER_PRESETS.items():
    print(f'{task:22} temp={temp}, top_p={top_p} | {notes}')

頻度ペナルティと存在ペナルティ

temperatureとtop-pを補完する、次の2つのパラメータがあります。

  • frequency_penalty (0–2):出力中にそれまでに出現した回数に比例して、トークンの確率を下げます。単語の繰り返しを防ぎます
  • presence_penalty (0–2):一度でも出現したトークンの確率を下げます。トピックの多様性を促します

クリエイティブ・ライティングでは、temperatureを変えずに単語の選択の繰り返しを減らすため、frequency_penalty=0.5を追加してください。

resp = client.chat.completions.create(
    model='gpt-4o',
    messages=[{'role': 'user', 'content': 'Write a paragraph about coffee.'}],
    temperature=1.0,
    top_p=0.95,
    frequency_penalty=0.5,  # discourage repeating the same words
    presence_penalty=0.3    # encourage introducing new topics/aspects
)
print(resp.choices[0].message.content)

理解度チェック

本番環境で実行するPythonコードを生成するタスクでは、どのパラメータ設定が最も適切ですか?

まとめ:サンプリングパラメータの選択

正確性と多様性のどちらを重視するかに応じて、パラメータを使い分けてください。

  • 事実に基づく回答/コード:temp=0–0.2、top_p=0.95 — 正確性を最優先します
  • 要約:temp=0.3–0.5 — バランスを取ります
  • チャット:temp=0.7–0.9、top_p=0.9 — 自然な変化を持たせます
  • クリエイティブ:temp=0.9–1.2、top_p=0.95 — 多様性を重視します
  • ブレインストーミング:temp=1.3、top_p=0.95 — 最大限に探索します

パラメータ感度テストを実行してください。品質上の問題が見つからない場合は、デフォルトのままにします。繰り返しの問題にはfrequency_penaltyを追加してください。これでコース19は終了です。次はプロンプトのテストとリグレッションです。

無料で開始

AI チューターと学ぶ AI Prompt Engineering — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
53
レッスン
199

よくある質問

「ユースケースに合わせたパラメータ選択」レッスンは無料ですか?

はい。「ユースケースに合わせたパラメータ選択」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Prompt Engineeringコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Prompt Engineeringコースには全4レッスンが含まれています。

「ユースケースに合わせたパラメータ選択」で何を学びますか?

事実ベースのQ&A、創作、コード、チャットに推奨される設定を学びます。 ブラウザで直接実行するハンズオンコードでAI Prompt Engineeringを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Prompt Engineeringを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Prompt Engineeringは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ユースケースに合わせたパラメータ選択」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Prompt Engineeringレッスンでコードを書いて実行できますか?

はい。すべてのAI Prompt Engineeringレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LLMにおけるTemperatureとは
  2. Top-p(Nucleus)サンプリング
  3. Top-kサンプリング
  4. ユースケースに合わせたパラメータ選択
← AI Prompt Engineeringに戻る