Continue es un asistente de programación con IA de código abierto que ofrece una extensión para VS Code, un plugin para JetBrains y una CLI, y puede conectarse a una API propia o de terceros mediante el protocolo compatible con OpenAI. Es habitual que la primera solicitud falle después de configurar el gateway; los problemas se concentran en cinco capas: credenciales, dirección, ID de modelo, cuota y red. El orden correcto es mirar primero el código de estado, reproducir con una solicitud mínima y solo después tocar el modelo y el contexto. Este artículo ofrece una base de config.yaml que puedes copiar y una lista de comprobación.

Estado: en 2026, Continue fue adquirida por Cursor y el repositorio del proyecto pasó a solo lectura y dejó de tener mantenimiento activo. Las instalaciones existentes y los forks de la comunidad todavía pueden usarse, pero el comportamiento de las versiones puede haberse quedado en el periodo anterior a la adquisición. Este artículo se basa en el modo de configuración con config.yaml que todavía era habitual en octubre de 2026; el enfoque de diagnóstico también sirve para versiones antiguas.

1. Separa por capas: en qué nivel se produce realmente el error

No cambies el modelo en cuanto veas un error; clasifica primero por código de estado.

Código/síntoma Significado habitual Qué revisar primero ¿Reintentar?
401 Clave ausente, incorrecta, caducada o sin permiso Clave, campo de autenticación, estado de la cuenta No
403 La clave no tiene permiso para ese modelo o una política la bloquea Permisos del modelo, configuración del equipo No
404 Ruta incorrecta o modelo inexistente apiBase, ID de modelo No
400/413 Formato de solicitud incorrecto o contexto demasiado largo Contexto, parámetros, max_tokens Tras corregir la solicitud
429 Se superó la frecuencia, la concurrencia o la cuota de tokens Uso, claves compartidas, política de reintentos Tras un backoff
5xx Error del servidor o sobrecarga del gateway Estado del servicio, ID de solicitud Tras un backoff
Tiempo de espera/fallo de conexión DNS, TLS, proxy, firewall o cadena de streaming Red y proxy Tras corregir

Durante el diagnóstico, mantén fijos la misma clave, la misma dirección y el mismo ID de modelo, y cambia solo un elemento a la vez; si cambias tres cosas y el servicio se recupera, tampoco sabrás por qué.

2. Base de configuración: solo hay que cambiar tres cosas en config.yaml

El directorio de configuración global de Continue es ~/.continue (macOS/Linux) o %USERPROFILE%\.continue (Windows). Si existe config.yaml, se carga con prioridad sobre el antiguo config.json; no mezcles ambos formatos. Una configuración compatible con OpenAI que funciona es esta:

name: zsqh-gateway
version: 0.0.1
schema: v1

models:
  - name: Modelo de chat del equipo
    provider: openai
    model: <ID de modelo copiado de la lista>
    apiBase: https://api.zhongshangqihang.com/v1
    apiKey: <tu API Key>
    roles:
      - chat
      - edit
      - apply
    capabilities:
      - tool_use

Algunos puntos que suelen causar errores:

  • En el nivel superior deben estar name, version y schema: v1; models es una lista y una indentación incorrecta hace que falle el análisis directamente.
  • Para un gateway compatible, provider se pone en openai; apiBase normalmente se escribe hasta /v1, sin añadir /chat/completions por tu cuenta.
  • model debe coincidir exactamente con el ID de la lista de modelos del gateway, incluidas mayúsculas, guiones y número de versión.
  • roles determina si el modelo se encarga del chat, de la edición o de aplicar parches; el autocompletado (autocomplete) tiene requisitos distintos de capacidad de interfaz, y un modelo de chat normal no siempre lo admite.
  • Si necesitas que el modo Agent llame a herramientas, añade capabilities: [tool_use]; de lo contrario, puede conversar pero no ejecutar herramientas. Si al guardar no surte efecto, recarga la ventana del IDE y revisa el registro.

3. 401: revisa primero la clave y luego el campo de autenticación

Un 401 significa que la identidad no se validó y no tiene relación con la capacidad del modelo ni con el contexto. Comprueba en orden:

  1. Si la clave se copió completa y si tiene espacios, saltos de línea o comillas al principio o al final. Copiar desde una ventana de chat es lo que más caracteres ocultos arrastra.
  2. Si la clave está en el campo apiKey y coincide con la cabecera de autenticación de requestOptions.headers, para evitar duplicaciones o conflictos.
  3. Si la clave fue eliminada, desactivada o caducó; si la cuenta tiene saldo disponible. Algunos gateways devuelven 401 o 403 cuando no hay saldo; toma como referencia el cuerpo del error.
  4. Si apiBase apunta al entorno al que pertenece la clave. Una clave de entorno de prueba configurada con la dirección de producción también suele dar 401.
  5. Si el archivo de configuración se carga realmente. Si editas config.json pero se carga config.yaml, parecerá que "nada de lo que cambias funciona".

