Intercambiar un LLM en tu aplicación puede parecer un cambio de una línea, pero afecta la latencia, el coste por token, el formato de salida, las llamadas a herramientas y la compatibilidad con imágenes.
GLM-5.3-Flash lo demuestra: es aproximadamente nueve veces más barato que GLM-5.3, acepta imágenes de forma nativa —a diferencia de GLM-5.3— y genera aproximadamente a la mitad de velocidad. La forma de elegir entre ambos es ejecutar las mismas solicitudes contra los dos modelos.
Esta guía crea una colección reutilizable en Apidog para probar texto, visión, llamadas a herramientas, aserciones y comparaciones entre modelos.
Por qué no usar solo curl
Puedes probar el endpoint con curl; nuestra guía de API muestra cómo hacerlo. Sin embargo, deja de ser suficiente después de la primera llamada.
- Imágenes Base64: una URL de datos puede contener miles de caracteres. Es difícil de leer, editar y reutilizar desde una terminal.
- Sin aserciones: una respuesta exitosa no confirma que sigan existiendo los campos que consume tu aplicación.
Una colección guardada mantiene las cargas útiles editables y ejecuta validaciones en cada prueba.
Configura el entorno
Crea un entorno con las variables que cambian entre ejecuciones. Mantener el modelo como variable permite ejecutar toda la colección contra otro proveedor o versión.
| Variable | Valor |
|---|---|
base_url |
https://api.z.ai/api/paas/v4 |
api_key |
tu clave de Z.ai |
model |
glm-5.3-flash |
Guarda la clave como variable de entorno en lugar de pegarla en los encabezados. Así evitas exponerla al exportar o compartir la colección.
Solicitud 1: finalización de texto
Crea una solicitud POST a {{base_url}}/chat/completions.
Encabezados:
[REDACTED CREDENTIAL] {{api_key}}
Content-Type: application/json
Cuerpo:
{
"model": "{{model}}",
"messages": [
{"role": "user", "content": "Responde exactamente con: OK"}
],
"reasoning_effort": "low"
}
Usa reasoning_effort: "low" para una prueba de conectividad. El valor predeterminado, max, factura el razonamiento como tokens de salida y añade coste innecesario a esta verificación.
Añade estas aserciones:
- El código de estado es
200. -
choices[0].message.contentexiste. -
choices[0].finish_reasonesstop. -
usage.total_tokensexiste.
No omitas finish_reason: un valor length indica que la salida fue truncada antes de completarse.
Solicitud 2: llamada con imagen
Esta prueba valida una capacidad nativa de GLM-5.3-Flash que GLM-5.3 no ofrece.
Usa el mismo endpoint, pero define content como un array de bloques:
{
"model": "{{model}}",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "¿De qué color es la forma dominante en esta imagen? Responde con una sola palabra."
},
{
"type": "image_url",
"image_url": {
"url": "{{test_image_url}}"
}
}
]
}
],
"reasoning_effort": "low"
}
Añade test_image_url al entorno y apunta a una imagen estable, pública y con una respuesta conocida. Esto convierte la llamada en una prueba de regresión.
Para archivos locales, usa una URL Base64 en la misma variable:
data:image/png;base64,iVBORw0KGgo...
Añade estas aserciones:
- El código de estado es
200. -
choices[0].message.contentcontiene la respuesta esperada. -
usage.prompt_tokenses mayor que en la solicitud solo de texto.
La última aserción funciona como canario: si los tokens de entrada no aumentan, la imagen probablemente no se procesó aunque la API responda 200.
Consulta más detalles sobre visión y errores comunes en nuestra guía de visión de GLM-5.3-Flash.
Solicitud 3: llamada a herramientas
Si tu aplicación usa funciones, pruébalas de forma explícita. Las llamadas a herramientas son una de las partes más sensibles a cambios de versión.
{
"model": "{{model}}",
"messages": [
{
"role": "user",
"content": "¿Está saludable el servicio checkout-api?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_deployment_status",
"description": "Devuelve el estado actual de un despliegue nombrado.",
"parameters": {
"type": "object",
"properties": {
"service": {
"type": "string",
"description": "El nombre del servicio."
}
},
"required": ["service"]
}
}
}
]
}
Añade estas aserciones:
-
choices[0].message.tool_callsexiste y no está vacío. -
choices[0].message.tool_calls[0].function.nameesget_deployment_status. -
choices[0].finish_reasonestool_calls.
Validar el nombre de la herramienta detecta casos en los que el modelo llama a una función incorrecta, especialmente cuando tu catálogo de herramientas crece.
Si generas herramientas desde una API existente, consulta cómo convertir una especificación OpenAPI en herramientas de agente.
Compara con GLM-5.3
Duplica el entorno, cambia model a glm-5.3 y ejecuta la misma colección.
Compara tres aspectos:
Corrección
¿Siguen pasando las aserciones? La solicitud de imagen no debería pasar, porque GLM-5.3 no acepta imágenes de forma nativa. Ese resultado documenta una diferencia funcional real.
Latencia
Apidog muestra el tiempo de respuesta de cada solicitud. En salidas largas, espera que GLM-5.3 sea más rápido: genera aproximadamente 86 tokens por segundo frente a los 49 de Flash.
Coste
El objeto usage incluye prompt_tokens y completion_tokens. Multiplica ambos valores por la tarifa de cada modelo para obtener el coste real por solicitud.
Consulta las tarifas actuales en nuestro desglose de precios y los casos de uso en la comparación completa de modelos.
También conviene ejecutar el mismo prompt con reasoning_effort en low, high y max. Con max, los tokens de razonamiento se facturan como salida, incluso si la respuesta visible es corta.
Prueba un despliegue local
Si autoalojas los pesos, vLLM y SGLang exponen endpoints compatibles con OpenAI. Cambia base_url por la URL de tu servidor y ejecuta la misma colección.
Esta suite es especialmente útil para despliegues cuantificados: una compilación puede superar una prueba de chat básica y, aun así, fallar con esquemas de herramientas o entradas de imagen. Consulta nuestra guía de ejecución local para la configuración de despliegue.
Añádelo a CI
Cuando la colección sea estable, ejecútala en un horario o dentro de tu pipeline.
Úsala:
- Antes de una migración de modelo, como señal de aprobación o rechazo.
- De forma programada, para detectar cambios silenciosos del proveedor.
- Después de actualizar dependencias o SDKs que puedan cambiar la serialización de solicitudes.
Los proveedores pueden actualizar modelos detrás de IDs estables. Una ejecución periódica te avisa antes de que lo haga un usuario.
Casos más allá del camino feliz
Cuando las pruebas básicas funcionen, añade:
- Una solicitud con la longitud de contexto real de tu aplicación.
- Entradas malformadas para validar el manejo de errores.
- Respuestas de límite de tasa para probar reintentos.
- Varias imágenes en una misma solicitud, cada una en su propio bloque
image_url. - Streaming, si lo usas, porque su formato de respuesta difiere de una finalización estándar.
Conclusión
El valor no está en las solicitudes individuales, sino en que son repetibles. Una decisión de modelo que puedes volver a probar en treinta segundos es una decisión que puedes revisar cuando cambien los precios, cuando Z.ai publique una nueva versión o cuando evalúes otro proveedor.
Apidog es gratis para empezar. Importar un esquema compatible con OpenAI permite configurar gran parte de la colección sin construir cada solicitud manualmente.
Preguntas frecuentes
¿Necesito un plan pago de Apidog?
No. Las colecciones con variables de entorno y aserciones funcionan en el plan gratuito.
¿Cómo pruebo imágenes Base64 sin un cuerpo ilegible?
Guarda la URL de datos como una variable de entorno y usa {{test_image_url}} en el cuerpo.
¿Puedo probar el endpoint coding-plan de la misma manera?
Sí. Cambia base_url a https://api.z.ai/api/coding/paas/v4. Este endpoint difiere de la API estándar, como explica nuestra guía de Claude Code y Cline.
¿Funcionan estas pruebas con otros proveedores?
En su mayoría, sí. OpenRouter, Cloudflare Workers AI y Vercel AI Gateway exponen interfaces compatibles con OpenAI. Cambia base_url y el espacio de nombres del modelo.
¿Cómo valido una respuesta no determinista?
Valida estructura y restricciones en vez de texto exacto: campos obligatorios, tipos, conteos de tokens, finish_reason y subcadenas esperadas.

Top comments (0)