¿Qué es una API compatible con OpenAI? Cómo cambiar entre proveedores de LLM

Índice de contenidos

Una API compatible con OpenAI sigue el formato de solicitud y respuesta de OpenAI lo suficiente como para que un cliente de OpenAI existente pueda comunicarse con otro proveedor de LLM. En muchas aplicaciones, cambiar de proveedor comienza con tres cambios de configuración: la URL base, la API Key y el ID del modelo.

Estos cambios conectan la aplicación al nuevo servicio. No garantizan que cada endpoint, parámetro o capacidad del modelo se comporte de forma idéntica. Una migración fiable también pone a prueba el streaming, las llamadas a herramientas, la salida estructurada, los límites de token, los errores, la latencia, el coste y la calidad de las tareas.

Three configuration values, base URL, API key, and model ID, pointing one OpenAI SDK client at a different provider

¿Qué significa una API compatible con OpenAI?

Una API compatible con OpenAI suele aceptar solicitudes con una estructura similar a esta:

{
  "model": "provider/model-name",
  "messages": [
    {
      "role": "user",
      "content": "Explain vector search in two sentences."
    }
  ],
  "stream": false
}
{
  "model": "provider/model-name",
  "messages": [
    {
      "role": "user",
      "content": "Explain vector search in two sentences."
    }
  ],
  "stream": false
}
{
  "model": "provider/model-name",
  "messages": [
    {
      "role": "user",
      "content": "Explain vector search in two sentences."
    }
  ],
  "stream": false
}

La respuesta puede contener campos familiares como id, model, choices, message, finish_reason y usage. Por lo tanto, los desarrolladores pueden seguir utilizando el SDK de Python o JavaScript de OpenAI mientras dirigen las solicitudes a otro host de API.

La compatibilidad con OpenAI es una convención práctica, no una certificación formal. Cada proveedor decide qué endpoints, campos y funciones admite. Evalúe la compatibilidad en cuatro niveles:

Capa de compatibilidad

Lo que puede permanecer igual

Lo que aún requiere pruebas

Transporte

Solicitudes HTTPS y autenticación Bearer

URL base, encabezados y tiempos de espera

Esquema de solicitud

model, messages y stream

Parámetros opcionales y roles de mensaje

Esquema de respuesta

choices, message y usage

Campos faltantes, adicionales o renombrados

Capacidad del modelo

Generación básica de Text

Herramientas, JSON Mode, razonamiento, Vision y límites de contexto

Una API puede coincidir con el formato de solicitud esperado y al mismo tiempo producir un comportamiento de modelo diferente.

¿Qué partes de la API de OpenAI suelen ser compatibles?

El endpoint con soporte más generalizado es:

Los elementos habitualmente compatibles incluyen:

Algunos proveedores también implementan GET /v1/models. En SiliconFlow, el endpoint de lista de modelos devuelve los ID de modelo disponibles y permite filtrar por tipo de modelo o tarea.

La compatibilidad con Chat Completions no implica la compatibilidad con todas las demás interfaces de OpenAI. Una aplicación que utilice la API Responses, sesiones en tiempo real, gestión de archivos, procesamiento por lotes, fine-tuning, generación de Image o endpoints de Audio debe verificar cada endpoint requerido por separado.

Cómo funcionan las URL base, las API Keys y los ID de modelo

Estos tres ajustes determinan adónde va la solicitud, cómo se autentica y qué despliegue la procesa.

Ajuste

Propósito

¿Portátil entre proveedores?

URL base

Selecciona el host de la API y la ruta versionada

No

API key

Autentica solicitudes y asocia el uso a una cuenta

No

ID de modelo

Selecciona un despliegue de modelo

Por lo general, no

Para la API internacional de SiliconFlow, la URL base es:

Cada proveedor emite sus propias API Keys. Por lo general, una clave creada para un proveedor no puede autenticar una solicitud directa a otro.

Los ID de modelo también son específicos de cada proveedor. Incluso cuando dos servicios alojan modelos de la misma familia, sus ID, versiones, límites de contexto, parámetros admitidos o configuraciones de despliegue pueden diferir. Un ID de modelo actual de SiliconFlow, por ejemplo, es:

Obtenga el ID del modelo del catálogo actual del proveedor en lugar de crearlo a partir de un nombre visible.

Por qué los desarrolladores utilizan API compatibles con OpenAI

La principal ventaja es la reducción del trabajo de integración. Los equipos pueden mantener los métodos familiares del SDK y las estructuras de la aplicación mientras evalúan diferentes modelos alojados.

