Construye agentes de IA de producción con AgentKit de OpenAI
En el entorno en rápida evolución de la Inteligencia Artificial, el paradigma está cambiando de las interfaces de chat pasivas a agentes autónomos capaces de ejecutar flujos de trabajo complejos. Para los directores de tecnología y ingenieros senior, el desafío no solo radica en la ingeniería de prompts, sino en la coordinación de estados, herramientas y entornos de ejecución para crear sistemas fiables.
Este artículo explora la arquitectura y la implementación de agentes listos para producción utilizando el ecosistema de OpenAI«...para aprovechar al máximo el ecosistema, específicamente utilizando la API de Asistentes y las capacidades de llamada a funciones, para ofrecer una solución robusta».agentes de IA personalizados.
La arquitectura Agente: Más allá del chatbot
Un agente listo para su uso difiere fundamentalmente de un chatbot. Mientras que un chatbot recupera e integra información, un agente percibe, razona, actúa e itera. Para construir sistemas de agentes escalables, debemos ir más allá de los ciclos simples de solicitud-respuesta e implementar una arquitectura cognitiva que apoye:
- Interfaz de Herramientas: Una forma estructurada para que el modelo interactúe con entornos externos (bases de datos, APIs, sistemas de archivos).
- Gestión del Estado: Hilos persistentes que mantienen el contexto en bucles de ejecución de múltiples pasos.
- Bucle de Razonamiento: La capacidad de evaluar resultados intermedios y determinar la siguiente acción sin intervención del usuario.
La API de Asistentes de OpenAI encapsula estos requisitos en un "conjunto" manejable que incluye Threads, Runs y Herramientas.
Equipo de Ingeniería de Software Compartido Bajo Demanda, Por Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de QA y un gestor de proyectos gratuito le ayudan a crear MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js, y más.
Paso 1: Definir el esquema y las herramientas del Agente
El núcleo de cualquier agente es su capacidad para interactuar con sistemas externos. Definimos esta capacidad utilizando Llamada a funciones. A diferencia de las simples descripciones de prompts, las llamadas a funciones requieren definiciones estrictas de Esquema JSON, que garantizan que el Modelo de Lenguaje Grande (LLM) genere payloads estructurados y ejecutables.
Aquí hay una implementación en Python que utiliza el SDK de openai para definir un agente de análisis financiero equipado con herramientas específicas:
import os
from openai import OpenAI
from typing import Dict, Any
client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
# Define the tool (function) schema
tools = [
{
"type": "function",
"function": {
"name": "get_stock_fundamentals",
"description": "Retrieves fundamental data for a given stock symbol.",
"parameters": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "The stock ticker symbol, e.g., AAPL for Apple Inc."
},
"metrics": {
"type": "array",
"items": {"type": "string", "enum": ["PE_Ratio", "EPS", "Market_Cap"]},
"description": "List of specific metrics to retrieve."
}
},
"required": ["symbol"]
}
}
}
]
# Initialize the Agent (Assistant)
assistant = client.beta.assistants.create(
name="Financial Analyst Agent",
instructions="You are a financial analyst. Use the available tools to analyze stock data. Always cite the metric values explicitly.",
model="gpt-4-turbo",
tools=tools
)
print(f"Agent Initialized: {assistant.id}")
Paso 2: Orquestar el bucle de ejecución
En un entorno de producción, la latencia y la fiabilidad son fundamentales. El bucle de ejecución debe gestionar la decisión del modelo para llamar a una herramienta, la ejecución real de esa herramienta (que se realiza en el servidor en su infraestructura), y la entrega de los resultados de vuelta al modelo.
Este proceso implica la consulta o el streaming de eventos. A continuación, se muestra un patrón robusto para manejar el estado requiere acciónrequires_actionel desarrollo de agentes de IA personalizados donde la lógica de negocio debe permanecer segura dentro de su entorno.
Equipo de Ingeniería de Software Compartido Bajo Demanda, Por Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de control de calidad y un gerente de proyecto gratuito le ayudan a construir MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js y más.
import time
import json
def get_stock_fundamentals(symbol: str, metrics: list = None) -> str:
# Mocking an external API call to a financial data provider
# In production, this would connect to Bloomberg, AlphaVantage, or internal DBs
mock_db = {
"AAPL": {"PE_Ratio": "28.5", "EPS": "6.43", "Market_Cap": "2.8T"},
"GOOGL": {"PE_Ratio": "24.1", "EPS": "5.80", "Market_Cap": "1.9T"}
}
data = mock_db.get(symbol, {})
return json.dumps(data)
def execute_run_loop(thread_id: str, assistant_id: str):
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistant_id
)
while True:
# Check run status
run_status = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
print(f"Current Status: {run_status.status}")
if run_status.status == 'completed':
messages = client.beta.threads.messages.list(thread_id=thread_id)
return messages.data[0].content[0].text.value
elif run_status.status == 'requires_action':
# The agent wants to execute a tool
tool_calls = run_status.required_action.submit_tool_outputs.tool_calls
tool_outputs = []
for tool_call in tool_calls:
func_name = tool_call.function.name
args = json.loads(tool_call.function.arguments)
print(f"Agent invoking: {func_name} with {args}")
if func_name == "get_stock_fundamentals":
output = get_stock_fundamentals(
symbol=args.get("symbol"),
metrics=args.get("metrics")
)
tool_outputs.append({
"tool_call_id": tool_call.id,
"output": output
})
# Submit results back to the thread to continue execution
client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id,
run_id=run.id,
tool_outputs=tool_outputs
)
elif run_status.status in ['failed', 'cancelled', 'expired']:
raise Exception(f"Run failed with error: {run_status.last_error}")
time.sleep(1) # Polling interval
# Example Usage
thread = client.beta.threads.create()
client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="Analyze the PE Ratio and Market Cap for Apple and Google."
)
response = execute_run_loop(thread.id, assistant.id)
print(f"Final Response: {response}")
Paso 3: Gestión del estado y la persistencia
Para aplicaciones empresariales, la gestión del estado se extiende más allá de una sola sesión. El objeto HiloThreaddesarrollo de agentes de IA personalizados sea viable, debe mapear estos hilos a sus identificadores de usuario internos o claves de sesión.
Mejor Práctica: Almacene el thread_id en su base de datos relacional (PostgreSQL o MySQL) junto al perfil del usuario. Esto permite que el agente recuerde interacciones anteriores, incluso días o semanas después, brindando una continuidad verdaderamente personalizada.
Paso 4: Manejo de Determinismo y Seguridad
Uno de los principales riesgos al implementar agentes de IA generativa es su comportamiento no determinista. Para mitigar esto en un entorno de producción:
- Establecer la temperatura en 0: Para los agentes que ejecutan lógica o recuperación de datos, es esencial un bajo nivel de aleatoriedad.
- Fortalecimiento del prompt del sistema: Definir explícitamente lo que el agente no puede
- hacer. Utilice restricciones negativas en las instrucciones del sistema.Validación de la salida:
Conclusión
Crear agentes con las herramientas de OpenAI traslada la complejidad del entendimiento del lenguaje natural a la ingeniería de sistemas. El enfoque se centra en definir interfaces de API limpias, gestionar los bucles de ejecución asíncronos y garantizar un manejo robusto de los errores. Al utilizar la API de Assistants, los ingenieros pueden abstraer la gestión de la ventana de contexto y centrarse en la lógica de negocio que hace que el agente sea valioso.
Para organizaciones que buscan ampliar sus capacidades de IA, asociarse con una empresa de ingeniería especializada a menudo es el catalizador necesario para pasar de la fase de prueba a la producción.4Geeks, una empresa global especializada en productos, crecimiento e IA, se especializa enel desarrollo de agentes de IA personalizados, ayudando a las empresas a diseñar e implementar sistemas inteligentes seguros y de alto rendimiento.
Equipo de Ingeniería de Software Compartido Bajo Demanda, Por Suscripción.
Acceda a un equipo flexible y compartido de ingeniería de software bajo demanda a través de una suscripción mensual predecible. Desarrolladores, diseñadores, ingenieros de control de calidad y un gerente de proyectos gratuito le ayudan a construir MVPs, escalar productos e innovar con tecnologías modernas como React, Node.js y más.
Preguntas frecuentes
¿Cómo se diferencian los agentes de IA listos para la producción de los chatbots estándar?
A diferencia de los chatbots tradicionales que principalmente recuperan e integran información en un ciclo simple de solicitud-respuesta, los agentes de IA autónomos están diseñados para percibir, razonar, actuar e iterar. Un agente listo para la producción utiliza una arquitectura cognitiva que incluye interfaces para la interacción externa, gestión persistente del estado para mantener el contexto a través de múltiples hilos, y bucles de razonamiento para ejecutar flujos de trabajo complejos de múltiples pasos sin intervención constante del usuario.
¿Qué papel juega la llamada a funciones en el desarrollo de agentes de IA personalizados?
La llamada a funciones actúa como la interfaz crítica entre un Modelo de Lenguaje Grande (LLM) y entornos externos, como bases de datos o APIs. Al utilizar definiciones estrictas de Esquema JSON, los desarrolladores pueden obligar a la IA a generar cargas útiles estructuradas y ejecutables en lugar de texto no estructurado. Esto permite que el agente realice acciones específicas de forma fiable, como obtener datos financieros o actualizar registros, convirtiéndolo en una herramienta funcional en lugar de simplemente una interfaz conversacional.
¿Cuáles son las mejores prácticas para garantizar la fiabilidad y seguridad de los agentes de IA en entornos empresariales?
Para garantizar un comportamiento determinista y seguro en producción, es esencial minimizar la aleatoriedad estableciendo la temperatura del modelo en cero. Además, los desarrolladores deben implementar "refuerzo del prompt del sistema" definiendo explícitamente las restricciones negativas (qué no puede hacer el agente) y utilizar una capa de validación de salida para verificar las respuestas del agente en función de las directrices de seguridad antes de que se presenten al usuario.