Si inició una nueva aplicación con LLM en los últimos 18 meses, hay una alta probabilidad de que la línea de importación diga from openai import OpenAI. El SDK está bien diseñado, la documentación es buena y la mayoría de los demás proveedores han copiado la forma de la solicitud y la respuesta. Es una feliz coincidencia para todos: significa que puede cambiar de proveedor sin reescribir su aplicación.
MicroDC.ai ofrece un endpoint de Chat Completions compatible con OpenAI. Usted cambia la base_url por la nuestra, proporciona su clave de API de MicroDC.ai y el resto de su código — incluidos LangChain, LlamaIndex, Instructor y cualquier otra biblioteca construida sobre el SDK de OpenAI — funciona sin modificaciones.
El diff.
Esta es una integración típica con OpenAI:
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Summarize this contract..."}],
)
print(resp.choices[0].message.content)
La versión con MicroDC.ai:
from openai import OpenAI
client = OpenAI(
api_key=os.environ["MICRODC_API_KEY"],
base_url="https://api.microdc.ai/v1",
)
resp = client.chat.completions.create(
model="llama-3.1-8b",
messages=[{"role": "user", "content": "Summarize this contract..."}],
)
print(resp.choices[0].message.content)
Cambian dos líneas: la base_url y el model. Todo lo demás es idéntico — incluidos la forma de la respuesta, el formato de los errores y los nombres de los parámetros. Si ya había encapsulado el cliente de OpenAI en una clase de servicio, cambiaría la base_url en un solo lugar y lo desplegaría.
Lo que funciona tal cual.
- Chat completions. La forma completa de solicitud y respuesta, incluidos los roles de mensaje
system/user/assistant,temperature,top_p,max_tokens,stopy la respuesta estándarchoices[]. - Listas de contenido multimodal. Pase partes de imagen como
{"type": "image_url", "image_url": {"url": "..."}}y se enrutan a los modelos con capacidad de visión de nuestro catálogo. - LangChain.
ChatOpenAI(base_url="https://api.microdc.ai/v1", api_key="...")— pipelines, agentes y herramientas funcionan. - LlamaIndex. El mismo patrón mediante
OpenAI(api_base="https://api.microdc.ai/v1", api_key="..."). - Instructor. Parchea el cliente de OpenAI; el cliente parcheado apunta adonde apunte el cliente subyacente. Las salidas estructuradas funcionan.
- Cualquier otra biblioteca que le permita sobrescribir
base_urloapi_baseen el cliente de OpenAI.
Lo que es diferente.
Conviene ser claros sobre las diferencias, porque las sorpresas en producción son las peores:
- Asíncrono por defecto por debajo. El endpoint acepta la solicitud de forma síncrona y devuelve la respuesta de forma síncrona — esa parte tiene la forma de OpenAI. Internamente, el trabajo pasa por nuestra cola de trabajos asíncrona. Para la mayoría de las cargas por lotes y de chat, la sobrecarga es de decenas de milisegundos. Para casos de uso críticos en latencia, por debajo del segundo, necesita un proveedor de inferencia en tiempo real.
- Los modelos son distintos. Ejecutamos modelos de código abierto — Llama, Mistral, Qwen, DeepSeek, Phi, Gemma y otros. Los nombres de modelo
gpt-*no se resolverán. Consulte el catálogo de modelos para ver lo que está disponible actualmente. - Llamadas a funciones / herramientas. Compatibles en los modelos cuyos tokenizadores y plantillas de chat incluyen el formato de llamada a herramientas. Llama 3.x y Qwen 2.5 funcionan sin problemas. Los modelos más antiguos pueden no hacerlo. Verifíquelo antes de depender de ello en producción.
- Streaming. El streaming mediante eventos enviados por el servidor se está desplegando en todo el catálogo de modelos. La mayoría de los modelos LLM ya transmiten hoy; algunos modelos especializados aún no.
- Logprobs y otros campos de uso poco frecuente. Algunos campos avanzados (
logprobs,seed, etc.) se aceptan pero no siempre se devuelven, según el servidor de modelos subyacente. Si su código depende de ellos, pruebe primero.
La diferencia de costo.
Para la misma chat completion con Llama 3.1 8B (1,000 tokens de salida, ~500 de entrada):
| Proveedor | Costo | Notas |
|---|---|---|
| Nube principal, serverless | $0.10–$0.20 | Prima de tiempo real incluida |
| OpenAI gpt-4o-mini, calidad equivalente | ~$0.0006 | Nivel propietario económico |
| MicroDC.ai llama-3.1-8b | ~$0.011 | Pesos abiertos, costo de infraestructura fraccional |
El nivel propietario es competitivo en precio bruto para modelos pequeños, pero usted renuncia al control: enrutamiento opaco, límites de tasa inesperados y ninguna posibilidad de usar un modelo personalizado o ajustado. El nivel de MicroDC.ai gana con claridad cuando quiere ejecutar modelos de pesos abiertos, cuando necesita precios predecibles para volumen por lotes o cuando tiene requisitos de residencia de datos o de conocimiento cero que las API propietarias no pueden cumplir.
Migración en un solo diff.
La mayoría de los equipos que hemos migrado tienen una clase envolvente alrededor del cliente de OpenAI — algo como LLMClient en su carpeta services/. La migración consiste en cambiar el constructor en ese único archivo. El resto del código base no sabe que se ejecuta sobre otro proveedor.
--- a/services/llm_client.py
+++ b/services/llm_client.py
@@
-client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
+client = OpenAI(
+ api_key=os.environ["MICRODC_API_KEY"],
+ base_url="https://api.microdc.ai/v1",
+)
@@
-DEFAULT_MODEL = "gpt-4o-mini"
+DEFAULT_MODEL = "llama-3.1-8b"
Ese es todo el cambio. Ejecute su conjunto de pruebas. Ejecute un pequeño canario con tráfico real. Compare costos a fin de mes. La mayoría de los equipos mantienen ambos proveedores conectados durante una o dos versiones para poder hacer pruebas A/B y revertir si algo los sorprende.
La conclusión.
La compatibilidad con OpenAI no es una casilla de marketing. Significa que el SDK que ya usa, el código de framework que ya escribió y las pruebas de integración que ya tiene funcionan sin modificaciones. La brecha de costo entre una "API propietaria premium en tiempo real" y un "modelo de pesos abiertos en una red distribuida" es lo bastante grande como para importar en cualquier volumen de inferencia no trivial.
Si está pagando precios de tiempo real por una carga de trabajo con LLM que en realidad no es de tiempo real, esta migración está a un diff de distancia de una factura considerablemente menor.
Documentación para desarrolladores → Obtenga una clave de API →