Esto puede ayudar a los desarrolladores a:

En SiliconFlow, una única superficie de API proporciona acceso a múltiples familias de modelos. Los equipos pueden comparar opciones generales de Chat, programación, razonamiento y Multimodal sin tener que crear un nuevo cliente para cada desarrollador de modelos.

La interfaz reduce el trabajo de conexión. La selección del modelo aún requiere pruebas en las tareas reales de la aplicación.

Cómo alternar una aplicación entre proveedores de LLM

Mantenga los valores específicos del proveedor fuera del código de la aplicación:




Tras instalar el SDK de Python de OpenAI actual, configure el cliente a partir de esas variables de entorno:

pip install --upgrade
pip install --upgrade
pip install --upgrade
import os

from openai import APIConnectionError, APIStatusError, OpenAI


base_url = os.getenv("LLM_BASE_URL")
api_key = os.getenv("LLM_API_KEY")
model = os.getenv("LLM_MODEL")

if not all([base_url, api_key, model]):
    raise RuntimeError(
        "LLM_BASE_URL, LLM_API_KEY, and LLM_MODEL must be configured."
    )

client = OpenAI(
    base_url=base_url,
    api_key=api_key,
    timeout=60.0,
    max_retries=2,
)

try:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": "Answer clearly and keep the response under 100 words.",
            },
            {
                "role": "user",
                "content": "What is semantic search?",
            },
        ],
        stream=False,
    )

    print(response.choices[0].message.content or "")

except APIStatusError as exc:
    raise RuntimeError(
        f"Provider returned HTTP {exc.status_code}. "
        f"Request ID: {exc.request_id}"
    ) from exc

except APIConnectionError as exc:
    raise RuntimeError("Could not connect to the LLM provider.") from exc
import os

from openai import APIConnectionError, APIStatusError, OpenAI


base_url = os.getenv("LLM_BASE_URL")
api_key = os.getenv("LLM_API_KEY")
model = os.getenv("LLM_MODEL")

if not all([base_url, api_key, model]):
    raise RuntimeError(
        "LLM_BASE_URL, LLM_API_KEY, and LLM_MODEL must be configured."
    )

client = OpenAI(
    base_url=base_url,
    api_key=api_key,
    timeout=60.0,
    max_retries=2,
)

try:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": "Answer clearly and keep the response under 100 words.",
            },
            {
                "role": "user",
                "content": "What is semantic search?",
            },
        ],
        stream=False,
    )

    print(response.choices[0].message.content or "")

except APIStatusError as exc:
    raise RuntimeError(
        f"Provider returned HTTP {exc.status_code}. "
        f"Request ID: {exc.request_id}"
    ) from exc

except APIConnectionError as exc:
    raise RuntimeError("Could not connect to the LLM provider.") from exc
import os

from openai import APIConnectionError, APIStatusError, OpenAI


base_url = os.getenv("LLM_BASE_URL")
api_key = os.getenv("LLM_API_KEY")
model = os.getenv("LLM_MODEL")

if not all([base_url, api_key, model]):
    raise RuntimeError(
        "LLM_BASE_URL, LLM_API_KEY, and LLM_MODEL must be configured."
    )

client = OpenAI(
    base_url=base_url,
    api_key=api_key,
    timeout=60.0,
    max_retries=2,
)

try:
    response = client.chat.completions.create(
        model=model,
        messages=[
            {
                "role": "system",
                "content": "Answer clearly and keep the response under 100 words.",
            },
            {
                "role": "user",
                "content": "What is semantic search?",
            },
        ],
        stream=False,
    )

    print(response.choices[0].message.content or "")

except APIStatusError as exc:
    raise RuntimeError(
        f"Provider returned HTTP {exc.status_code}. "
        f"Request ID: {exc.request_id}"
    ) from exc

except APIConnectionError as exc:
    raise RuntimeError("Could not connect to the LLM provider.") from exc

La configuración compatible con OpenAI de SiliconFlow utiliza el mismo cliente con la URL base de SiliconFlow. El tiempo de espera de 60 segundos de este ejemplo es un punto de partida. Ajústelo en función del modelo seleccionado, la longitud esperada de la salida y el objetivo de latencia.

Cambiar las tres variables de entorno modifica el destino, las credenciales y el modelo. Antes de enviar tráfico de producción, pruebe las siguientes capacidades:

Prueba

Qué verificar

Completado básico

El Text aparece en el campo de respuesta esperado

Input multiturno

Se aceptan los roles de mensaje obligatorios

Streaming

