LangChain Chat Model の常用パラメータ
前のセクションではinit_chat_model()の基本的な使い方を学びました。
このセクションでは、モデル呼び出し時によく使う制御パラメータを詳しく説明し、モデルの動作をよりうまく制御できるようにします。
temperature——創造性と決定性を制御する
temperature最もよく使われるパラメータで、値の範囲は0から2です。モデル出力のランダム性の程度を制御します。
例
# 同じ質問に対する、異なる temperature の比較
question = "サンプル を一言で紹介してください"
# temperature=0:出力は非常に決定的で、ほぼ毎回同じ結果になります
model_low = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
resp1 = model_low.invoke(question)
resp2 = model_low.invoke(question)
print(f"temperature=0 1回目: {resp1.content}")
print(f"temperature=0 2回目: {resp2.content}")
print(f"2回の結果は同一: {resp1.content == resp2.content}")
print()
# temperature=1.5:出力は多様になり、毎回異なる可能性があります
model_high = init_chat_model("deepseek:deepseek-v4-flash", temperature=1.5)
resp1 = model_high.invoke(question)
resp2 = model_high.invoke(question)
print(f"temperature=1.5 1回目: {resp1.content}")
print(f"temperature=1.5 2回目: {resp2.content}")
実行結果:
temperature=0 第1次: サンプル是一个为编程初学者提供免费教程的学习平台。 temperature=0 第2次: サンプル是一个为编程初学者提供免费教程的学习平台。 两次结果相同: True temperature=1.5 第1次: サンプル是一个简单易懂的编程与网络技术入门学习平台。 temperature=1.5 第2次: サンプル是深受编程新手喜爱的中文免费在线技术学习平台。
| temperature の値 | 効果 | 適用シナリオ |
|---|---|---|
| 0 ~ 0.3 | 出力は安定・決定的で、毎回ほぼ同じ結果 | データ抽出、分類、コード生成、翻訳 |
| 0.5 ~ 0.7 | 適度な創造性があり、自然でテーマから逸脱しない出力 | 日常会話、コンテンツ要約 |
| 0.8 ~ 1.2 | 出力は多様で、自由度が高い | 創作ライティング、ブレインストーミング |
| 1.3 ~ 2.0 | 出力は非常にランダムで、予期しない内容が現れる可能性があります | 探索的な生成(本番環境にはあまり推奨されません) |
temperature=0 は「完全に同じ」という意味ではありません。モデル内部計算の浮動小数点精度の違いにより、極端な場合にはわずかな差異が生じる可能性があります。絶対的な決定性が必要な場合、一部のモデルでは seed パラメータが用意されています。
max_tokens——出力長とコストを制御する
max_tokensモデル出力の最大トークン数を制限します。1トークンはおおよそ英語0.75語または中国語0.5文字に相当します。
例
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
# max_tokens=30:出力を30トークン以内に制限します
response_short = model.invoke(
"サンプル プラットフォームについて詳しく紹介してください",
max_tokens=30
)
print(f"30トークンに制限 ({len(response_short.content)} 文字):")
print(response_short.content)
print()
# max_tokens=200:より長い出力を許可します
response_long = model.invoke(
"サンプル プラットフォームについて詳しく紹介してください",
max_tokens=200
)
print(f"200トークンに制限 ({len(response_long.content)} 文字):")
print(response_long.content)
実行結果:
限制 30 tokens (42 字符): サンプル是一个面向编程初学者的在线学习平台,提供各种编程语言的教程和实例。 限制 200 tokens (306 字符): サンプル是一个面向编程初学者的在线学习平台,提供了丰富的编程教程和参考资料。 该平台涵盖了 HTML、CSS、JavaScript、Python、Java、C、C++、PHP、SQL 等多种编程语言和技术。 サンプル的特点包括: 1. 内容系统化:从基础到进阶,帮助学习者逐步掌握编程知识 2. 实例丰富:每个知识点都配有可运行的代码示例 3. ...
max_tokens は出力長のハードリミットです。設定が低すぎると、モデルの回答が文の途中で突然途切れる可能性があります。一般的にはシナリオに応じて100〜2000の間に設定することをお勧めします。「一言で回答」のようなシナリオでは30〜100で十分です。「詳細な説明」のようなシナリオでは500〜2000を推奨します。
timeout と max_retries——ネットワーク信頼性
本番環境では、ネットワークリクエストがさまざまな理由で失敗する可能性があります。これら2つのパラメータはリクエストの動作を制御するのに役立ちます。
例
# 本番環境で推奨される設定
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# 1回のリクエストの最大待機時間は30秒
timeout=30,
# 失敗時の最大リトライ回数は3回(合計4回のリクエスト機会)
max_retries=3,
)
# 正常な呼び出しをシミュレート
try:
response = model.invoke("Python とは何ですか?")
print(f"呼び出し成功: {response.content[:50]}...")
except Exception as e:
print(f"呼び出し失敗: {e}")
| パラメータ | 説明 | 推奨値 |
|---|---|---|
| timeout | 1回のリクエストの最大待機時間(秒)。None は制限なしを意味します | 30〜60(短すぎるとタイムアウトしやすく、長すぎるとユーザー体験が悪い) |
| max_retries | 失敗後のリトライ回数。0 はリトライしないことを意味します | 2〜3(偶発的なネットワーク問題を処理するのに十分) |
timeout と max_retries を設定する際の時間コストの分析:
假设 timeout=30, max_retries=3: 单次成功: ~2s 第1次失败+重试成功: ~2s + ~2s = ~4s 全部失败: 4次 × 30s = 最多 120s 才抛出异常
base_url——API アドレスのカスタマイズ
base_url パラメータは、プロキシ、中継サービス、またはプライベートデプロイを通じてモデルにアクセスする必要がある場合に非常に役立ちます。
例
# シナリオ 1:プロキシ経由で OpenAI にアクセス
model = init_chat_model(
"deepseek:deepseek-v4-flash",
base_url="https://your-proxy-domain.com/v1", # プロキシアドレス
)
# シナリオ 2:OpenAI 互換インターフェースのサードパーティサービスを使用
# 多くの国産モデルは OpenAI 互換インターフェースを提供しています
model = init_chat_model(
"deepseek:deepseek-v4-flash", # provider には openai を指定
base_url="https://api.third-party.com/v1", # ただし実際にはサードパーティを指す
api_key="your-third-party-key", # サードパーティの API Key
)
# シナリオ 3:ローカルモデルに接続(vLLM、Ollama など)
model = init_chat_model(
"openai:qwen2.5", # ローカルモデル名
base_url="http://localhost:8000/v1", # ローカルサービスアドレス
api_key="not-needed", # ローカルでは通常 Key は不要
)
base_url が変更するのは API エンドポイントのアドレスですが、provider パラメータが動作モードを決定します。たとえば provider="openai" の場合、base_url が他のサービスを指していても OpenAI のメッセージ形式が使用されます。対象サービスが指定した provider の形式と互換性があることを確認してください。
その他のよく使うパラメータ
top_p——核サンプリング
例
# top_p はランダム性を制御するもう1つの方法です
# モデルは累積確率が top_p に達するまでの語彙からのみサンプリングします
# top_p=0.1 は、最も確率の高い上位10%の語彙からだけ選択することを意味します
model = init_chat_model(
"deepseek:deepseek-v4-flash",
top_p=0.9, # 累積確率上位90%の語彙のみを考慮します
)
response = model.invoke("サンプル を紹介してください")
print(response.content[:100])
一般的には、temperature と top_p のどちらか一方だけを調整し、同時に調整しないことをお勧めします。同時に設定すると、モデルの動作が予測しにくくなる可能性があります。
stop——停止シーケンス
例
model = init_chat_model("deepseek:deepseek-v4-flash")
# stop パラメータは停止シーケンスを指定します。モデルはこれらの語に遭遇すると生成を即座に停止します
response = model.invoke(
"プログラミング学習サイトを5つ挙げて、それぞれ1行で",
stop=["\n"] # 改行に遭遇すると停止し、最初の1つだけを返します
)
print(f"制限 stop=['"\\n']: {response.content}")
実行結果:
限制 stop=['\n']: 1. サンプル
seed——再現性(一部のモデルで対応)
例
# 一部のモデルでは seed パラメータに対応しており、決定的な出力を得るために使用します
# 同じ seed + 同じ入力 = 同じ出力
model = init_chat_model("deepseek:deepseek-v4-flash", seed=42, temperature=0)
resp1 = model.invoke("サンプル を紹介してください")
resp2 = model.invoke("サンプル を紹介してください")
print(f"seed=42, 結果は同じ: {resp1.content == resp2.content}")
パラメータ早見表
| パラメータ | 型 | デフォルト値 | 使用すべきタイミング |
|---|---|---|---|
| temperature | float | モデルによって異なる | タスクに安定性が必要な場合は0〜0.3に、創造性が必要な場合は0.7〜1.0に設定します |
| max_tokens | int | モデルの上限 | 出力長を制御する必要がある場合 |
| timeout | int/float | None | 本番環境では常に設定することを推奨 |
| max_retries | int | モデルによって異なる | ネットワークが不安定な場合は2〜3を推奨 |
| base_url | str | 公式アドレス | プロキシ、中継、またはローカルサービスを使用する場合 |
| top_p | float | 1.0 | 核サンプリング制御が必要な場合(temperature の代替) |
| stop | list[str] | 无 | 出力の終端を精密に制御する必要がある場合 |