La migración de SDK multimodelo no debería comenzar reemplazando cada biblioteca de cliente en tu aplicación. Si tu código de producción ya utiliza el SDK de Python o Node de OpenAI para las finalizaciones de chat, el primer paso más seguro es mantener estable esa superficie de cliente, mover la elección del proveedor a la configuración y probar el comportamiento de Claude, Gemini y DeepSeek detrás de una ruta compatible antes de ampliar el tráfico.
Flatkey está diseñado para equipos que desean una sola clave, una capa de enrutamiento compatible con OpenAI, acceso a modelos de diferentes proveedores y revisión de uso y facturación en un solo lugar. Eso lo hace útil para una migración de SDK multimodelo, pero no elimina la necesidad de probar familias de puntos de conexión, alias de modelos, streaming, llamadas a herramientas y registros de uso. Trata cada muestra de código aquí como una plantilla hasta que la valides con tu propia clave de Flatkey y tu catálogo de modelos actual.
El objetivo práctico es simple: mantener el objeto de solicitud que tu aplicación ya conoce, aislar los pocos valores que deben cambiar y construir un paquete de prueba antes del cambio.
Matriz de decisión para la migración de SDK multimodelo
Usa esta matriz antes de cambiar el código. Separa lo que puede permanecer estable de lo que debe volverse configurable.
| Capa | Mantener estable | Hacer configurable | Prueba a guardar |
|---|---|---|---|
| Cliente SDK | Importación del SDK de OpenAI existente y ruta de llamada de finalización de chat | Clave de API, URL base, tiempo de espera, política de reintentos | Versión del SDK y configuración de inicio redactada |
| Forma de la solicitud | messages, model, stream, tools básicos donde sean compatibles | Extras específicos del proveedor y parámetros no compatibles | Solicitud mínima y respuesta sin procesar |
| Selección de modelo | Alias a nivel de aplicación como support_chat o analysis_fast | Alias de modelo de la puerta de enlace y familia de puntos de conexión | Captura de pantalla o exportación del catálogo de modelos |
| Operaciones | Registros existentes, ID de solicitud y manejo de errores | Metadatos de proveedor, ruta, uso, cuota y reversión | Evidencia del panel/lectura de confirmación |
| Lanzamiento | Ruta de despliegue actual de la aplicación | Variables de entorno para el despliegue porcentual y la reversión | Propietario de la reversión y configuración anterior |
Esta es la disciplina central de la migración de SDK multimodelo: no mezcles el reemplazo de bibliotecas, la migración de prompts, la evaluación de proveedores, la validación de la facturación y el despliegue en producción en una sola implementación.
Lo que dicen los documentos oficiales sobre la compatibilidad
Los SDK de OpenAI ya admiten el patrón que necesitas. El README actual de OpenAI para Python documenta el cliente OpenAI y una opción base_url, y el README de Node documenta el cliente OpenAI estándar y las finalizaciones de chat. La referencia de la API de OpenAI dice que las finalizaciones de chat crean una respuesta de modelo para una conversación, admiten streaming y devuelven un objeto de finalización de chat o fragmentos de stream.
Si estás dividiendo el despliegue por entorno de ejecución, combina esta lista de verificación con la guía de URL base personalizada del SDK de Python de OpenAI y la guía de URL base del SDK de Node de OpenAI. Si la primera decisión es el enrutamiento de proveedores en lugar de la configuración del cliente, utiliza la guía de enrutamiento de API de Claude vs. GPT antes de elegir la carga de trabajo de prueba.
La compatibilidad de los proveedores difiere:
| Proveedor | Señal de compatibilidad oficial | Implicación para la migración |
|---|---|---|
| SDK de OpenAI | Python admite base_url; Node usa baseURL; las finalizaciones de chat tienen campos para messages, model, stream, herramientas y uso. | Conserva el envoltorio del cliente de OpenAI para la primera parte de la migración. |
| Anthropic / Claude | Anthropic publica una capa de compatibilidad con el SDK de OpenAI, pero dice que es principalmente para pruebas y comparación, no la ruta de producción a largo plazo para la mayoría de los casos de uso. La API de mensajes nativa utiliza /v1/messages, max_tokens, messages y un parámetro system de nivel superior. | Usa la compatibilidad para una evaluación rápida, pero prueba los requisitos nativos de Claude antes de depender de características específicas del proveedor. |
| Google Gemini | Google dice que los modelos Gemini son accesibles a través de las bibliotecas de Python, TypeScript/JavaScript y REST de OpenAI cambiando la clave de API, la URL base y el modelo. | Gemini es un buen candidato para una prueba de humo con formato de OpenAI, verificando el razonamiento y el comportamiento específico del modelo por separado. |
| DeepSeek | DeepSeek dice que su formato de API es compatible con OpenAI y Anthropic; sus documentos de primera llamada enumeran las URL base de OpenAI y Anthropic y ejemplos con formato de OpenAI. | DeepSeek puede encajar en la ruta del cliente de OpenAI, pero las obsolescencias de nombres de modelos y los ajustes de pensamiento necesitan comprobaciones explícitas. |
| Flatkey | La página pública de modelos de Flatkey expone tipos de puntos de conexión como openai, anthropic y gemini; la página de inicio muestra una ruta de finalizaciones de chat compatible con OpenAI. | Selecciona los modelos por familia de puntos de conexión, no solo por el nombre del proveedor. |
La lección importante es que "compatible con OpenAI" generalmente significa que el cliente puede enviar una solicitud con el formato de OpenAI. No significa que cada parámetro, esquema de herramienta, control de razonamiento, entrada de medios o campo de uso se comporte de manera idéntica entre los proveedores.
Paso 1: Congelar el límite del cliente
Comienza la migración del SDK multimodelo colocando el cliente de OpenAI detrás de una fábrica local. La fábrica debe ser el único lugar que conozca la clave, la URL base, el tiempo de espera y el alias del modelo.
import os
from openai import OpenAI
def make_llm_client() -> OpenAI:
return OpenAI(
api_key=os.environ["FLATKEY_API_KEY"],
base_url=os.getenv("FLATKEY_BASE_URL", "https://router.flatkey.ai/v1"),
timeout=float(os.getenv("LLM_TIMEOUT_SECONDS", "60")),
max_retries=int(os.getenv("LLM_MAX_RETRIES", "2")),
)
client = make_llm_client()
completion = client.chat.completions.create(
model=os.environ["FLATKEY_MODEL"],
messages=[
{"role": "system", "content": "You answer with short implementation notes."},
{"role": "user", "content": "Reply with exactly: migration probe ok"},
],
)
print(completion.choices[0].message.content)
Para Node:
import OpenAI from "openai";
export function makeLlmClient() {
return new OpenAI({
apiKey: process.env.FLATKEY_API_KEY,
baseURL: process.env.FLATKEY_BASE_URL ?? "https://router.flatkey.ai/v1",
timeout: Number(process.env.LLM_TIMEOUT_MS ?? 60000),
maxRetries: Number(process.env.LLM_MAX_RETRIES ?? 2),
});
}
const client = makeLlmClient();
const completion = await client.chat.completions.create({
model: process.env.FLATKEY_MODEL,
messages: [
{ role: "system", content: "You answer with short implementation notes." },
{ role: "user", content: "Reply with exactly: migration probe ok" },
],
});
console.log(completion.choices[0].message.content);
La aplicación debe llamar a make_llm_client() o makeLlmClient(), no construir clientes en diferentes controladores, trabajadores y scripts. Ese único límite es lo que permite que una migración de SDK multimodelo siga siendo reversible.
Paso 2: Construir un mapa de modelos y endpoints
No apuntes cada carga de trabajo a un solo nombre de modelo nuevo. Comienza con un mapa que nombre la carga de trabajo, la familia de endpoints, el proveedor actual, el proveedor objetivo y el valor de reversión.
| Carga de trabajo | Familia de endpoints | Ruta actual | Ruta objetivo | Reversión |
|---|---|---|---|---|
| Chat de soporte | Completado de chat estilo OpenAI | Modelo actual de OpenAI | Alias de chat de Flatkey para GPT, Claude, Gemini o DeepSeek | Clave, URL base y modelo anteriores |
| Análisis interno | Completado de chat estilo OpenAI | Modelo actual de OpenAI | Alias de modelo de Flatkey seleccionado por razonamiento y costo | Alias de modelo anterior |
| Flujo de trabajo de herramientas | Completado de chat con herramientas | Modelo actual compatible con herramientas | Modelo candidato con comportamiento de herramienta verificado | Deshabilitar ruta del proveedor |
| UI de streaming | Stream de completado de chat | Analizador de stream actual | Proveedor candidato con prueba de stream sin procesar | Revertir el tráfico del stream |
| Característica nativa de Claude | API de mensajes de Anthropic | Cliente nativo de Claude | Mantener nativo si la compatibilidad elimina una característica requerida | No migrar esta ruta |
La página de modelos de Flatkey es útil aquí porque expone los tipos de endpoints. Si un modelo aparece bajo una familia de endpoints nativa, no asumas que está disponible a través de la ruta de chat de OpenAI hasta que el catálogo de tu cuenta y las pruebas de humo lo demuestren.
Paso 3: Ejecutar la prueba de humo de cuatro proveedores
La prueba de humo mínima útil para la migración de un SDK multimodelo tiene cuatro filas de proveedores y el mismo prompt. Mantén el prompt simple para que el estilo de la respuesta no oculte fallos de transporte.
| Prueba | Solicitud | Condición de aprobación | Fallo a clasificar |
|---|---|---|---|
| GPT o modelo actual de OpenAI | Solicitud existente con formato de OpenAI a través de Flatkey | La respuesta se devuelve, el uso es visible, los registros enlazan al alias esperado | Clave incorrecta, URL base incorrecta, /v1 duplicado, modelo faltante |
| Claude | Misma solicitud con formato de OpenAI a través del alias de Flatkey seleccionado | Se devuelve una respuesta simple; no hay características no compatibles en la solicitud | Mapeo de mensajes del sistema, esquema de herramientas, características nativas solo de Claude |
| Gemini | Misma solicitud con formato de OpenAI a través del alias de Flatkey seleccionado | Se devuelve una respuesta simple; los valores predeterminados de razonamiento son aceptables | Alias del modelo, configuración de razonamiento, suposiciones multimodales |
| DeepSeek | Misma solicitud con formato de OpenAI a través del alias de Flatkey seleccionado | Se devuelve una respuesta simple; el alias sensible a la obsolescencia está actualizado | Cambio de nombre del modelo, configuración de pensamiento, analizador de stream |
Guarda el cuerpo de la solicitud sin procesar, las cabeceras redactadas, el cuerpo de la respuesta, el estado HTTP, el alias del modelo, el ID de la solicitud si se devuelve y la entrada de uso del panel de control. Si algún proveedor necesita un parámetro diferente, mueve ese parámetro a un perfil de proveedor en lugar de esparcir ramas if provider == por toda tu aplicación.
Paso 4: Probar el streaming y las llamadas a herramientas por separado
Un completado simple solo prueba la ruta de menor riesgo. El streaming y las llamadas a herramientas son contratos separados.
Para el streaming, guarda:
| Evidencia | Por qué es importante |
|---|---|
| Encabezados de respuesta | Confirma si la ruta devuelve datos de event-stream. |
| Primer evento | Detecta problemas de almacenamiento en búfer o del analizador de proxy. |
| Evento final | Confirma el manejo del final del flujo y el comportamiento de uso. |
| Salida del analizador de la interfaz de usuario | Demuestra que tu frontend no asumió la forma de los fragmentos de un solo proveedor. |
Para las herramientas, prueba primero un esquema pequeño:
{
"type": "function",
"function": {
"name": "lookup_order_status",
"description": "Return a test order status.",
"parameters": {
"type": "object",
"properties": {
"order_id": { "type": "string" }
},
"required": ["order_id"]
}
}
}
No utilices tu esquema de herramientas de producción más grande como primera prueba. La documentación de compatibilidad de Anthropic, por ejemplo, señala las limitaciones en torno a la compatibilidad con OpenAI y recomienda la API nativa de Claude para obtener el conjunto completo de características de Claude. Ese es exactamente el tipo de detalle que una lista de verificación para la migración de un SDK multimodelo debería detectar antes del despliegue.
Paso 5: Mantén perfiles de proveedor pequeños
Los perfiles de proveedor deben describir las diferencias, no contener la lógica de negocio.
{
"support_chat": {
"base_url_env": "FLATKEY_BASE_URL",
"model_env": "FLATKEY_SUPPORT_CHAT_MODEL",
"endpoint_family": "openai_chat_completions",
"stream": true,
"tools": "basic",
"fallback_alias": "support_chat_previous"
},
"analysis_fast": {
"base_url_env": "FLATKEY_BASE_URL",
"model_env": "FLATKEY_ANALYSIS_FAST_MODEL",
"endpoint_family": "openai_chat_completions",
"stream": false,
"tools": "none",
"fallback_alias": "analysis_fast_previous"
}
}
Mantén las características nativas del proveedor fuera de la ruta del cliente compartido de OpenAI a menos que tengas pruebas para cada proveedor de destino. Si se requieren citas de Claude, comportamiento de medios específico de Gemini, controles de pensamiento de DeepSeek o un punto de conexión por lotes nativo del proveedor, crea un adaptador nativo con nombre y conserva la ruta compatible con OpenAI para las cargas de trabajo que realmente se ajusten a ella.
Paso 6: Comprueba la facturación y la reversión
Una migración que devuelve texto pero pierde la evidencia de facturación no está completa. Antes de aumentar el tráfico, guarda:
| Verificación de operaciones | Condición de aprobación |
|---|---|
| Visibilidad del uso | La solicitud aparece en el uso o los registros de Flatkey con el contexto de ruta/modelo esperado. |
| Revisión de costos | Los registros de precios o de uso son lo suficientemente visibles para que el departamento financiero o de operaciones los concilien. |
| Comportamiento de la cuota | Una cuota de prueba baja o un umbral de presupuesto se comporta como se espera en una clave que no es de producción. |
| Taxonomía de errores | Los errores 401, 403, 404, 429, 5xx y los errores del proveedor se asignan a acciones claras para el propietario. |
| Reversión | Un cambio de entorno devuelve el tráfico a la clave/URL base/modelo anterior. |
Aquí es donde importa la revisión unificada de facturación y uso de Flatkey. El objetivo no es solo tener acceso a más modelos. El objetivo de una migración de SDK multimodelo es un acceso que los equipos de producto, operaciones y finanzas puedan inspeccionar después de que se mueva el tráfico.
Un flujo de trabajo de transición para la migración de SDK multimodelo
Utiliza este orden para la primera porción de producción:
- Elige una carga de trabajo de bajo riesgo con un cliente de SDK de OpenAI existente.
- Añade la fábrica de clientes y las variables de entorno sin cambiar el proveedor actual.
- Prueba el modelo actual a través de la nueva fábrica.
- Prueba un destino de Claude, Gemini o DeepSeek con una finalización simple.
- Prueba el streaming y las herramientas solo si esa carga de trabajo los utiliza.
- Verifica el uso, la facturación, el manejo de errores y la reversión.
- Dirige un pequeño porcentaje del tráfico al nuevo alias del modelo.
- Revisa los fallos por proveedor y familia de puntos de conexión antes de añadir la siguiente carga de trabajo.
Si la primera carga de trabajo necesita características nativas del proveedor, elige una carga de trabajo diferente para la primera migración de SDK multimodelo. La primera porción debe probar el patrón de migración, no todas las capacidades del modelo.
Preguntas frecuentes
¿Puedo usar un cliente de SDK de OpenAI para Claude, Gemini y DeepSeek?
A menudo puedes mantener un cliente de SDK de OpenAI para rutas compatibles con OpenAI, pero aún necesitas pruebas específicas del proveedor. Google y DeepSeek documentan el acceso compatible con OpenAI. Anthropic documenta una capa de compatibilidad con el SDK de OpenAI, pero dice que es principalmente para pruebas y comparación en lugar de ser la opción de producción a largo plazo para la mayoría de los casos de uso.
¿Debo migrar el tráfico de la API de respuestas de la misma manera?
Solo si la puerta de enlace de destino y el modelo de destino admiten explícitamente la familia de puntos de conexión que estás utilizando. Las finalizaciones de chat y las respuestas no son el mismo contrato. Comienza con la familia de puntos de conexión que tu aplicación ya utiliza y luego crea un plan de pruebas separado para las respuestas.
¿Cuál es el error más común en una migración de SDK multimodelo?
El error más común es tratar el cambio de la URL base como si fuera toda la migración. Una verdadera migración de SDK multimodelo también verifica los nombres de los modelos, las familias de puntos de conexión, el streaming, las herramientas, el uso, la cuota, el manejo de errores y la reversión.
¿Cuándo debo mantener un SDK de proveedor nativo?
Conserva un SDK de proveedor nativo cuando tu carga de trabajo dependa de características específicas del proveedor que la capa de compatibilidad no cubra. Las características nativas de Claude, las rutas de medios específicas de Gemini o los controles de razonamiento específicos de DeepSeek pueden justificar un adaptador separado.
Lista de verificación final
Antes de dar por completada la migración, confirma que tienes:
| Elemento | Completado cuando |
|---|---|
| Fábrica de clientes | Todas las rutas de la aplicación utilizan un envoltorio del SDK de OpenAI o un adaptador nativo con nombre. |
| División de configuración | La clave de API, la URL base, el alias del modelo, el tiempo de espera, los reintentos y el propietario de la ruta se controlan por el entorno. |
| Prueba de proveedor | Los candidatos de GPT, Claude, Gemini y DeepSeek se probaron con evidencia sin procesar guardada. |
| Prueba de funcionalidad | El streaming y las herramientas se probaron por separado del chat simple. |
| Prueba de operaciones | El uso, la facturación, la cuota, los registros y los errores son visibles para los propietarios correctos. |
| Prueba de reversión | Un cambio documentado devuelve la carga de trabajo a la ruta anterior. |
La migración de SDK multimodelo funciona mejor cuando es aburrida: una pequeña carga de trabajo, un límite de cliente, un mapa de modelos y evidencia para cada proveedor que agregues. Cuando estés listo para ejecutar esas pruebas a través de una ruta unificada, obtén una clave de Flatkey y comienza con una ruta de chat compatible con OpenAI de bajo riesgo.



