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ètreTypeDescriptionValeur par défaut
modelstr ou NoneNom du modèle, au format provider:model. Passer None peut être utilisé pour créer un modèle configurable.Aucune
model_providerstr ou NoneSpé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 NoneListe des champs pouvant être modifiés à l'exécution. None signifie un modèle fixe.Aucune
config_prefixstr ou NonePréfixe pour les clés de configuration dans les scénarios multi-modèles afin d'éviter les conflits.Aucune
**kwargsdictParamè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

from langchain.chat_models import init_chat_model

# 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

from langchain.chat_models import init_chat_model

# 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èleFournisseur déduit
gpt-, o1, o3, chatgpt, text-davinciopenai
claudeanthropic
geminigoogle_vertexai
commandcohere
deepseekdeepseek
mistral, mixtralmistralai
grokxai
sonarperplexity
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

# Les deux manières d'écrire suivantes sont complètement équivalentes
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

from langchain.chat_models import init_chat_model

# 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

from langchain.chat_models import init_chat_model

# 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 fournisseurPaquet d'installationModèle représentatif
openailangchain-deepseekgpt-4o、gpt-4o-mini
anthropiclangchain-anthropicclaude-sonnet-4-5、claude-opus-4-7
google_genailangchain-google-genaigemini-2.5-flash、gemini-2.5-pro
google_vertexailangchain-google-vertexaigemini-2.5-flash、gemini-2.5-pro
deepseeklangchain-deepseekdeepseek-chat、deepseek-reasoner
mistralailangchain-mistralaimistral-large、mistral-small
groqlangchain-groqllama-3.3-70b、mixtral-8x7b
ollamalangchain-ollamallama3.2、qwen2.5
fireworkslangchain-fireworksaccounts/fireworks/models/llama-v3p1-70b
ensemblelangchain-togethermeta-llama/Llama-3.3-70B
xailangchain-xaigrok-3
openrouterlangchain-openrouteropenai/gpt-4o、anthropic/claude-sonnet
perplexitylangchain-perplexitysonar、sonar-pro
huggingfacelangchain-huggingfaceDifférents modèles HuggingFace
coherelangchain-coherecommand-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

from langchain.chat_models import init_chat_model

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ètreTypeDescriptionFournisseurs applicables
temperaturefloatContrôle le caractère aléatoire, 0~2, la valeur par défaut varie selon le modèleLa plupart
max_tokensintLimite le nombre maximum de tokens de sortieTous
timeoutint ou floatDélai d'expiration de la requête en secondesTous
max_retriesintNombre de tentatives après échec de la requêteLa plupart
base_urlstrPoint de terminaison d'API personnaliséLa plupart
rate_limiterBaseRateLimiterInstance de limitation de débitLa plupart
top_pfloatParamètre d'échantillonnage nucleus, 0~1La plupart
stoplist[str]Séquences d'arrêt ; le modèle arrête de générer lorsqu'il rencontre ces motsLa 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

from langchain.chat_models import init_chat_model

# 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 :

ValeurSignification
AucuneNon 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

Lorsque 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.

Autres extensions