ブログに戻る

AI入門ガイド

システムプロンプトと temperature: それぞれの役割と設定方法

OpenAI 互換リクエストにおけるシステムメッセージと temperature の役割を、CheapTokens モデルに送信できる Python と curl の例とともに説明します。

投稿者: CheapTokens Team公開日 更新日 読了時間 7 分

チャットリクエストの図: ルールを含むシステムメッセージ、タスクを含むユーザーメッセージ、temperature のダイヤル
このページの内容
  1. システムプロンプトとは?
  2. 役立つシステムプロンプトの書き方
  3. Temperature は何をする?
  4. 両方を指定してリクエストを送る
  5. Temperature の働きを見る
  6. どのモデルで試すか
  7. うまくいかない場合
  8. 次のステップ

システムプロンプトとは、役割がsystemであるメッセージで、モデルにあらゆる回答でどう振る舞うかを伝えるものです。何者か、どの形式を使うか、何を避けるか。Temperature は通常 0 から 2 の間の数値(範囲はモデルによって異なります)で、文言がどれだけ変動してよいかを設定します。低い値では焦点が絞られ再現性のある回答になり、高い値ではより多様な回答になります。どちらも同じ Chat Completions リクエストに入れて、https://api.cheaptokens.dev/v1 に送信します。

以下では、それぞれが何か、最初にどの値から始めるか、Python または curl で実行できるリクエストを説明します。まだリクエストを送ったことがない場合は、CheapTokens での最初の API リクエストから始めてください。

システムプロンプトとは?#

チャットリクエストはメッセージのリストで、各メッセージには役割があります。Chat Completions リファレンスには 4 つが記載されています: system、user、assistant、tool(DeepSeek API リファレンス、2026年10月22日確認)。最初のリクエストには 3 つ必要です:

  • system — あなた(開発者)からの常設の指示。モデルはこれを会話のルールとして扱います。
  • user — このターンで人が尋ねたり提供したりする内容。
  • assistant — モデルの以前の回答。会話を続けるときに自分で追加します。

システムメッセージには role を system に設定し、content を文字列として指定する必要があります。name フィールドは任意です。

json
"messages": [
  {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
  {"role": "user", "content": "Send me the report by tonight or I will be upset."}
]

システムメッセージは先頭に置きます。ユーザーメッセージが実際のタスクです。

役立つシステムプロンプトの書き方#

  • モデルが何をするかを一文で述べる: 「あなたは編集者です」「あなたはサポートチケットを分類します」。
  • 出力形式を指定する: 「書き換えたテキストだけを返してください」「2 文で答えてください」「有効な JSON で返信してください」。
  • ルールは短く直接的な文で与える。長い一段落より、明確な複数行のほうがうまく機能します。
  • 短く保つ。システムプロンプトは毎回のリクエストで送信され、入力トークンとして数えられるため、長いものは毎回課金されます。入力と出力の課金方法は入力トークンと出力トークンにあります。

Temperature は何をする?#

モデルは次に来る各トークンを、候補の集合から選びます。Temperature は、最も確率の高い候補にどれだけ厳密に従うかを制御します。DeepSeek API リファレンス(2026年10月22日確認)によると、temperature は 0 から 2 の値を受け付け、デフォルトは 1 です。高い値ではよりランダムな出力、低い値ではより焦点が絞られた決定論的な出力になります。範囲はモデルによって異なります。DeepSeek は 0 から 2、Z.ai は GLM-5.3 について 0 から 1 を記載しています(いずれも2026年10月22日確認)。そのため 0 から 1 の値なら両方で安全です。お使いのモデルの範囲はドキュメントで確認してください。

ほとんどのタスクで機能する出発点です。これは経験則であり、保証ではありません:

タスク 開始値
抽出、分類、コード、厳密な形式 0 から 0.3
質疑応答、要約、書き換え 0.3 から 0.7
ブレインストーミング、名前、創造的なテキスト 0.8 から 1

知っておくべき 3 つのこと:

  1. 低い temperature はより再現性が高いが、同一ではない。 バイト単位で等しい回答を期待しないでください。
  2. temperature か top_p のどちらか一方を変え、両方は変えない。 これは DeepSeek の推奨です。top_p はデフォルト 1 の第 2 のサンプリングパラメータです。学習中はそのままにしておいてください。
  3. 一部のモードは temperature を無視する。 DeepSeek リファレンスによると、thinking モードでは temperature は効果がなく、非 thinking モードでは top_p は 1.0 に固定されています。値を変えても違いが見られない場合は、まずモデルのモードを確認してください。

両方を指定してリクエストを送る#

キーは環境変数として設定し、コードに残らないようにします(API キーとは何か、安全に保存する方法を参照)。正確なモデル ID は CheapTokens ドキュメントから取得してください。プロバイダーによって同じモデルの名前が異なります。この例では MiniMax-M2.7 を使用します。

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[
        {"role": "system", "content": "You are an editor. Rewrite the user's text to be shorter and friendlier. Return only the rewritten text."},
        {"role": "user", "content": "Send me the report by tonight or I will be upset."},
    ],
    temperature=0.3,
    max_tokens=1000,
)