Los fragmentos llegan correctamente y finalizan de forma limpia

Límite de Output

Se admite el parámetro de límite seleccionado

Llamadas a herramientas

Los nombres, ID y argumentos de las herramientas son válidos

Output JSON

El resultado se analiza y supera la validación del esquema

Datos de uso

Los campos de token son adecuados para el informe de costes

Gestión del contexto

Las solicitudes de gran tamaño fallan o se truncan de forma predecible

Gestión de errores

Las respuestas 400, 401, 429 y 5xx siguen las rutas probadas

Calidad de la tarea

Los resultados cumplen el umbral de aceptación de la aplicación

Para una migración a producción, compare ambos proveedores en un conjunto fijo de tareas reales. Defina umbrales de aprobación para la validez del formato, la calidad de la respuesta, el éxito de las herramientas, la latencia y el coste por tarea exitosa. Envíe primero un pequeño porcentaje del tráfico apto al nuevo proveedor, supervise los resultados y mantenga disponible la configuración anterior para poder revertir los cambios.

Lo que no garantiza ser compatible con OpenAI

Los modelos compatibles con OpenAI pueden aceptar la misma estructura de solicitud sin ser operativamente intercambiables. La compatibilidad no garantiza:

  • Soporte para cada endpoint de OpenAI

  • Límites de contexto y de Output idénticos

  • Tokenización o recuento de token idénticos

  • Comportamiento equivalente en herramientas, streaming o roles de mensaje

  • El mismo comportamiento de seguridad, límites de frecuencia, latencia o precios

  • Resultados similares de modelos relacionados o con nombres similares

También pueden aparecer campos de respuesta específicos del proveedor. Por ejemplo, los modelos de razonamiento de SiliconFlow pueden devolver reasoning_content junto con el contenido final. Las aplicaciones deben tolerar los campos desconocidos y gestionar explícitamente cualquier campo adicional que necesiten.

Four compatibility layers: transport and request schema usually match, response schema varies, model capability needs testing

Mantenga los parámetros específicos del proveedor bajo comprobaciones de capacidad. No envíe controles de razonamiento, campos de Multimodal, opciones de Input en caché u otras extensiones a todos los proveedores de forma predeterminada.

Llamadas a herramientas, JSON Mode y compatibilidad de funciones

Las funciones avanzadas deben verificarse para el modelo seleccionado, no solo para el proveedor.

Llamadas a herramientas

Las llamadas a herramientas permiten que un modelo devuelva el nombre de una función y sus argumentos. La aplicación sigue siendo responsable de validar dichos argumentos, ejecutar la función y devolver el resultado.

En SiliconFlow, las solicitudes de herramientas al estilo de OpenAI están disponibles para los despliegues compatibles, pero los requisitos a nivel de modelo pueden variar. Compruebe la compatibilidad actual de llamadas a funciones y ejecute una prueba real de llamadas a herramientas antes del lanzamiento.

Las aplicaciones en producción deben:

  • Validar los argumentos contra un esquema

  • Rechazar nombres de función desconocidos

  • Aplicar permisos fuera del modelo

  • Añadir tiempos de espera a las herramientas externas

  • Requerir aprobación para acciones sensibles

  • Gestionar respuestas que no contengan una llamada a herramienta

No ejecute argumentos generados por el modelo con eval() o mecanismos similares.

JSON Mode

El JSON Mode suele utilizar:

response_format={"type": "json_object"}
response_format={"type": "json_object"}
response_format={"type": "json_object"}

Esto mejora la capacidad de análisis sintáctico, pero no demuestra que la salida coincida con el esquema requerido por la aplicación. Es posible que falten campos, que los valores utilicen un tipo incorrecto y que la salida esté incompleta si la generación alcanza su límite de token.

Las instrucciones de JSON Mode de SiliconFlow detallan la compatibilidad actual y advierten de que las aplicaciones deben gestionar objetos JSON incompletos. Analice la respuesta de forma segura, valídela con un esquema local y defina una ruta de reparación o reintento para los resultados no válidos.

Problemas habituales de migración a comprobar

Utilice el estado HTTP y el mensaje de respuesta para separar los errores de configuración de los fallos temporales del servicio.

Síntoma

Causa probable

Qué comprobar

HTTP 400

Solicitud no válida, parámetro no admitido o ID de modelo desconocido

Verifique el ID del modelo y vuelva a añadir los parámetros opcionales de forma individual

HTTP 401

Clave faltante, incorrecta o no coincidente con el proveedor

Confirme el origen de la clave y el entorno

HTTP 403

