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ámetro | Tipo | Descripción | Valor predeterminado |
|---|---|---|---|
| model | str o None | Nombre del modelo, formato provider:model. Si se pasa None, se puede usar para crear un modelo configurable. | Ninguno |
| model_provider | str o None | Especifica el proveedor por separado. Se usa cuando se obtiene dinámicamente o cuando model no puede inferirlo. | None |
| configurable_fields | "any" o list o None | Lista de campos modificables en tiempo de ejecución. None indica un modelo fijo. | None |
| config_prefix | str o None | Prefijo de las claves de configuración en escenarios de múltiples modelos, para evitar conflictos. | None |
| **kwargs | dict | Pará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
# 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
# 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 modelo | Proveedor inferido |
|---|---|
| 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 |
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
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
# 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
# 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 proveedor | Paquete de instalación | Modelo representativo |
|---|---|---|
| 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 | Varios modelos de HuggingFace |
| cohere | langchain-cohere | command-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
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ámetro | Tipo | Descripción | Proveedores aplicables |
|---|---|---|---|
| temperature | float | Controla la aleatoriedad, 0~2; el valor predeterminado varía según el modelo. | La mayoría |
| max_tokens | int | Limita el número máximo de tokens de salida | Todos |
| timeout | int o float | Segundos de tiempo de espera de la solicitud | Todos |
| max_retries | int | Número de reintentos después de un fallo de solicitud | La mayoría |
| base_url | str | Endpoint de API personalizado | La mayoría |
| rate_limiter | BaseRateLimiter | Instancia del limitador de velocidad | La mayoría |
| top_p | float | Parámetro de muestreo nuclear, 0~1 | La mayoría |
| stop | list[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
# 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:
| Valor | Significado |
|---|---|
| None | No 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. |
Otras extensionesAl 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.