Llamada a modelos LangChain -- función init_chat_model()

init_chat_model() es una de las funciones más utilizadas en LangChain. Te permite conectarte a más de 20 proveedores de modelos de forma unificada, sin necesidad de recordar los nombres de clase y las diferencias de parámetros de cada proveedor.

Sintaxis

La sintaxis de la función init_chat_model() es la siguiente:

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 等)
)

Descripción de parámetros:

ParámetroTipoDescripciónValor predeterminado
modelstr o NoneNombre del modelo, formato provider:model. Si se pasa None, se puede usar para crear un modelo configurable.Ninguno
model_providerstr o NoneEspecifica el proveedor por separado. Se usa cuando se obtiene dinámicamente o cuando model no puede inferirlo.None
configurable_fields"any" o list o NoneLista de campos modificables en tiempo de ejecución. None indica un modelo fijo.None
config_prefixstr o NonePrefijo de las claves de configuración en escenarios de múltiples modelos, para evitar conflictos.None
**kwargsdictParámetros que se pasan al modelo subyacente.Ninguno

Explicación detallada del parámetro model

Formato provider:model (recomendado)

El formato esproveedor:nombre_del_modelo, separados por dos puntos:

Ejemplo

from langchain.chat_models import init_chat_model

# Formato 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")

Inferencia automática del proveedor de modelos

Si no se especifica el prefijo del proveedor, LangChain intentará inferirlo a partir del nombre del modelo:

Ejemplo

from langchain.chat_models import init_chat_model

# Inferir proveedor automáticamente (basado en el prefijo del nombre del modelo)
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
Prefijo del nombre del modeloProveedor inferido
gpt-、o1、o3、chatgpt、text-davinciopenai
claudeanthropic
geminigoogle_vertexai
commandcohere
deepseekdeepseek
mistral、mixtralmistralai
grokxai
sonarperplexity
amazon.、anthropic.、meta.bedrock

Aunque la inferencia automática es conveniente, no garantiza un 100 % de precisión. Por ejemplo, el prefijo gemini puede apuntar a google_vertexai o google_genai, y las versiones futuras podrían cambiar el resultado de la inferencia predeterminada. En entornos de producción se recomienda usar siempre el formato provider:model.

Parámetro model_provider

Cuando se especifica model_provider por separado, el efecto es equivalente al formato provider:model:

Ejemplo

# Las dos formas siguientes son completamente equivalentes
model = init_chat_model("claude-sonnet-4-5", model_provider="anthropic")
model = init_chat_model("anthropic:claude-sonnet-4-5")

Casos de uso de model_provider:

  • Cuando se lee dinámicamente el nombre del proveedor desde un archivo de configuración.
  • Cuando el nombre del proveedor y el nombre del modelo deben configurarse de forma independiente (cambiarlos por separado en tiempo de ejecución).
  • Cuando el nombre del modelo no puede inferirse automáticamente y no es conveniente concatenar cadenas.

Modelo fijo vs modelo configurable

init_chat_model() tiene dos modos de uso:

Modo 1: Modelo fijo

Especifica una cadena model concreta y devuelve una instancia BaseChatModel lista para usar:

Ejemplo

from langchain.chat_models import init_chat_model

# Se especifica model, se devuelve un modelo fijo
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0.7)
response = model.invoke(Introducción a EJEMPLO (tutorial para novatos))
print(response.content)

Si .env está en el directorio actual, usa el siguiente código para cargar la configuración de la ruta actual:

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("介绍Ejemplo")
print(response.content)

Modo 2: Modelo configurable

Sin especificar model (o estableciéndolo en None), se crea un modelo que puede cambiarse dinámicamente en tiempo de ejecución:

Ejemplo

from langchain.chat_models import init_chat_model

# Sin especificar model, se devuelve un modelo configurable
# Se pueden fijar algunos parámetros (como temperature=0.7), el resto se especifica en tiempo de ejecución
configurable_model = init_chat_model(temperature=0.7)

# En tiempo de ejecución se especifica el modelo mediante config
response = configurable_model.invoke(
    Introducción a EJEMPLO (tutorial para novatos),
    config={"configurable": {"model": "deepseek-v4-flash"}}
)
print(response.content)

# La misma instancia de modelo puede ejecutarse con diferentes modelos
response = configurable_model.invoke(
    Introducción a EJEMPLO (tutorial para novatos),
    config={"configurable": {"model": "claude-sonnet-4-5"}}
)
print(response.content)

