Invocation de modèle LangChain -- Fonction init_chat_model()
LangChain init_chat_model() est l'une des fonctions les plus couramment utilisées dans LangChain. Elle vous permet de vous connecter à plus de 20 fournisseurs de modèles de manière unifiée, sans avoir à mémoriser les noms de classes et les différences de paramètres de chaque fournisseur.
Syntaxe
La syntaxe de la fonction init_chat_model() est la suivante :
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 等)
)Description des paramètres :
| Paramètre | Type | Description | Valeur par défaut |
|---|---|---|---|
| model | str ou None | Nom du modèle, au format provider:model. Passer None peut être utilisé pour créer un modèle configurable. | Aucune |
| model_provider | str ou None | Spécifier le fournisseur séparément. Utilisé lorsqu'il est obtenu dynamiquement ou lorsque le modèle ne peut pas être déduit. | Aucune |
| configurable_fields | "any", list, ou None | Liste des champs pouvant être modifiés à l'exécution. None signifie un modèle fixe. | Aucune |
| config_prefix | str ou None | Préfixe pour les clés de configuration dans les scénarios multi-modèles afin d'éviter les conflits. | Aucune |
| **kwargs | dict | Paramètres transmis au modèle sous-jacent. | Aucune |
Explication détaillée du paramètre model
format provider:model (recommandé)
Le format estprovider:model name, séparé par deux-points :
Exemple
# format 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")
Déduction automatique du fournisseur de modèle
Si vous ne spécifiez pas le préfixe du fournisseur, LangChain essaiera de le déduire à partir du nom du modèle :
Exemple
# Déduire automatiquement le fournisseur (en fonction du préfixe du nom du modèle)
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
| Préfixe du nom du modèle | Fournisseur déduit |
|---|---|
| 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 |
L'inférence automatique est pratique, mais n'est pas garantie d'être correcte à 100 %. Par exemple, le préfixe gemini peut pointer vers google_vertexai ou google_genai, et les versions futures peuvent modifier le résultat d'inférence par défaut. Il est recommandé de toujours utiliser le format provider:model dans les environnements de production.
Paramètre model_provider
Lorsque model_provider est spécifié séparément, l'effet est équivalent au format provider:model :
Exemple
model = init_chat_model("claude-sonnet-4-5", model_provider="anthropic")
model = init_chat_model("anthropic:claude-sonnet-4-5")
Scénarios d'utilisation de model_provider :
- Lors de la lecture dynamique du nom du fournisseur depuis un fichier de configuration
- Lorsque le nom du fournisseur et le nom du modèle doivent être configurés indépendamment (changés séparément à l'exécution)
- Lorsque le nom du modèle ne peut pas être déduit automatiquement et qu'il est peu pratique de concaténer des chaînes
Modèle fixe vs modèle configurable
init_chat_model() a deux modes d'utilisation :
Mode 1 : modèle fixe
Spécifiez une chaîne de modèle spécifique ; renvoie une instance BaseChatModel qui peut être utilisée directement :
Exemple
# modèle spécifié, renvoie un modèle fixe
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7)
response = model.invoke("Présentez Python Python")
print(response.content)
Si .env se trouve dans le répertoire courant, utilisez le code suivant pour charger la configuration depuis le chemin actuel :
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("介绍Example") print(response.content)
Mode 2 : modèle configurable
Ne spécifiez pas de modèle (ou définissez-le sur None) pour créer un modèle qui peut être commuté dynamiquement à l'exécution :
Exemple
# Ne spécifiez pas de modèle, renvoie un modèle configurable
# Vous pouvez fixer certains paramètres (par exemple, temperature=0.7) et spécifier le reste à l'exécution
configurable_model = init_chat_model(temperature=0.7)
# Spécifiez le modèle via config à l'exécution
response = configurable_model.invoke(
"Présentez Python Python",
config={"configurable": {"model": "deepseek-v4-flash"}}
)
print(response.content)
# La même instance de modèle peut s'exécuter avec différents modèles
response = configurable_model.invoke(
"Présentez Python Python",
config={"configurable": {"model": "claude-sonnet-4-5"}}
)
print(response.content)
Les modèles configurables sont très utiles pour les tests A/B et l'optimisation des coûts. Vous pouvez changer de modèle ou ajuster les paramètres en modifiant la configuration sans redémarrer le service.
Tous les fournisseurs de modèles pris en charge
Voici les fournisseurs pris en charge nativement par init_chat_model() et leurs paquets d'installation :
| nom du fournisseur | Paquet d'installation | Modèle représentatif |
|---|---|---|
| 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 |
| ensemble | 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 | Différents modèles HuggingFace |
| cohere | langchain-cohere | command-r-plus |
Paramètres kwargs courants
Les paramètres kwargs sont transmis directement à la classe de modèle sous-jacente. Les plus couramment utilisés incluent :
Exemple
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# Contrôle le caractère aléatoire de la sortie (0~2), plus la valeur est petite, plus la sortie est stable
temperature=0.3,
# Limite le nombre maximal de tokens de sortie (contrôle le coût)
max_tokens=200,
# Délai d'expiration de la requête (secondes)
timeout=30,
# Nombre de tentatives après un échec
max_retries=2,
# Adresse d'API personnalisée (scénarios proxy/relais)
# base_url="https://your-proxy.com/v1",
# Limiteur de débit (contrôle la fréquence des requêtes)
# rate_limiter=MyRateLimiter(requests_per_second=5),
)
response = model.invoke("Qu'est-ce que Python Python ?")
print(response.content)
| Paramètre | Type | Description | Fournisseurs applicables |
|---|---|---|---|
| temperature | float | Contrôle le caractère aléatoire, 0~2, la valeur par défaut varie selon le modèle | La plupart |
| max_tokens | int | Limite le nombre maximum de tokens de sortie | Tous |
| timeout | int ou float | Délai d'expiration de la requête en secondes | Tous |
| max_retries | int | Nombre de tentatives après échec de la requête | La plupart |
| base_url | str | Point de terminaison d'API personnalisé | La plupart |
| rate_limiter | BaseRateLimiter | Instance de limitation de débit | La plupart |
| top_p | float | Paramètre d'échantillonnage nucleus, 0~1 | La plupart |
| stop | list[str] | Séquences d'arrêt ; le modèle arrête de générer lorsqu'il rencontre ces mots | La plupart |
temperature et top_p ne sont généralement pas définis en même temps. temperature contrôle la "forme de la distribution", tandis que top_p contrôle la "plage de candidats". Dans la plupart des scénarios, ajuster uniquement temperature est suffisant.
ConfigurableModel—Changement de modèle à l'exécution
ConfigurableModel est une utilisation avancée de init_chat_model(), vous permettant de spécifier dynamiquement des modèles et des paramètres à l'exécution :
Exemple
# Créer un modèle configurable et définir les valeurs par défaut
model = init_chat_model(
"deepseek:deepseek-v4-flash", # Modèle par défaut
configurable_fields="any", # Tous les paramètres peuvent être modifiés à l'exécution
config_prefix="my", # Préfixe de clé de configuration
temperature=0.3, # Température par défaut
)
# Exécuter avec la configuration par défaut
response = model.invoke("Présentez Python")
print(f"Configuration par défaut : {response.content[:50]}...")
# Remplacer le modèle et les paramètres à l'exécution (notez le préfixe my_)
response = model.invoke(
"Présentez Python Python",
config={
"configurable": {
"my_model": "deepseek:deepseek-v4-pro", # Changer de modèle
"my_temperature": 0.9, # Ajuster la température
}
}
)
print(f"Configuration remplacée : {response.content[:50]}...")
Valeurs possibles de configurable_fields :
| Valeur | Signification |
|---|---|
| Aucune | Non configurable, renvoie un BaseChatModel ordinaire (mode modèle fixe) |
| "any" | Tous les paramètres sont configurables (attention au risque de sécurité : api_key, etc. peuvent aussi être modifiés) |
| ["model", "temperature"] | Seuls les champs spécifiés dans la liste sont configurables |
Autres extensionsLorsque vous utilisez configurable_fields="any", faites attention à la sécurité : si vous faites confiance à une source de configuration non sécurisée, des champs sensibles tels que api_key et base_url peuvent être altérés. Dans les environnements de production, il est recommandé de lister explicitement les champs configurables.