GPT-6.1 Sol are now live on CometAPI →
ai-model/Investigación de CometAPI

Cómo crear un agente de IA con Grok 4.7: Python, llamadas a herramientas y conmutación por error multimodelo

Cree un agente de IA Grok 4.7 en Python con llamadas a herramientas, ejecución acotada y conmutación por error gestionada por la aplicación entre GPT, Claude, Gemini y DeepSeek.

CometAPI
Bobby SpencerEquipo de investigación de modelos de IA y API
Actualizado Oct 4, 2026 13 min de lectura
Cómo crear un agente de IA con Grok 4.7: Python, llamadas a herramientas y conmutación por error multimodelo
Usa este patrón

Haz la primera llamada a la API.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_COMETAPI_KEY",
    base_url="https://api.cometapi.com/v1",
)

response = client.chat.completions.create(
    model="gpt-5-mini",
    messages=[{"role": "user", "content": "Build this workflow."}],
)

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

Si quieres crear una única aplicación de IA con GPT, Claude, Gemini, DeepSeek y Grok, utiliza una API unificada para la ruta de solicitudes común y mantén la política de enrutamiento dentro de tu aplicación. CometAPI proporciona una URL base compatible con OpenAI y un catálogo de modelos compartido, de modo que un servicio de Python puede llamar a distintos IDs de modelo mediante un único cliente. Tu código sigue decidiendo qué modelo se ejecuta, qué herramientas están permitidas y cuándo es seguro recurrir a un fallback.

Este tutorial construye un agente Grok 4.7 que puede solicitar dos herramientas empresariales de solo lectura, rechaza herramientas desconocidas y argumentos malformados antes de la ejecución, y cambia a otro modelo probado por contrato solo tras fallos transitorios seleccionados. El objetivo no es un sistema autónomo mágico. Es un bucle pequeño e inspeccionable que puede probarse y operarse en producción.

Qué vas a construir

El agente tiene cinco partes explícitas:

  1. Un cliente de CometAPI. El SDK de OpenAI para Python usa la URL base de la API de CometAPI que se muestra en la configuración siguiente.
  2. Grok 4.7 como modelo principal. El ID de modelo actual en CometAPI es grok-4.7.
  3. Un registro de herramientas. El modelo puede proponer una llamada de función, pero solo el código de la aplicación puede ejecutar una función en la lista de permitidas.
  4. Un bucle de agente acotado. El bucle se detiene tras un número fijo de turnos del modelo en lugar de ejecutarse indefinidamente.
  5. Una política de fallback ordenada. Se intentan IDs de modelo compatibles de GPT, Claude, Gemini o DeepSeek solo después de un fallo del modelo/API susceptible de reintento.

Grok 4.7 admite llamadas a funciones y CometAPI documenta actualmente las rutas /v1/chat/completions y /v1/responses para el modelo. Este tutorial utiliza Chat Completions porque sus tools compatibles con OpenAI, las llamadas de herramienta del asistente y los mensajes de resultado tool coincidentes se mapean directamente a un bucle de Python compacto e inspeccionable. La compatibilidad de transporte no demuestra paridad de funciones en todos los modelos, por lo que cada fallback configurado debe pasar las mismas pruebas de contrato antes de entrar en producción.

Estado de razonamiento en agentes Grok 4.7 multivuelta

Grok 4.7 acepta low, medium, high o xhigh como esfuerzo de razonamiento, con high como valor predeterminado. En la Responses API de xAI, cada respuesta de Grok 4.7 incluye reasoning.encrypted_content; un bucle multivuelta gestionado por el cliente debería reenviar los elementos de razonamiento devueltos sin cambios en la siguiente solicitud. Los bucles largos también pueden usar context compaction: conserva el elemento de compactación devuelto como estado opaco y añade nuevos turnos después de él. Dado que son campos de respuesta con estado y específicos del proveedor, verifica que la ruta de CometAPI seleccionada los devuelva de extremo a extremo antes de convertirlos en una dependencia de producción.

Arquitectura del agente: el modelo propone, tu aplicación decide

Un flujo seguro de llamadas a herramientas es simple:

User request → model response → validate tool call → execute allowlisted tool → append tool result → model response

El modelo nunca recibe credenciales de base de datos ni ejecuta Python directamente. Produce una solicitud estructurada como “llama a get_order_status con este ID de pedido”. Tu aplicación comprueba el nombre de la herramienta, analiza los argumentos, aplica autorizaciones y reglas de negocio, ejecuta la función y devuelve un resultado serializado.

Esta separación importa más que la elección del modelo. Un modelo de fallback debe heredar el mismo límite de herramientas —no uno más amplio— y los resultados de herramientas deben tratarse como datos no confiables cuando contengan contenido externo.

Cómo crear un agente de IA Grok 4.7 con Python

