LangChain モデル呼び出し -- init_chat_model() 関数
LangChain init_chat_model() は LangChain で最もよく使われる関数の一つで、統一された方法で 20 以上のモデルプロバイダーに接続でき、各プロバイダーのクラス名やパラメータの違いを覚える必要はありません。
構文
init_chat_model() 関数の構文は次のとおりです:
from langchain.chat_models import init_chat_model
# 完整语法
model = init_chat_model(
model, # str | None:模型名称(provider:model 格式)
*,
model_provider=None, # str | None:单独的模型提供商
configurable_fields=None, # None | "any" | list[str]:可运行时修改的字段
config_prefix=None, # str | None:配置键前缀
**kwargs, # 模型特定参数(temperature、max_tokens 等)
)パラメータの説明:
| パラメータ | 型 | 説明 | デフォルト値 |
|---|---|---|---|
| model | str または None | モデル名、provider:model 形式。None を渡すと設定可能モデルの作成に使用できます | 无 |
| model_provider | str または None | プロバイダーを個別に指定します。動的に取得する場合や model から推論できない場合に使用します | None |
| configurable_fields | "any" または list または None | 実行時に変更可能なフィールドのリスト。None は固定モデルを意味します | None |
| config_prefix | str または None | 複数モデルのシナリオで設定キーのプレフィックスを付け、競合を避けます | None |
| **kwargs | dict | 基盤となるモデルに渡すパラメータ | 无 |
model パラメータの詳細
provider:model 形式(推奨)
形式はプロバイダー:モデル名で、コロンで区切ります:
例
# provider:model 形式
model = init_chat_model("deepseek:deepseek-v4-flash")
model = init_chat_model("anthropic:claude-sonnet-4-5-20250929")
model = init_chat_model("deepseek:deepseek-chat")
model = init_chat_model("ollama:llama3.2")
model = init_chat_model("groq:llama-3.3-70b")
モデルプロバイダーの自動推論
プロバイダーのプレフィックスを指定しない場合、LangChain はモデル名から推論を試みます:
例
# プロバイダーを自動推論(モデル名のプレフィックスに基づく)
model = init_chat_model("deepseek-v4-flash") # → openai
model = init_chat_model("claude-sonnet-4-5") # → anthropic
model = init_chat_model("deepseek-chat") # → deepseek
model = init_chat_model("grok-3") # → xai
model = init_chat_model("mistral-large") # → mistralai
| モデル名のプレフィックス | 推論されるプロバイダー |
|---|---|
| gpt-、o1、o3、chatgpt、text-davinci | openai |
| claude | anthropic |
| gemini | google_vertexai |
| command | cohere |
| deepseek | deepseek |
| mistral、mixtral | mistralai |
| grok | xai |
| sonar | perplexity |
| amazon.、anthropic.、meta. | bedrock |
自動推論は便利ですが、100% 正しいとは限りません。例えば gemini プレフィックスは google_vertexai または google_genai を指す可能性があり、将来のバージョンでデフォルトの推論結果が変わる可能性があります。本番環境では常に provider:model 形式を使用することをお勧めします。
model_provider パラメータ
model_provider を個別に指定した場合、provider:model 形式と同じ効果になります:
例
model = init_chat_model("claude-sonnet-4-5", model_provider="anthropic")
model = init_chat_model("anthropic:claude-sonnet-4-5")
model_provider を使用するシナリオ:
- 設定ファイルからプロバイダー名を動的に読み取る場合
- プロバイダー名とモデル名を独立して設定する必要がある場合(実行時にそれぞれ切り替える)
- モデル名が自動推論できず、文字列の連結が不便な場合
固定モデル vs 設定可能モデル
init_chat_model() には2つの使用モードがあります:
パターン 1:固定モデル
具体的な model 文字列を指定すると、すぐに使用できる BaseChatModel インスタンスが返されます:
例
# model を指定すると、固定モデルが返される
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7)
response = model.invoke("サンプル を紹介")
print(response.content)
.env が現在のディレクトリにある場合は、以下のコードを使用して現在のパスの設定を読み込みます:
import os from dotenv import load_dotenv # 加载当前目录 .env 文件 load_dotenv() from langchain.chat_models import init_chat_model # 指定了 model,返回固定模型 model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7) response = model.invoke("介绍サンプル") print(response.content)
パターン 2:設定可能モデル
model を指定せず(または None に設定)、実行時に動的に切り替えられるモデルを作成します:
例
# model を指定しないと、設定可能モデルが返される
# 一部のパラメータ(temperature=0.7 など)は固定でき、残りは実行時に指定する
configurable_model = init_chat_model(temperature=0.7)
# 実行時に config でモデルを指定する
response = configurable_model.invoke(
"サンプル を紹介",
config={"configurable": {"model": "deepseek-v4-flash"}}
)
print(response.content)
# 同じモデルインスタンスでも、異なるモデルで実行できる
response = configurable_model.invoke(
"サンプル を紹介",
config={"configurable": {"model": "claude-sonnet-4-5"}}
)
print(response.content)
設定可能モデルは A/B テストやコスト最適化に非常に役立ちます。サービスを再起動することなく、設定を変更するだけでモデルを切り替えたりパラメータを調整したりできます。
サポートされているすべてのモデルプロバイダー
以下は init_chat_model() が内蔵サポートするプロバイダーとそのインストールパッケージです:
| provider 名 | インストールパッケージ | 代表的なモデル |
|---|---|---|
| openai | langchain-deepseek | gpt-4o、gpt-4o-mini |
| anthropic | langchain-anthropic | claude-sonnet-4-5、claude-opus-4-7 |
| google_genai | langchain-google-genai | gemini-2.5-flash、gemini-2.5-pro |
| google_vertexai | langchain-google-vertexai | gemini-2.5-flash、gemini-2.5-pro |
| deepseek | langchain-deepseek | deepseek-chat、deepseek-reasoner |
| mistralai | langchain-mistralai | mistral-large、mistral-small |
| groq | langchain-groq | llama-3.3-70b、mixtral-8x7b |
| ollama | langchain-ollama | llama3.2、qwen2.5 |
| fireworks | langchain-fireworks | accounts/fireworks/models/llama-v3p1-70b |
| together | langchain-together | meta-llama/Llama-3.3-70B |
| xai | langchain-xai | grok-3 |
| openrouter | langchain-openrouter | openai/gpt-4o、anthropic/claude-sonnet |
| perplexity | langchain-perplexity | sonar、sonar-pro |
| huggingface | langchain-huggingface | 各種 HuggingFace モデル |
| cohere | langchain-cohere | command-r-plus |
一般的な kwargs パラメータ
kwargs パラメータは基盤となるモデルクラスに直接渡されます。一般的なものは次のとおりです:
例
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# 出力のランダム性を制御(0〜2)、値が小さいほど出力が安定する
temperature=0.3,
# 出力の最大トークン数を制限(コストを制御)
max_tokens=200,
# リクエストのタイムアウト時間(秒)
timeout=30,
# 失敗時の再試行回数
max_retries=2,
# カスタム API アドレス(プロキシ/中継シナリオ)
# base_url="https://your-proxy.com/v1",
# レートリミッター(リクエスト頻度を制御)
# rate_limiter=MyRateLimiter(requests_per_second=5),
)
response = model.invoke("Python とは?")
print(response.content)
| パラメータ | 型 | 説明 | 対応プロバイダー |
|---|---|---|---|
| temperature | float | ランダム性を制御、0〜2、デフォルト値はモデルによって異なる | 大部分 |
| max_tokens | int | 出力の最大トークン数を制限 | すべて |
| timeout | int または float | リクエストのタイムアウト秒数 | すべて |
| max_retries | int | リクエスト失敗後の再試行回数 | 大部分 |
| base_url | str | カスタム API エンドポイント | 大部分 |
| rate_limiter | BaseRateLimiter | レートリミッターのインスタンス | 大部分 |
| top_p | float | 核サンプリングパラメータ、0〜1 | 大部分 |
| stop | list[str] | 停止シーケンス。モデルはこれらの語に遭遇すると生成を停止します | 大部分 |
temperature と top_p は通常同時に設定しません。temperature は「分布の形状」を制御し、top_p は「候補範囲」を制御します。ほとんどのシナリオでは、temperature だけを調整すれば十分です。
ConfigurableModel——実行時のモデル切り替え
ConfigurableModel は init_chat_model() の高度な使い方で、実行時にモデルとパラメータを動的に指定できます:
例
# 設定可能モデルを作成し、デフォルト値を設定
model = init_chat_model(
"deepseek:deepseek-v4-flash", # デフォルトモデル
configurable_fields="any", # すべてのパラメータは実行時に変更可能
config_prefix="my", # 設定キーのプレフィックス
temperature=0.3, # デフォルトの温度
)
# デフォルト設定で実行
response = model.invoke("サンプル を紹介")
print(f"デフォルト設定: {response.content[:50]}...")
# 実行時にモデルとパラメータを上書き(my_ プレフィックスに注意)
response = model.invoke(
"サンプル を紹介",
config={
"configurable": {
"my_model": "deepseek:deepseek-v4-pro", # モデルの切り替え
"my_temperature": 0.9, # 温度の調整
}
}
)
print(f"上書き設定: {response.content[:50]}...")
configurable_fields の値:
| 值 | 意味 |
|---|---|
| None | 設定不可。通常の BaseChatModel を返します(固定モデルモード) |
| "any" | すべてのパラメータが設定可能(セキュリティに注意:api_key なども変更可能) |
| ["model", "temperature"] | リストで指定されたフィールドのみ設定可能 |
その他の拡張configurable_fields="any" を使用する際はセキュリティに注意してください:安全でない設定ソースを信頼すると、api_key や base_url などの機密フィールドが改ざんされる可能性があります。本番環境では設定可能なフィールドを明示的に列挙することをお勧めします。