El modelo configurable es muy útil en pruebas A/B y optimización de costos. Puedes cambiar de modelo o ajustar parámetros modificando la configuración sin reiniciar el servicio.


Todos los proveedores de modelos compatibles

A continuación se muestran los proveedores compatibles integrados en init_chat_model() y sus paquetes de instalación:

Nombre del proveedorPaquete de instalaciónModelo representativo
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
togetherlangchain-togethermeta-llama/Llama-3.3-70B
xailangchain-xaigrok-3
openrouterlangchain-openrouteropenai/gpt-4o、anthropic/claude-sonnet
perplexitylangchain-perplexitysonar、sonar-pro
huggingfacelangchain-huggingfaceVarios modelos de HuggingFace
coherelangchain-coherecommand-r-plus

Parámetros kwargs comunes

Los parámetros kwargs se pasan directamente a la clase del modelo subyacente. Los más comunes incluyen:

Ejemplo

from langchain.chat_models import init_chat_model

model = init_chat_model(
    "deepseek:deepseek-v4-flash",

    # Controla la aleatoriedad de la salida (0~2); cuanto menor sea el valor, más estable será la salida
    temperature=0.3,

    # Limita el número máximo de tokens de salida (controla costos)
    max_tokens=200,

    # Tiempo de espera de la solicitud (segundos)
    timeout=30,

    # Número de reintentos tras fallos
    max_retries=2,

    # Dirección de API personalizada (escenarios de proxy/intermediario)
    # base_url="https://your-proxy.com/v1",

    # Limitador de velocidad (controla la frecuencia de solicitudes)
    # rate_limiter=MyRateLimiter(requests_per_second=5),
)

response = model.invoke(¿Qué es Python (tutorial para novatos)?)
print(response.content)
ParámetroTipoDescripciónProveedores aplicables
temperaturefloatControla la aleatoriedad, 0~2; el valor predeterminado varía según el modelo.La mayoría
max_tokensintLimita el número máximo de tokens de salidaTodos
timeoutint o floatSegundos de tiempo de espera de la solicitudTodos
max_retriesintNúmero de reintentos después de un fallo de solicitudLa mayoría
base_urlstrEndpoint de API personalizadoLa mayoría
rate_limiterBaseRateLimiterInstancia del limitador de velocidadLa mayoría
top_pfloatParámetro de muestreo nuclear, 0~1La mayoría
stoplist[str]Secuencia de detención; el modelo detiene la generación cuando encuentra estas palabras.La mayoría

temperature y top_p normalmente no se configuran al mismo tiempo. temperature controla la "forma de la distribución" y top_p controla el "rango de candidatos". Para la mayoría de los escenarios, basta con ajustar temperature.


ConfigurableModel: cambiar de modelo en tiempo de ejecución

ConfigurableModel es un uso avanzado de init_chat_model() que permite especificar dinámicamente el modelo y los parámetros en tiempo de ejecución:

Ejemplo

from langchain.chat_models import init_chat_model

# Crear un modelo configurable y establecer valores predeterminados
model = init_chat_model(
    "deepseek:deepseek-v4-flash",       # Modelo predeterminado
    configurable_fields="any",  # Todos los parámetros se pueden modificar en tiempo de ejecución
    config_prefix="my",         # Prefijo de las claves de configuración
    temperature=0.3,            # Temperatura predeterminada
)

# Ejecutar con la configuración predeterminada
response = model.invoke(Introducción al tutorial para novatos)
print(fConfiguración predeterminada: {response.content[:50]}...)

# Sobrescribir modelo y parámetros en tiempo de ejecución (nota el prefijo my_)
response = model.invoke(
    Introducción a EJEMPLO (tutorial para novatos),
    config={
        "configurable": {
            "my_model": "deepseek:deepseek-v4-pro",       # Cambiar modelo
            "my_temperature": 0.9,             # Ajustar temperatura
        }
    }
)
print(fConfiguración de anulación: {response.content[:50]}...)

Valores de configurable_fields:

ValorSignificado
NoneNo configurable; devuelve un BaseChatModel normal (modo de modelo fijo).
"any"Todos los parámetros son configurables (con precaución: api_key y otros también pueden modificarse).
["model", "temperature"]Solo los campos especificados en la lista son configurables.

Al usar configurable_fields="any" ten cuidado con la seguridad: si se confía en fuentes de configuración no seguras, campos sensibles como api_key y base_url podrían ser alterados. En entornos de producción se recomienda enumerar explícitamente los campos configurables.

Otras extensiones