Paso 1: Configura el SDK de OpenAI para Python para CometAPI

Instala el SDK de OpenAI:

pip install openai

Configura a través de variables de entorno:

export COMETAPI_KEY="your-cometapi-key"
export PRIMARY_MODEL="grok-4.7"
export FALLBACK_MODEL_1="your-compatible-gpt-model-id"
export FALLBACK_MODEL_2="your-compatible-claude-model-id"
export FALLBACK_MODEL_3="your-compatible-gemini-model-id"
export FALLBACK_MODEL_4="your-compatible-deepseek-model-id"

Este tutorial utiliza Chat Completions porque sus llamadas explícitas a herramientas por parte del asistente y los mensajes de resultado de herramientas coincidentes facilitan inspeccionar el flujo de control en un ejemplo compacto de Python. Para bucles con estado más largos, evalúa la Responses API como se describió arriba. Además, no copies IDs de modelos antiguos de una entrada de blog a producción: recupera el catálogo público de CometAPI GET /api/models durante el despliegue o el arranque y luego confirma capacidades y precios en el directorio de modelos.

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["COMETAPI_KEY"],
    base_url="https://api.cometapi.com/v1",
    max_retries=0,
    timeout=30.0,
)

El timeout explícito y los reintentos desactivados del SDK son deliberados. La aplicación clasificará los fallos y decidirá si repetir la solicitud o pasar al siguiente modelo. Los reintentos ocultos dificultan entender la latencia, los efectos secundarios duplicados y el comportamiento de fallback.

Paso 2: Define primero herramientas limitadas y de solo lectura

Empieza con herramientas que lean datos en lugar de cambiarlos. Las siguientes definiciones permiten al agente comprobar un pedido y consultar inventario. La implementación devuelve datos de demostración; sustitúyela por llamadas autenticadas a tus propios servicios.

import json

TOOLS = [
    {
        "type": "function",
        "function": {
            "name": "get_order_status",
            "description": "Read the current status of one order.",
            "parameters": {
                "type": "object",
                "properties": {
                    "order_id": {"type": "string"}
                },
                "required": ["order_id"],
                "additionalProperties": False,
            },
        },
    },
    {
        "type": "function",
        "function": {
            "name": "check_inventory",
            "description": "Read available inventory for one SKU.",
            "parameters": {
                "type": "object",
                "properties": {
                    "sku": {"type": "string"}
                },
                "required": ["sku"],
                "additionalProperties": False,
            },
        },
    },
]

def get_order_status(order_id: str) -> dict:
    # Replace this demo with an authenticated, read-only service call.
    return {"order_id": order_id, "status": "in_transit"}

def check_inventory(sku: str) -> dict:
    # Replace this demo with an authenticated, read-only service call.
    return {"sku": sku, "available_units": 12}

TOOL_REGISTRY = {
    "get_order_status": get_order_status,
    "check_inventory": check_inventory,
}

Un esquema JSON mejora la forma de la solicitud, pero no es autorización. Valida longitudes y formatos de argumentos, confirma que el usuario actual puede acceder al pedido o SKU solicitado y limita el tamaño de cada resultado de herramienta antes de devolverlo al modelo.

Paso 3: Añade una política de fallback multimodelo y limitada

El fallback debe recuperarse de fallos temporales de ruta, no ocultar solicitudes defectuosas. La guía oficial de fallback de CometAPI recomienda pasar a la siguiente ruta configurada en caso de errores de conexión, timeouts, HTTP 408, HTTP 429 y respuestas 5xx temporales. Credenciales inválidas, parámetros no admitidos y solicitudes inválidas deben fallar inmediatamente.

from openai import APIConnectionError, APIStatusError, APITimeoutError

def configured_models() -> list[str]:
    names = [
        os.getenv("PRIMARY_MODEL", "grok-4.7"),
        os.getenv("FALLBACK_MODEL_1"),
        os.getenv("FALLBACK_MODEL_2"),
        os.getenv("FALLBACK_MODEL_3"),
        os.getenv("FALLBACK_MODEL_4"),
    ]
    return [name for name in names if name]

def is_retryable(error: Exception) -> bool:
    if isinstance(error, (APIConnectionError, APITimeoutError)):
        return True
    if isinstance(error, APIStatusError):
        return error.status_code in {408, 429} or error.status_code >= 500
    return False

def complete_with_fallback(messages: list[dict], tools: list[dict]):
    models = configured_models()
    last_error = None

    for index, model in enumerate(models):
        try:
            response = client.chat.completions.create(
                model=model,
                messages=messages,
                tools=tools,
                tool_choice="auto",
            )
            return response, model
        except Exception as error:
            last_error = error
            final_route = index == len(models) - 1
            if final_route or not is_retryable(error):
                raise

    raise RuntimeError("No configured model completed the request") from last_error

