Skip to content
chatflow-agent logochatflow-agent
Proveedores de LLM

OpenAI y Endpoints Compatibles

Configuración, preajustes, pasarelas personalizadas y políticas de seguridad para OpenAI, Groq, DeepSeek y xAI Grok.

OpenAIEngine proporciona soporte para modelos que implementan el protocolo estándar /chat/completions de OpenAI. Más allá de los modelos oficiales de OpenAI (como GPT-4o y o3-mini), este motor universal se conecta directamente con xAI Grok, DeepSeek, Groq, servidores locales de inferencia (vLLM, LM Studio) y pasarelas de API corporativas.

Preajustes Integrados de Proveedores

Para reducir la configuración manual de endpoints, chatflow-agent incluye preajustes verificados para los principales proveedores compatibles con OpenAI:

Clave de ProveedorEndpoint Oficial (base_url)Variable de EntornoModelo Predeterminado
"openai"https://api.openai.com/v1OPENAI_API_KEYgpt-4o-mini
"grok" / "xai"https://api.x.ai/v1XAI_API_KEYgrok-2
"deepseek"https://api.deepseek.com/v1DEEPSEEK_API_KEYdeepseek-chat
"groq"https://api.groq.com/openai/v1GROQ_API_KEYllama-3.3-70b-versatile
"ollama"http://localhost:11434/v1OLLAMA_API_KEYgemma2:9b

Configuración de Modelos Oficiales de OpenAI

Para utilizar modelos de OpenAI, proporciona tu clave de API mediante la variable de entorno OPENAI_API_KEY o directamente en el constructor del agente o motor:

import os
from chatflow_agent import Agent, Runner
from chatflow_agent.core.engines.openai_compatible import OpenAIEngine

# Opción 1: Resolución implícita mediante el prefijo del nombre del modelo
analyst = Agent(
    name="Analyst",
    model="gpt-4o",
    instructions="Analyze structured operational data.",
)

# Opción 2: Asignación explícita del proveedor
writer = Agent(
    name="Writer",
    provider="openai",
    model="gpt-4o-mini",
    instructions="Draft concise summaries.",
)

# Opción 3: Instanciación explícita del motor con parámetros personalizados
custom_engine = OpenAIEngine(
    api_key=os.environ.get("OPENAI_API_KEY"),
    provider="openai",
    timeout=45.0,
)
senior_agent = Agent(
    name="SeniorAgent",
    model="gpt-4o",
    engine=custom_engine,
    instructions="Review critical business decisions.",
)

Proveedores de Terceros: Groq, DeepSeek y xAI Grok

Conectarse a proveedores de inferencia de ultra alta velocidad o modelos de razonamiento especializados solo requiere especificar el atributo provider o el prefijo de modelo estándar:

import os
from chatflow_agent import Agent
from chatflow_agent.core.engines.openai_compatible import OpenAIEngine

# Requiere la variable de entorno GROQ_API_KEY
groq_engine = OpenAIEngine(
    provider="groq",
    api_key=os.environ.get("GROQ_API_KEY"),
)

speed_agent = Agent(
    name="SpeedAgent",
    model="llama-3.3-70b-versatile",
    engine=groq_engine,
    instructions="Provide real-time triage responses.",
)

Endpoints Personalizados y Pasarelas Privadas

Al conectarse a instancias privadas (vLLM, LM Studio, Azure OpenAI proxy o LiteLLM), proporciona un base_url personalizado:

from chatflow_agent import Agent
from chatflow_agent.core.engines.openai_compatible import OpenAIEngine

# Pasarela corporativa de inferencia personalizada
gateway_engine = OpenAIEngine(
    base_url="https://ai-gateway.internal.corp/v1",
    api_key="internal-gateway-token",
    timeout=60.0,
)

internal_agent = Agent(
    name="InternalAssistant",
    model="custom-llama-3",
    engine=gateway_engine,
    instructions="Answer queries using internal compliance guidelines.",
)

Regla de Seguridad: Prevención de Fugas de Credenciales

Credenciales Explícitas Obligatorias en Hosts Personalizados

chatflow-agent verifica estrictamente el host de destino antes de transmitir tokens de API:

  • La clave de entorno (ej. OPENAI_API_KEY) solo se envía al endpoint oficial (https://api.openai.com/v1).
  • Si se pasa un base_url personalizado sin un api_key explícito, OpenAIEngine genera un ValueError en lugar de reenviar tu clave de la nube a un host ajeno.
  • Si tu proxy local o interno no requiere autenticación, pasa api_key="" de forma explícita.
# [INCORRECTO] Genera ValueError para proteger tu OPENAI_API_KEY de fugas accidentales:
# engine = OpenAIEngine(base_url="https://untrusted-proxy.example.com/v1")

# [CORRECTO] Suministra credenciales explícitamente para hosts personalizados:
engine = OpenAIEngine(
    base_url="https://proxy.example.com/v1",
    api_key="proxy-secret-token",
)

# [CORRECTO] Servidor interno no autenticado:
open_engine = OpenAIEngine(
    base_url="http://192.168.1.100:8000/v1",
    api_key="",
)

Restricciones y Normalización de IDs de Llamadas a Herramientas

OpenAI impone una longitud máxima estricta de 40 caracteres en el tool_call_id de las respuestas de llamadas a funciones. En entornos multi-agente donde los agentes transfieren sesiones entre diferentes proveedores (por ejemplo, herramientas de Anthropic Claude que generan IDs superiores a 40 caracteres), chatflow-agent garantiza la compatibilidad del protocolo:

  1. Truncamiento y Hashing: Si un mensaje histórico existente contiene un ID de llamada a herramienta superior a 40 caracteres, OpenAIEngine lo sustituye de forma segura por un identificador determinista derivado mediante SHA-256 (call_ + 24 caracteres hexadecimales).
  2. Normalización de Tipos de Esquema: El motor normaliza automáticamente los tipos de parámetros JSON Schema (_lowercase_schema_types) preservando al mismo tiempo esquemas de propiedades personalizadas, garantizando la compatibilidad entre distintas versiones de modelos de OpenAI.

Resolución de Problemas

ErrorCausaResolución
ValueError: A custom or unofficial base_url was provided ... without an explicit api_keyLa protección de seguridad detectó un base_url personalizado sin haber suministrado un api_key explícito.Pasa api_key="tu-clave" o api_key="" explícitamente para confirmar el host de destino.
ProviderError: 401 UnauthorizedClave de API inválida o expirada.Verifica OPENAI_API_KEY, GROQ_API_KEY o DEEPSEEK_API_KEY en tu entorno.
ProviderError: 429 Too Many RequestsLímite de tasa excedido o cuota agotada.Implementa limitación de tasa, amplía tu plan o utiliza un preajuste de proveedor alternativo.

On this page