print(response.choices[0].message.content)
print(response.choices[0].finish_reason)

同じリクエストを curl で:

bash
curl https://api.cheaptokens.dev/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPTOKENS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMaxAI/MiniMax-M2.7",
    "messages": [
      {"role": "system", "content": "You are an editor. Rewrite the user'\''s text to be shorter and friendlier. Return only the rewritten text."},
      {"role": "user", "content": "Send me the report by tonight or I will be upset."}
    ],
    "temperature": 0.3,
    "max_tokens": 1000
  }'

表示されるべきもの: その文の短くより親しみやすいバージョンと、finish_reason としての stop。finish_reason が length の場合、回答が max_tokens の上限に達しています。AI の回答が途中で止まる理由を参照してください。

Temperature の働きを見る#

Temperature を理解する最良の方法は、同じ質問を何度か尋ねることです。このループは、上の例の client を使って、短いリクエストを 0 で 3 回、1 で 3 回送信します:

python
for temp in (0, 1):
    print("temperature", temp)
    for _ in range(3):
        r = client.chat.completions.create(
            model="MiniMaxAI/MiniMax-M2.7",
            messages=[
                {"role": "system", "content": "Answer with one word."},
                {"role": "user", "content": "Name a fruit."},
            ],
            temperature=temp,
            max_tokens=500,
        )
        print(" ", r.choices[0].message.content)

0 では 3 行は通常同じ単語になり、1 では通常より多くの異なる単語が見られます。答える前に推論するモデルは、その推論に max_tokens の一部を使うことがあるため、1 語の回答でも上限を余裕をもって設定してください。次にシステムプロンプトだけを変更し(たとえば「1 語でフランス語で答えてください」)、もう一度実行してください。システムメッセージのルールはどの temperature でも適用されます。

このような実験は小規模です。目安として、約 120 入力トークンと 80 出力トークンのリクエスト 100 回分のコストを示します(例示的なワークロードで、トークン数はプロンプトによって異なります):

モデル リクエストあたり 100 リクエスト OpenRouter、100 リクエスト
GLM-5.3-Flash $0.0000056 $0.00056 $0.0011
DeepSeek-V4-Flash $0.0000098 $0.00098 $0.0018
MiniMax-M2.7 $0.000018 $0.0018 $0.0132

リクエストあたり 120 入力トークンと 80 出力トークン。100万トークンあたりの価格は現行のもので、当社の料金体系に合わせて変動します。OpenRouter 列は同じワークロードの参考価格を示しています。

どのモデルで試すか#

  • MiniMax-M2.7 は多くの短いテストリクエストに適した最初の選択肢で、同じシステムプロンプトを再利用して回答を比較できます: 180K コンテキスト、最大 8,192 出力トークン、入力・出力の両方で OpenRouter の参照価格より安価です。現在の価格: 入力 $0.05、出力 $0.15(100 万トークンあたり)。

1 つの残高ですべてをカバーできるため、モデルの切り替えは model の 1 行の変更です。現在の価格はすべて料金ページにあります。

うまくいかない場合#

  • 401 または認証エラー: キーがない、入力ミス、またはこのターミナルで環境変数が設定されていません。echo $CHEAPTOKENS_API_KEY を確認してください。
  • モデルが見つからない: モデル ID をドキュメントからプレフィックスを含めて正確にコピーしてください。
  • 無効なパラメータに関するエラー: temperature をモデルがサポートする範囲内(0 から 1 なら安全)に保ち、文字列ではなく数値を渡してください。
  • モデルがルールを無視する: 短く直接的な一文にし、システムメッセージの先頭に移動し、希望する正確な形式を繰り返してください。
  • temperature を変えても何も変わらない: それを無視するモードを使っているか(上記参照)、回答が非常に制約されている(「1 語」「有効な JSON」)ため変動がほとんどない可能性があります。
  • 回答が途中で切れる: max_tokens を上げてください。max_tokens ガイドで方法を説明しています。

次のステップ#

システムメッセージに明確なルールを 1 つ入れ、表から temperature を選び、自分のタスクで上のループを実行してください。結果が望むものであれば、システムプロンプトを短く保ち再利用してください。キーを取得し、現在の価格をドキュメントで確認してください。