La lista de modelos es configuración, no un ranking de calidad. Elige fallbacks que admitan los mismos roles de mensaje, esquema de herramientas, modalidad de entrada, requisitos de contexto y comportamiento de respuesta que necesita este agente. Registra la ruta seleccionada y el fallo que causó cada transición.

Paso 4: Ejecuta el bucle acotado del agente Grok 4.7

El siguiente bucle envía la conversación, ejecuta cualquier llamada a herramienta permitida, añade resultados con el tool_call_id correspondiente y pide al modelo seleccionado que termine la respuesta.

def execute_tool_call(tool_call) -> str:
    name = tool_call.function.name

    if name not in TOOL_REGISTRY:
        return json.dumps({"error": f"Tool not allowed: {name}"})

    try:
        arguments = json.loads(tool_call.function.arguments)
        result = TOOL_REGISTRY[name](**arguments)
        return json.dumps(result)
    except (json.JSONDecodeError, TypeError, ValueError) as error:
        return json.dumps({"error": f"Invalid tool arguments: {error}"})

def run_agent(user_text: str, max_turns: int = 4) -> dict:
    messages = [
        {
            "role": "system",
            "content": (
                "You are a support agent. Use tools only when needed. "
                "Never invent order or inventory data."
            ),
        },
        {"role": "user", "content": user_text},
    ]
    route_log = []

    for turn in range(max_turns):
        response, model = complete_with_fallback(messages, TOOLS)
        route_log.append({"turn": turn + 1, "model": model})

        assistant = response.choices[0].message
        messages.append(assistant.model_dump(exclude_none=True))

        if not assistant.tool_calls:
            return {
                "answer": assistant.content,
                "routes": route_log,
                "usage": response.usage.model_dump() if response.usage else None,
            }

        for tool_call in assistant.tool_calls:
            messages.append(
                {
                    "role": "tool",
                    "tool_call_id": tool_call.id,
                    "content": execute_tool_call(tool_call),
                }
            )

    raise RuntimeError("Agent stopped after reaching max_turns")

result = run_agent("Where is order A-104, and is SKU BLUE-42 in stock?")
print(result["answer"])
print(result["routes"])

El código admite múltiples llamadas a herramientas en una respuesta del modelo porque añade un resultado para cada llamada devuelta. Si una herramienta cambia estado —enviar un correo, realizar un pedido o emitir un reembolso— añade una clave de idempotencia y un paso de confirmación humana. Nunca reinicies todo el turno del agente a ciegas tras un timeout si ya pudo ocurrir un efecto secundario.

Cómo encajan GPT, Claude, Gemini y DeepSeek en la misma aplicación

CometAPI puede reducir la duplicación en la capa de conexión: una cuenta, una URL base compatible con OpenAI para la ruta común y un ID de modelo seleccionado por el código de la aplicación. Eso convierte a GPT, Claude, Gemini, DeepSeek y Grok en candidatos detrás de una única interfaz interna.

No hace que los modelos sean intercambiables. Antes de añadir un fallback, verifica:

  • que el ID de modelo actual aparece en el catálogo de CometAPI;
  • que la ruta admite el esquema de herramientas y los roles de mensaje requeridos;
  • que los argumentos de llamadas a herramientas y el comportamiento de llamadas múltiples coinciden con el contrato del agente;
  • que la ventana de contexto y las modalidades de entrada se ajustan a la solicitud;
  • que la respuesta puede validarse antes de llegar al usuario;
  • que la latencia y el coste se mantienen dentro del presupuesto del producto.

Las funciones nativas del proveedor pueden requerir un endpoint nativo o un adaptador independiente. Mantén esas excepciones explícitas en lugar de forzar todas las capacidades a través de la interfaz común.

El fallback multimodelo de Grok 4.7 no es lo mismo que un sistema multiagente

Una cadena de fallback multimodelo elige otro modelo cuando falla una ruta. Un sistema multiagente asigna responsabilidades diferentes a agentes separados, por ejemplo, un planificador, un investigador y un revisor. Resuelven problemas distintos.

Si amplías este agente Grok 4.7 a un flujo multiagente, da a cada trabajador un rol estrecho, una lista de herramientas permitidas separada, un presupuesto acotado y una entrega estructurada. No permitas que todos los agentes llamen a todas las herramientas ni que reenvíen una transcripción ilimitada. Empieza con un solo agente hasta que los datos de evaluación demuestren que la separación de roles mejora el resultado.

Salvaguardas de producción para un agente de IA Grok 4.7

Valida antes de ejecutar herramientas

Comprueba nombres de herramientas, esquemas de argumentos, pertenencia de tenant, permisos de usuario y límites de tasa en el código de la aplicación. Trata las descripciones de herramientas como orientación para el modelo, no como control de seguridad.