Restricción de permisos de cuenta o de modelo

Compruebe los requisitos de acceso para el modelo seleccionado

HTTP 404

Endpoint o ruta de URL incorrectos

Compruebe la URL base y si /v1 ya está incluido

HTTP 429

Límite de frecuencia de solicitudes o de token

Aplique una pausa, reduzca la concurrencia o revise los límites de la cuenta

HTTP 503 o 504

Alta carga de servicio o tiempo de espera agotado

Reintente con retroceso gradual (backoff) y considere el uso de streaming

Contenido vacío

Llamada a herramienta o campo de respuesta específico del proveedor

Inspeccione el objeto de respuesta completo

Streaming interrumpido

Diferencia en el formato de fragmentos o en el almacenamiento en búfer del cliente

Pruebe el analizador de streaming por separado

JSON no válido

Truncamiento o JSON Mode no admitido

Revise el límite de Output y valide la compatibilidad del modelo

Menor calidad en la tarea

Comportamiento o valores predeterminados del modelo diferentes

Vuelva a comprobar la configuración del modelo, el prompt y los parámetros de muestreo

La referencia de gestión de errores de SiliconFlow distingue los fallos de parámetros, autenticación, permisos, límites de frecuencia y carga del servidor. Registre el proveedor, el modelo, el estado HTTP y el ID de la solicitud sin guardar API Keys ni entradas confidenciales sin censurar.

Cuándo tiene sentido una API de LLM unificada

Un cliente configurable compatible con OpenAI suele ser suficiente cuando una aplicación utiliza un solo proveedor a la vez. Una pasarela unificada o un adaptador interno resulta útil cuando operan varios proveedores de forma simultánea.

Considere una capa unificada cuando necesite:

  • Enrutamiento de modelos basado en tareas

  • Conmutación por error automática para fallos reintentables

  • Gestión centralizada de credenciales

  • Políticas compartidas de tiempos de espera y reintentos

  • Informes de costes entre proveedores

  • Presupuestos o límites de frecuencia por equipo

  • Alias internos estables para los modelos

  • Lanzamientos y reversiones controlados de modelos

  • Enrutamiento basado en capacidades para herramientas, Vision o JSON

Two migration paths: environment variables plus regression tests for occasional switches, a unified gateway for continuous routing

Esta capa también genera trabajo adicional. Debe normalizar los errores y los datos de uso, mantener registros de capacidades y preservar el acceso a funciones útiles específicas de cada proveedor.

Utilice la configuración junto con pruebas de regresión para cambios ocasionales de proveedor. Añada una pasarela cuando el enrutamiento, la gobernanza, la observabilidad o la conmutación por error sean un requisito de producción continuo. Una API compatible con OpenAI facilita la migración, mientras que la portabilidad fiable proviene de comprobaciones de capacidad explícitas y de la evaluación al nivel de cada tarea.

Preguntas frecuentes

¿Está una API compatible con OpenAI afiliada a OpenAI?

No. El término describe un patrón de interfaz y no establece una afiliación comercial o técnica con OpenAI. El proveedor compatible opera su propia infraestructura, catálogo de modelos, cuentas, credenciales, facturación, límites y términos.

¿Es gratis usar una API de LLM compatible con OpenAI?

No necesariamente. La compatibilidad describe el formato de solicitud y respuesta, no los precios. Un proveedor puede ofrecer saldo de prueba, modelos seleccionados sin coste, facturación basada en el uso, suscripciones o contratos empresariales. Compruebe el precio actual del modelo alojado exacto antes de su despliegue.

¿Puede una aplicación continuar la misma conversación después de cambiar de proveedor?

Por lo general, sí, si la aplicación envía el historial de conversación con cada solicitud. Confirme que el nuevo modelo admite los roles de mensaje, los tipos de contenido y el tamaño total de contexto. Es posible que las respuestas sigan variando, ya que diferentes modelos interpretan el mismo historial de forma distinta.

¿Debería producirse una conmutación por error de proveedor tras cada error de API?

No. La conmutación por error es más adecuada para problemas reintentables, como límites de frecuencia, tiempos de espera agotados o sobrecargas temporales del servicio. Los errores de autenticación, permisos, solicitudes no válidas y modelos desconocidos normalmente requieren una corrección de configuración en lugar de una llamada a otro proveedor.

¿Listo para acelerar tu desarrollo de IA?

¿Listo para acelerar tu desarrollo de IA?

¿Listo para acelerar tu desarrollo de IA?

© 2026 SiliconFlow

© 2026 SiliconFlow

© 2026 SiliconFlow