LangChain Chat Model の常用パラメータ

前のセクションではinit_chat_model()の基本的な使い方を学びました。

このセクションでは、モデル呼び出し時によく使う制御パラメータを詳しく説明し、モデルの動作をよりうまく制御できるようにします。


temperature——創造性と決定性を制御する

temperature最もよく使われるパラメータで、値の範囲は0から2です。モデル出力のランダム性の程度を制御します。

例

from langchain.chat_models import init_chat_model

# 同じ質問に対する、異なる 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文字に相当します。

例

from langchain.chat_models import init_chat_model

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つのパラメータはリクエストの動作を制御するのに役立ちます。

例

from langchain.chat_models import init_chat_model

# 本番環境で推奨される設定
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}")
パラメータ説明推奨値
timeout1回のリクエストの最大待機時間(秒)。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 パラメータは、プロキシ、中継サービス、またはプライベートデプロイを通じてモデルにアクセスする必要がある場合に非常に役立ちます。

例

from langchain.chat_models import init_chat_model

# シナリオ 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——核サンプリング

例

from langchain.chat_models import init_chat_model

# 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——停止シーケンス

例

from langchain.chat_models import init_chat_model

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——再現性(一部のモデルで対応)

例

from langchain.chat_models import init_chat_model

# 一部のモデルでは 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}")

パラメータ早見表

パラメータ型デフォルト値使用すべきタイミング
temperaturefloatモデルによって異なるタスクに安定性が必要な場合は0〜0.3に、創造性が必要な場合は0.7〜1.0に設定します
max_tokensintモデルの上限出力長を制御する必要がある場合
timeoutint/floatNone本番環境では常に設定することを推奨
max_retriesintモデルによって異なるネットワークが不安定な場合は2〜3を推奨
base_urlstr公式アドレスプロキシ、中継、またはローカルサービスを使用する場合
top_pfloat1.0核サンプリング制御が必要な場合(temperature の代替)
stoplist[str]无出力の終端を精密に制御する必要がある場合
その他の拡張機能