Valida primero la dirección y la clave con una solicitud mínima, para descartar factores del cliente Continue:

export API_KEY="sk-tu-clave"

curl -sS -o /tmp/continue_resp.json -w "%{http_code}\n" \
  "https://api.zhongshangqihang.com/v1/chat/completions" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"<ID de modelo>","messages":[{"role":"user","content":"ping"}],"max_tokens":16}'

cat /tmp/continue_resp.json

Si devuelve 200, la clave, la dirección y el modelo funcionan básicamente; si devuelve 401, prueba desde la entrada de pruebas de la consola del gateway y no reintentes automáticamente.

4. 404: la Base URL y el ID de modelo se reparten la culpa

Un 404 no siempre significa que el modelo esté fuera de servicio; lo más habitual es una ruta mal escrita:

  • apiBase omite /v1, la solicitud llega a la ruta web del sitio y devuelve HTML o 404.
  • apiBase incluye /v1/chat/completions, el cliente lo vuelve a concatenar y la ruta queda duplicada.
  • Se usa la dirección de la consola como dirección de API, el dominio está mal escrito o se introduce la ruta /v1/messages de Anthropic en un campo compatible con OpenAI.

El ID de modelo también puede provocar un 404 o un model_not_found:

  • Mayúsculas, guiones y número de versión deben coincidir exactamente con la lista de modelos.
  • Puede que el modelo no esté disponible para la cuenta o el plan actual, o que use IDs distintos según el protocolo.
  • Que la interfaz de configuración lo guarde no significa que el gateway acepte ese ID; hay que enviar una solicitud real para confirmarlo.

Durante el diagnóstico, visita primero /v1/models (si el gateway lo ofrece) y copia el ID de modelo de la lista devuelta; no lo escribas a mano.

5. 429: el límite de tasa no es falta de saldo

Un 429 indica que la solicitud superó la tasa, la concurrencia o la cuota de tokens. Situaciones habituales:

  • Se superó el número de solicitudes por minuto, de tokens por minuto o de conexiones concurrentes.
  • Varias personas comparten una clave, o el Agent lee archivos y ejecuta comandos de forma continua y envía muchas solicitudes en poco tiempo.
  • El autocompletado se activa con demasiada frecuencia y envía una solicitud cada pocas teclas.
  • Los reintentos no tienen backoff: cuanto más falla, más se reintenta y se forma una tormenta de reintentos; las solicitudes con contexto largo también ocupan espacio de concurrencia.

Al gestionarlo, revisa primero las cabeceras de respuesta y el cuerpo del error; no dupliques los reintentos a ciegas. Si hay Retry-After, espera lo que indique; si no, aplica un backoff exponencial con jitter aleatorio. No reintentes 401, 403 ni 404. Si una misma clave atiende varios servicios, sepárala por proyecto; en los bucles de Agent, define un número máximo de rondas y un límite de gasto.

6. Tiempos de espera, interrupciones del streaming y proxies

Los tiempos de espera normalmente no devuelven un código de estado HTTP; se manifiestan como una solicitud sin respuesta durante mucho tiempo, fetch failed, ECONNRESET o una respuesta que se detiene a mitad de camino. Orden de diagnóstico:

  1. Envía primero una solicitud sin streaming y con contexto corto. Si funciona, el problema está en la cadena de streaming o en el proxy intermedio.
  2. Prueba directamente con curl -N para descartar factores del cliente Continue; revisa también si el proxy está almacenando en búfer las respuestas SSE.
  3. Revisa la cadena de certificados. Si un proxy corporativo hace inspección TLS, hay que indicar el certificado de la CA mediante requestOptions.caBundlePath; verifySsl: false solo es adecuado para depuración temporal.
  4. Comprueba que la hora del sistema sea correcta; una desviación grande hace fallar la validación del certificado.
  5. En tareas largas, define tiempos de espera y un número máximo de rondas; el Agent envía varias rondas seguidas y, si la conexión se cuelga, parece que "sigue girando". Los campos de tiempo de espera varían según la versión.

No uses ping para decidir si la API está disponible: solo demuestra que el host es alcanzable, no que TLS y la ruta sean correctos.

7. Contexto excedido y cuerpo de solicitud demasiado grande

Cuando se supera el contexto, lo habitual es recibir un 400 o un 413, y en el cuerpo del error aparecen textos como context_length_exceeded o maximum context length. Continue envía juntos los archivos abiertos, los fragmentos recuperados, las referencias y el historial de la conversación, así que el contexto real suele ser más largo de lo que parece.