Separa las herramientas de lectura de las de escritura

Las herramientas de solo lectura pueden ejecutarse automáticamente tras la autorización. Las de escritura deben requerir comprobaciones más estrictas, idempotencia y confirmación para acciones con consecuencias.

Acota cada bucle

Establece un número máximo de turnos del modelo, llamadas a herramientas, tiempo de pared, tamaño del prompt y presupuesto de tokens. Devuelve un error controlado o una vía de escalado cuando se alcance un límite.

Registra la traza de decisiones

Registra la tarea solicitada, la versión de la política, el ID de modelo seleccionado, el motivo del fallback, el nombre de la herramienta, la latencia de la herramienta, el resultado de validación, el consumo de tokens y el estado final. No registres secretos ni contenido de clientes innecesario.

Usa pruebas de contrato, no suposiciones

Ejecuta los mismos fixtures contra cada modelo configurado. Un conjunto mínimo útil cubre una respuesta normal, una llamada a herramienta, múltiples llamadas a herramientas, argumentos malformados, una herramienta desconocida, un timeout de herramienta, un 429 del modelo primario y una clave de API inválida que no debe activar fallback.

Lista de comprobación para el despliegue

  • Recupera los IDs de modelos actuales y verifica la ruta de Grok 4.7 antes del despliegue.
  • Mantén la clave de CometAPI en un gestor de secretos, nunca en el código fuente o prompts.
  • Comienza con herramientas de solo lectura y esquemas JSON explícitos.
  • Aplica autenticación y autorización por tenant antes de cada llamada a herramienta.
  • Permite el fallback solo para errores transitorios clasificados.
  • Prueba cada fallback con el mismo contrato de llamadas a herramientas.
  • Añade idempotencia y confirmación antes de habilitar herramientas de escritura.
  • Establece límites de bucle, latencia, contexto y coste.
  • Mide el éxito de la tarea, no solo la disponibilidad de la API.

¿Por qué construir este agente a través de CometAPI?

CometAPI es útil aquí porque la integración común se mantiene pequeña. El SDK de OpenAI para Python apunta a una única URL base, Grok 4.7 se selecciona por ID de modelo y modelos compatibles de otros proveedores pueden situarse detrás de la misma política de rutas propiedad de la aplicación.

Eso da al equipo margen para evaluar GPT, Claude, Gemini y DeepSeek sin dispersar código de conexión específico de cada proveedor por el producto. También preserva un límite importante: CometAPI proporciona el acceso, mientras tu aplicación es responsable de las comprobaciones de capacidad, la ejecución de herramientas, la política de fallback, la evaluación y el comportamiento de cara al usuario.

Revisa la página del modelo Grok 4.7, configura el cliente desde el quickstart de CometAPI y recupera los IDs de modelos actuales antes de elegir fallbacks de producción.

Preguntas frecuentes

¿Qué API debería usar para una aplicación con GPT, Claude, Gemini y DeepSeek?

Para la ruta común de chat y llamadas a herramientas, una API unificada compatible con OpenAI como CometAPI puede reducir el trabajo de integración. Mantén la selección de modelo y la política de fallback en tu aplicación y usa adaptadores nativos del proveedor cuando una función necesaria no encaje en el contrato compartido.

¿Puede Grok 4.7 llamar directamente a funciones de Python?

Grok 4.7 puede devolver solicitudes estructuradas de llamadas a función. Tu aplicación en Python analiza la solicitud, la valida, ejecuta una función permitida y envía el resultado de vuelta al modelo. El modelo en sí no ejecuta Python localmente.

¿Todo error debería activar un modelo diferente?

No. Usa fallback para fallos de conexión seleccionados, timeouts, 408, 429 y respuestas 5xx temporales. Solicitudes inválidas, fallos de autenticación y parámetros no admitidos deben corregirse en lugar de enviarse a otro modelo.

¿Puedo usar un único esquema de herramientas con todos los modelos?

Solo después de probarlo. Un transporte compartido no garantiza un comportamiento de herramientas idéntico, calidad de argumentos, comportamiento de llamadas paralelas o cumplimiento del esquema. Añade un modelo a la cadena solo después de que pase las pruebas de contrato del agente.

¿Un sistema de fallback multimodelo es un sistema multiagente?

No. El fallback cambia el modelo utilizado para una solicitud tras un fallo de ruta. La arquitectura multiagente asigna tareas diferentes a agentes separados. Construye ambas como capas distintas con pruebas y controles separados.

Fuentes

Seguir aprendiendo

Conecta este artículo con la siguiente decisión.

Ver todos los temas
Publicado el Oct 4, 2026
Última actualización Oct 4, 2026
0 visitas
Revisado para mayor claridad, atribución de fuentes y terminología API actual.

Leer Más