Parámetros comunes de LangChain Chat Model
En la sección anterior aprendimosinit_chat_model()el uso básico de.
Esta sección presenta en detalle los parámetros de control comunes al llamar al modelo, para ayudarte a controlar mejor el comportamiento del modelo.
temperature: controla la creatividad y la determinación
temperatureEs el parámetro más utilizado, con un rango de valores de 0 a 2. Controla el grado de aleatoriedad de la salida del modelo.
Ejemplo
# Comparación de diferentes valores de temperature para la misma pregunta
question = "Presenta Ejemplo en una frase"
# temperature=0: salida muy determinista, casi idéntica cada vez
model_low = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
resp1 = model_low.invoke(question)
resp2 = model_low.invoke(question)
print(f"temperature=0 1.ª vez: {resp1.content}")
print(f"temperature=0 2.ª vez: {resp2.content}")
print(f"¿Los dos resultados son iguales?: {resp1.content == resp2.content}")
print()
# temperature=1.5: salida diversa, puede variar cada vez
model_high = init_chat_model("deepseek:deepseek-v4-flash", temperature=1.5)
resp1 = model_high.invoke(question)
resp2 = model_high.invoke(question)
print(f"temperature=1.5 1.ª vez: {resp1.content}")
print(f"temperature=1.5 2.ª vez: {resp2.content}")
Resultado de la ejecución:
temperature=0 第1次: Ejemplo是一个为编程初学者提供免费教程的学习平台。 temperature=0 第2次: Ejemplo是一个为编程初学者提供免费教程的学习平台。 两次结果相同: True temperature=1.5 第1次: Ejemplo是一个简单易懂的编程与网络技术入门学习平台。 temperature=1.5 第2次: Ejemplo是深受编程新手喜爱的中文免费在线技术学习平台。
| Valor de temperature | Efecto | Escenario de aplicación |
|---|---|---|
| 0 ~ 0.3 | Salida estable y determinista, resultados casi idénticos cada vez | Extracción de datos, clasificación, generación de código, traducción |
| 0.5 ~ 0.7 | Creatividad moderada, salida natural sin desviarse del tema | Diálogo cotidiano, resumen de contenido |
| 0.8 ~ 1.2 | Salida diversa, con más margen para la creatividad | Escritura creativa, lluvia de ideas |
| 1.3 ~ 2.0 | Salida muy aleatoria, puede aparecer contenido inesperado | Generación exploratoria (no muy recomendada para producción) |
temperature=0 no equivale a "exactamente igual". Debido a diferencias de precisión de punto flotante en los cálculos internos del modelo, puede haber pequeñas diferencias en casos extremos. Si se necesita una determinación absoluta, algunos modelos ofrecen el parámetro seed.
max_tokens: controla la longitud de salida y el costo
max_tokensLimita el número máximo de tokens de la salida del modelo. Un token equivale aproximadamente a 0,75 palabras en inglés o 0,5 caracteres chinos.
Ejemplo
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
# max_tokens=30: limita la salida a un máximo de 30 tokens
response_short = model.invoke(
"Presenta en detalle la plataforma Ejemplo",
max_tokens=30
)
print(f"Límite de 30 tokens ({len(response_short.content)} caracteres):")
print(response_short.content)
print()
# max_tokens=200: permite una salida más larga
response_long = model.invoke(
"Presenta en detalle la plataforma Ejemplo",
max_tokens=200
)
print(f"Límite de 200 tokens ({len(response_long.content)} caracteres):")
print(response_long.content)
Resultado de la ejecución:
限制 30 tokens (42 字符): Ejemplo是一个面向编程初学者的在线学习平台,提供各种编程语言的教程和实例。 限制 200 tokens (306 字符): Ejemplo是一个面向编程初学者的在线学习平台,提供了丰富的编程教程和参考资料。 该平台涵盖了 HTML、CSS、JavaScript、Python、Java、C、C++、PHP、SQL 等多种编程语言和技术。 Ejemplo的特点包括: 1. 内容系统化:从基础到进阶,帮助学习者逐步掌握编程知识 2. 实例丰富:每个知识点都配有可运行的代码示例 3. ...
max_tokens es un límite estricto en la longitud de salida. Si se establece demasiado bajo, la respuesta del modelo puede cortarse abruptamente en medio de una frase. En general, se recomienda establecer entre 100 y 2000 según el escenario. Para escenarios de "respuesta en una frase", 30-100 es suficiente; para escenarios de "explicación detallada", se recomienda 500-2000.
timeout y max_retries: confiabilidad de la red
En entornos de producción, las solicitudes de red pueden fallar por diversas razones. Estos dos parámetros te ayudan a controlar el comportamiento de las solicitudes.
Ejemplo
# Configuración recomendada para producción
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# Tiempo máximo de espera por solicitud: 30 segundos
timeout=30,
# Reintentos máximos después de un fallo: 3 (4 oportunidades de solicitud en total)
max_retries=3,
)
# Simular una llamada normal
try:
response = model.invoke("¿Qué es Python?")
print(f"Llamada exitosa: {response.content[:50]}...")
except Exception as e:
print(f"Error en la llamada: {e}")
| Parámetro | Descripción | Valor recomendado |
|---|---|---|
| timeout | Tiempo máximo de espera por solicitud (segundos). None significa sin límite | 30~60 (si es demasiado corto, fácilmente se agota el tiempo; si es demasiado largo, mala experiencia de usuario) |
| max_retries | Número de reintentos después de un fallo. 0 significa no reintentar | 2~3 (suficiente para manejar problemas de red ocasionales) |
Análisis del costo de tiempo de configurar timeout y max_retries:
假设 timeout=30, max_retries=3: 单次成功: ~2s 第1次失败+重试成功: ~2s + ~2s = ~4s 全部失败: 4次 × 30s = 最多 120s 才抛出异常
base_url: dirección de API personalizada
El parámetro base_url es muy útil cuando necesitas acceder al modelo a través de un proxy, un servicio intermediario o un despliegue privado.
Ejemplo
# Escenario 1: acceso a OpenAI mediante proxy
model = init_chat_model(
"deepseek:deepseek-v4-flash",
base_url="https://your-proxy-domain.com/v1", # Dirección del proxy
)
# Escenario 2: usar un servicio de terceros compatible con la interfaz de OpenAI
# Muchos modelos nacionales proporcionan interfaces compatibles con OpenAI
model = init_chat_model(
"deepseek:deepseek-v4-flash", # El provider se establece como openai
base_url="https://api.third-party.com/v1", # Pero en realidad apunta a un tercero
api_key="your-third-party-key", # Clave de API de terceros
)
# Escenario 3: conexión a un modelo local (como vLLM, Ollama)
model = init_chat_model(
"openai:qwen2.5", # Nombre del modelo local
base_url="http://localhost:8000/v1", # Dirección del servicio local
api_key="not-needed", # Localmente normalmente no se necesita clave
)
base_url cambia la dirección del endpoint de la API, pero el parámetro provider determina el modo de comportamiento. Por ejemplo, provider="openai" usará el formato de mensajes de OpenAI, incluso si base_url apunta a otro servicio. Asegúrate de que el servicio de destino sea compatible con el formato del provider que especifiques.
Otros parámetros comunes
top_p: muestreo nuclear (nucleus sampling)
Ejemplo
# top_p es otra forma de controlar la aleatoriedad
# El modelo solo muestrea entre las palabras cuya probabilidad acumulada alcanza top_p
# top_p=0.1 significa que solo se elige entre el 10% de las palabras con mayor probabilidad
model = init_chat_model(
"deepseek:deepseek-v4-flash",
top_p=0.9, # Solo se consideran las palabras dentro del 90% de probabilidad acumulada
)
response = model.invoke("Presenta Ejemplo")
print(response.content[:100])
Generalmente se recomienda ajustar solo uno de temperature o top_p, no ambos al mismo tiempo. Si se configuran juntos, el comportamiento del modelo puede ser difícil de predecir.
stop: secuencia de detención
Ejemplo
model = init_chat_model("deepseek:deepseek-v4-flash")
# El parámetro stop especifica secuencias de detención; el modelo deja de generar inmediatamente cuando encuentra estas palabras
response = model.invoke(
"Enumera cinco sitios web para aprender programación, uno por línea",
stop=["\n"] # Se detiene al encontrar un salto de línea, solo devuelve el primero
)
print(f"Limitar stop=['"\\n']: {response.content}")
Resultado de la ejecución:
限制 stop=['\n']: 1. Ejemplo
seed: reproducibilidad (compatible con algunos modelos)
Ejemplo
# Algunos modelos admiten el parámetro seed para obtener una salida determinista
# Mismo seed + misma entrada = misma salida
model = init_chat_model("deepseek:deepseek-v4-flash", seed=42, temperature=0)
resp1 = model.invoke("Presenta Ejemplo")
resp2 = model.invoke("Presenta Ejemplo")
print(f"seed=42, resultados idénticos: {resp1.content == resp2.content}")
Tabla de referencia rápida de parámetros
| Parámetro | Tipo | Valor predeterminado | Cuándo usar |
|---|---|---|---|
| temperature | float | Depende del modelo | Establecer en 0~0.3 cuando la tarea requiera estabilidad, y en 0.7~1.0 cuando se requiera creatividad |
| max_tokens | int | Límite del modelo | Cuando sea necesario controlar la longitud de salida |
| timeout | int/float | None | En producción se recomienda configurarlo siempre |
| max_retries | int | Depende del modelo | Se recomienda 2~3 cuando la red sea inestable |
| base_url | str | Dirección oficial | Cuando se use un proxy, servicio intermediario o servicio local |
| top_p | float | 1.0 | Cuando se necesite control mediante muestreo nuclear (alternativa a temperature) |
| stop | list[str] | Ninguno | Cuando se necesita controlar con precisión el final de la salida |