Cómo tratarlo:

  • Usa .continueignore o la configuración de exclusión de índices para dejar fuera artefactos de compilación, registros y directorios de dependencias.
  • Cierra las pestañas que no tengan relación, resume primero los documentos largos y abre una conversación nueva para los chats largos.
  • Reduce max_tokens por solicitud, confirma la cadena con una solicitud corta y luego ve alargándola poco a poco.
  • Si solo falla en un repositorio grande, sospecha primero de que la recuperación está introduciendo demasiados fragmentos.

8. Cómo conservar los registros del IDE para facilitar el diagnóstico

En VS Code, abre la paleta de comandos y elige "Developer: Toggle Developer Tools" para ver la salida de Console; si necesitas registros detallados, activa "Continue: Enable Console" y recarga la ventana. En JetBrains, revisa ~/.continue/logs/core.log; los registros del IDE están en "Help > Show Log".

Un registro debe incluir al menos: hora, código de estado, código de error, ID de modelo, nombre de host de apiBase, ID de solicitud, duración y número de reintentos. El ID de solicitud suele estar en las cabeceras de respuesta, con nombres como request-id, x-request-id o x-oneapi-request-id, según lo que devuelva realmente el gateway. No registres la clave completa, los prompts ni el código del usuario; de la clave conserva solo los cuatro primeros y los cuatro últimos caracteres.

Un registro útil se ve así:

2026-10-19T10:12:33+08:00 status=429 code=rate_limit_exceeded model=<ID de modelo> host=api.zhongshangqihang.com request_id=... latency_ms=1840 retry=2

9. Lista de comprobación

  1. Anota el texto original del error, el código de estado, la hora y el ID de solicitud.
  2. Reproduce con el comando curl de este artículo para confirmar si el problema aparece solo dentro de Continue.
  3. Comprueba si se carga config.yaml o config.json y si la indentación del YAML es correcta.
  4. Verifica que apiBase llegue solo hasta /v1 y copia el ID de modelo de la lista.
  5. Prueba con una clave nueva para descartar que la clave esté caducada o que haya un problema de cuota o de política del equipo.
  6. Usa primero una solicitud sin streaming y con contexto corto; luego vuelve a añadir streaming y contexto largo poco a poco. Si hace falta, cambia de red o de proxy.
  7. Si todo lo anterior pasa, envía los registros y los pasos de reproducción al soporte del gateway o del plugin.

10. Preguntas frecuentes

¿La clave funciona en otro cliente pero Continue devuelve 401?

Revisa primero si el campo es incorrecto y después si config.yaml se carga realmente. Cuando conviven el antiguo config.json y el nuevo config.yaml, es fácil editar el archivo equivocado; si el equipo restringe las claves de terceros, la configuración local puede ser correcta y aun así fallar.

¿Un 404 significa siempre que el modelo está fuera de servicio?

No necesariamente. En la mayoría de los casos, a apiBase le falta o le sobra /v1, o el ID de modelo está mal escrito. Visita primero la lista de modelos y copia el ID para probar.

¿Un 429 significa falta de saldo?

No necesariamente. Un 429 indica que se superó la tasa o la cuota; la falta de saldo puede devolver 401, 402 o 403. Toma como referencia el cuerpo del error y la página de facturación.

¿Por qué solo falla el streaming o el autocompletado?

Sospecha primero del búfer del proxy, del tiempo de espera por inactividad y de las diferencias de capacidad de la interfaz. Para el streaming, compara con una solicitud sin streaming; si falla el autocompletado, confirma si el modelo y la interfaz admiten autocompletado o FIM, y no pongas directamente un modelo de chat como autocomplete.

Continue ya no tiene mantenimiento, ¿merece la pena configurarlo?

Las instalaciones existentes y los forks de la comunidad siguen funcionando, y la semántica de errores sigue siendo la de las interfaces compatibles con OpenAI. Si un proyecto nuevo necesita mantenimiento a largo plazo, conviene evaluar herramientas que sigan en desarrollo activo; si solo reutilizas un entorno existente, basta con seguir el orden de diagnóstico de este artículo.

Siguiente paso

Primero crea una clave de prueba en ZSQH AI Gateway, recorre con el comando curl de este artículo la autenticación, el modelo y el streaming, y después colócalo en config.yaml. Los modelos y los precios se rigen por los precios de modelos del sitio, y cambian según el proveedor; al diagnosticar, fija primero las variables y luego sustitúyelas una por una.

Lecturas relacionadas:

Marcas: Continue es una marca de Continue Dev, Inc.; Cursor, Anysphere, OpenAI, Anthropic y Claude son marcas de sus respectivos titulares. Este artículo solo ofrece una discusión técnica de diagnóstico y no mantiene relación de afiliación ni de cooperación con las empresas mencionadas. El estado del producto, los textos de error y el comportamiento de las interfaces pueden cambiar según la versión; consulta la documentación del proveedor y las respuestas reales.