¡Hola a todos! ¡Emma aquí de agent101.net!
Es marzo de 2026, y si eres como yo, probablemente hayas oído el rumor sobre los agentes de IA volviéndose más inteligentes, más capaces y, francamente, un poco más intimidantes para empezar. Hace solo un par de años, todos nos maravillábamos de cómo los LLM escribían poemas; ahora, prácticamente están dirigiendo pequeños negocios por nosotros. ¿El ritmo es loco, verdad?
Hoy quiero abordar algo que ha estado en mi mente y, a juzgar por mi bandeja de entrada, también en la tuya: cómo ir más allá de simplemente *hablar* con una IA y realmente hacer que *haga cosas* por ti, repetidamente, sin que tengas que cuidarla. Específicamente, vamos a centrarnos en configurar un agente de IA personal super simple usando una herramienta que ya podrías tener en tu máquina: un script de Python y un pequeño apoyo de la API de Assistant de OpenAI. Piénsalo como darle a tu IA un trabajo pequeño y enfocado: ser tu resumidor personal de artículos sobre un tema específico.
¿Por qué este enfoque específico? Porque los resúmenes genéricos sobre “qué es un agente de IA” están por todas partes. Lo que es más difícil de encontrar es una guía práctica, sin rellenos, que te lleve desde cero hasta un agente funcional sin necesidad de un doctorado en ciencias de la computación. Recuerdo mis propias frustraciones intentando juntar esto, sintiendo que necesitaba entender cada matiz de la ingeniería de prompts y las llamadas de API antes de que pudiera hacer que un bot me enviara una actualización del clima. Spoiler: no lo necesitas. Vamos a construir algo pequeño, útil y, lo más importante, *comprensible* para que puedas desarrollarlo.
Mi momento personal de Aha! con resúmenes impulsados por agentes
Déjame contarte una historia rápida. Durante un tiempo, he estado tratando de mantenerme al día con la increíble cantidad de noticias e investigaciones sobre la seguridad y la ética de la IA. Es crucial para mi trabajo aquí, pero también, francamente, solo para entender el futuro que estamos construyendo. Pasaba horas filtrando artículos, documentos de investigación y publicaciones de blogs. Mi cerebro quedaba exhausto para la hora del almuerzo.
Intenté con feeds de RSS, aplicaciones de lectura para después, incluso contraté a un asistente virtual por un tiempo. Nada dio en el blanco. El VA era caro, y las aplicaciones eran solo agregadores; aún tenía que hacer el trabajo pesado de leer y digerir. Entonces, se me ocurrió: ¿qué pasaría si pudiera entrenar a un pequeño agente de IA para hacer *solo esto*? ¿Encontrar artículos sobre seguridad de IA, leerlos y resumir los puntos clave para mí, diariamente?
Ahí fue cuando comencé a jugar con la API de Assistant de OpenAI. Está diseñada precisamente para este tipo de comportamiento “agente”: darle a una IA un conjunto de instrucciones, herramientas y una memoria, y dejarla avanzar. Mi primer intento fue un desastre, honestamente. Intenté hacerlo demasiado complejo, dándole demasiadas responsabilidades. Era como intentar enseñar a un niño pequeño a volar un avión antes de que pudiera caminar. Pero luego simplifiqué. Reduje su alcance a *solo* resumir artículos de una lista que proporcioné, enfocándome en argumentos clave y posibles sesgos.
La diferencia fue abismal. De repente, estaba recibiendo resúmenes concisos y relevantes entregados a mí. No era perfecto: a veces pasaba por alto matices, a veces se enfocaba en algo que no me interesaba, pero fue una mejora masiva respecto a mi método anterior. ¿Y la mejor parte? Entendí *cómo* funcionaba, lo que me dio la confianza para ajustarlo y expandir sus capacidades poco a poco. Ese es el sentimiento que quiero que tengas hoy.
¿Por qué la API de Assistant de OpenAI para principiantes?
Hay un montón de marcos para construir agentes de IA: LangChain, AutoGen, CrewAI, por nombrar algunos. Son potentes, sin duda. Pero para un verdadero principiante, pueden sentirse como intentar beber de una manguera contra incendios. La API de Assistant de OpenAI, por otro lado, abstrae gran parte de la complejidad. Definís un “Asistente” con un propósito, un modelo y algunas “herramientas”, y luego interactúas con él a través de “Hilos” y “Mensajes”. Maneja el historial de conversación, la llamada a herramientas e incluso un poco de razonamiento básico por ti.
Es como configurar un trabajador de IA miniatura y especializado. Le das una descripción del trabajo (sus instrucciones), algunos manuales de referencia (archivos de conocimiento) y un conjunto de herramientas (funciones que puede llamar). Luego solo le das tareas.
Nuestra misión hoy: un agente resumidor de artículos web simple
Vamos a construir un script de Python que:
- Crea un Asistente de OpenAI.
- Le da una instrucción específica: artículos web.
- Le proporciona una “herramienta” para obtener el contenido de una página web.
- Toma una URL de ti, la alimenta al agente y recibe un resumen de vuelta.
Este agente no “navegará” por la web por su cuenta ni decidirá qué. Tú le darás el enlace. Esto mantiene las cosas simples y controlables, perfecto para entender la mecánica básica.
Requisitos previos (¡No los saltes!)
- Python 3.8+ instalado: Si no lo tienes, una búsqueda rápida en Google de “instalar Python [tu sistema operativo]” te llevará allí.
- Una clave de API de OpenAI: Puedes obtener esto desde el sitio web de OpenAI Platform. ¡Asegúrate de tener algunos créditos!
- Familiaridad básica con la línea de comandos: Solo lo suficiente para ejecutar un script de Python.
- Un editor de texto: VS Code, Sublime Text, incluso Notepad servirá.
Paso 1: Configurando tu entorno
Primero, prepararemos nuestro entorno de Python. Abre tu terminal o símbolo del sistema.
# Crea un nuevo directorio para nuestro proyecto
mkdir ai_summarizer_agent
cd ai_summarizer_agent
# Crea un entorno virtual (¡buena práctica!)
python -m venv venv
# Activa el entorno virtual
# En macOS/Linux:
source venv/bin/activate
# En Windows:
venv\Scripts\activate
# Instala las bibliotecas necesarias
pip install openai beautifulsoup4 requests
¿Qué acabamos de instalar?
openai: Esta es la biblioteca oficial para interactuar con las APIs de OpenAI.beautifulsoup4: Una biblioteca fantástica para analizar HTML. La usaremos para extraer texto de las páginas web.requests: Para hacer solicitudes HTTP, es decir, para descargar el contenido de la página web.
Luego, crea un archivo llamado .env en tu directorio ai_summarizer_agent y agrega tu clave de API:
OPENAI_API_KEY="TU_CLAVE_API_DE_OPENAI_AQUI"
Reemplaza TU_CLAVE_API_DE_OPENAI_AQUI con tu clave real. ¡Esto mantiene tu clave fuera de tu código principal, lo cual es importante para la seguridad!
Paso 2: Creando nuestra herramienta de obtención web
Nuestro agente de IA necesita una forma de “leer” una página web. Dado que los LLM no pueden navegar por internet de forma nativa (a menos que estés utilizando un modelo específico con capacidades de navegación, lo que añade complejidad que queremos evitar por ahora), le daremos una herramienta personalizada. Esta herramienta será una simple función de Python que toma una URL, obtiene su contenido y extrae el texto principal.
Crea un nuevo archivo llamado tools.py en tu directorio de proyecto:
import requests
from bs4 import BeautifulSoup
def fetch_web_article_content(url: str) -> str:
"""
Obtiene el contenido de texto principal de un artículo web desde una URL dada.
"""
try:
response = requests.get(url, timeout=10)
response.raise_for_status() # Lanza una excepción para errores HTTP (4xx o 5xx)
soup = BeautifulSoup(response.text, 'html.parser')
# Intenta encontrar elementos comunes de contenido de artículos
article_body = soup.find('article') or soup.find('main') or soup.find('div', class_='content')
if article_body:
paragraphs = article_body.find_all('p')
article_text = '\n'.join([p.get_text() for p in paragraphs])
else:
# Respaldo si no se encuentran elementos específicos del artículo
article_text = soup.get_text(separator='\n', strip=True)
# Limpieza básica y truncamiento para evitar entradas gigantes
cleaned_text = ' '.join(article_text.split())
return cleaned_text[:30000] # Trunca para evitar exceder los límites de tokens
except requests.exceptions.RequestException as e:
return f"Error al obtener la URL: {e}"
except Exception as e:
return f"Ocurrió un error inesperado: {e}"
if __name__ == '__main__':
# Prueba la herramienta directamente
test_url = "https://www.theverge.com/2024/3/20/24106575/nvidia-gputech-ai-chips-future-computing"
content = fetch_web_article_content(test_url)
print(f"--- Contenido obtenido (primeros 500 caracteres) ---")
print(content[:500])
print(f"--- Longitud total: {len(content)} ---")
Esta función hace varias cosas:
- Utiliza
requestspara descargar el HTML de la página. - Utiliza
BeautifulSouppara analizar el HTML. - Intenta encontrar elementos comunes de artículos (como
<article>,<main>) para extraer el texto relevante. Si no puede encontrarlos, simplemente toma todo el texto visible. - Limpia un poco el texto y lo trunca para evitar enviar entradas excesivamente largas a la IA (lo cual cuesta más y puede alcanzar los límites de tokens).
- Incluye manejo de errores para problemas de red o URLs incorrectas.
Ejecuta python tools.py para probarlo con la URL de ejemplo. Deberías ver una versión truncada del contenido de un artículo impresa en tu consola.
Paso 3: Creando e interactuando con nuestro agente resumidor
¡Ahora va lo bueno! Escribiremos el script que lo reúne todo.
Crea un nuevo archivo llamado summarizer_agent.py:
import os
import time
import json
from openai import OpenAI
from dotenv import load_dotenv
from tools import fetch_web_article_content # Importar nuestra herramienta personalizada
# Cargar variables de entorno (como tu clave API)
load_dotenv()
# Inicializar el cliente de OpenAI
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# Definir nuestro esquema de herramienta para la API del Asistente
# Esto le dice a la API del Asistente cómo llamar a nuestra función fetch_web_article_content
web_fetch_tool = {
"type": "function",
"function": {
"name": "fetch_web_article_content",
"description": "Obtiene el contenido textual principal de una URL web dada para resumir.",
"parameters": {
"type": "object",
"properties": {
"url": {"type": "string", "description": "La URL del artículo web."},
},
"required": ["url"],
},
},
}
def create_or_retrieve_assistant(name="Article Summarizer Agent", model="gpt-4o"):
"""
Verifica si ya existe un asistente con el nombre dado.
Si es así, lo recupera. Si no, crea uno nuevo.
"""
assistants = client.beta.assistants.list(order="desc", limit="20")
for assistant in assistants.data:
if assistant.name == name:
print(f"Encontrado asistente existente: {assistant.id}")
return assistant
print(f"Creando nuevo asistente: {name}")
assistant = client.beta.assistants.create(
name=name,
instructions=(
"Eres un experto en resumir artículos. Tu tarea es obtener el contenido de una URL web proporcionada "
"usando la herramienta 'fetch_web_article_content', y luego resumir el artículo de manera concisa. "
"Concéntrate en los argumentos principales, hallazgos clave y conclusiones. "
"Si el contenido es demasiado largo o ocurre un error, menciónalo en tu resumen."
),
model=model,
tools=[web_fetch_tool],
)
print(f"Asistente creado con ID: {assistant.id}")
return assistant
def run_assistant_and_get_response(assistant_id, user_message, thread_id=None):
"""
Envía un mensaje al asistente, ejecuta el hilo y maneja llamadas de herramientas.
Devuelve la respuesta final del asistente y el ID del hilo.
"""
if thread_id is None:
thread = client.beta.threads.create()
thread_id = thread.id
print(f"Hilo nuevo creado: {thread_id}")
else:
print(f"Usando hilo existente: {thread_id}")
# Agregar el mensaje del usuario al hilo
client.beta.threads.messages.create(
thread_id=thread_id,
role="user",
content=user_message,
)
# Ejecutar el asistente
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistant_id,
)
# Consultar el estado de la ejecución hasta que se complete o requiera acción
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'requires_action':
print("El asistente requiere acción de la herramienta...")
tool_outputs = []
for tool_call in run.required_action.submit_tool_outputs.tool_calls:
if tool_call.function.name == "fetch_web_article_content":
url_to_fetch = json.loads(tool_call.function.arguments)["url"]
print(f"Llamando a la herramienta: fetch_web_article_content con URL: {url_to_fetch}")
# Ejecutar nuestra función Python local
article_content = fetch_web_article_content(url_to_fetch)
tool_outputs.append({
"tool_call_id": tool_call.id,
"output": article_content,
})
# Si tuviéramos otras herramientas, las manejaríamos aquí
# Enviar las salidas de la herramienta de vuelta al asistente
run = client.beta.threads.runs.submit_tool_outputs(
thread_id=thread_id,
run_id=run.id,
tool_outputs=tool_outputs
)
# Consultar nuevamente por la respuesta final
while run.status in ['queued', 'in_progress', 'cancelling']:
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id=run.id
)
if run.status == 'completed':
messages = client.beta.threads.messages.list(
thread_id=thread_id,
order="asc" # Obtener mensajes en orden cronológico
)
assistant_responses = []
for message in messages.data:
if message.role == 'assistant':
for content_block in message.content:
if content_block.type == 'text':
assistant_responses.append(content_block.text.value)
return "\n".join(assistant_responses), thread_id
else:
return f"La ejecución terminó con estado: {run.status}", thread_id
if __name__ == '__main__':
assistant = create_or_retrieve_assistant()
current_thread_id = None # Comenzar sin hilo, dejar que la función cree uno
print("\n--- Agente Resumidor de Artículos ---")
print("Escribe una URL o 'exit' para salir.")
while True:
user_input = input("\nIngresa la URL: ").strip()
if user_input.lower() == 'exit':
break
if not user_input.startswith("http"):
print("Por favor, ingresa una URL válida que comience con http:// o https://")
continue
try:
print("Resumiendo artículo... Esto puede tardar un momento.")
response, current_thread_id = run_assistant_and_get_response(
assistant.id,
f"Por favor, resume el artículo encontrado en esta URL: {user_input}",
current_thread_id # Pasar el ID del hilo para mantener el contexto de la conversación
)
print("\n--- Resumen ---")
print(response)
print("-----------------")
except Exception as e:
print(f"Ocurrió un error: {e}")
# Reiniciar thread_id en caso de error si deseas comenzar de nuevo la próxima vez
# current_thread_id = None
print("Saliendo del agente de resumen. ¡Adiós!")
Desglosemos este script:
web_fetch_tool
Este diccionario describe nuestra función fetch_web_article_content a la API del Asistente de OpenAI. Especifica el nombre de la función, una descripción útil ( ¡crucial para que la IA sepa cuándo usarlo!), y sus parámetros. La IA usará este esquema para entender cómo llamar a nuestra función Python.
create_or_retrieve_assistant()
Esta función es inteligente. Primero verifica si ya has creado un asistente llamado “Article Summarizer Agent” en tu cuenta de OpenAI. Si lo has hecho, lo reutiliza, ahorrándote llamadas a la API y manteniendo tu configuración limpia. Si no, crea uno nuevo. Elementos importantes aquí:
name: Un nombre legible por humanos para tu asistente.instructions: Esta es la “descripción del trabajo” de tu agente. Cuanto más claro y específico seas aquí, mejor funcionará tu agente. Le he indicado que se enfoque en los puntos clave y maneje errores.model: Estoy usandogpt-4oaquí por sus fuertes capacidades de razonamiento y llamadas de herramientas. Podrías probargpt-3.5-turbopara una opción más económica y rápida, pero los resultados pueden variar.tools=[web_fetch_tool]: Aquí es donde le decimos al asistente sobre nuestra herramienta personalizada de obtención web.
run_assistant_and_get_response()
Este es el ciclo de interacción central. Hace lo siguiente:
- Gestiona Hilos: Crea un nuevo hilo de conversación o continúa uno existente (
thread_id). Los hilos son cómo la API del Asistente mantiene el seguimiento del historial de la conversación. - Agrega Mensaje del Usuario: Envía tu solicitud de URL al asistente dentro del hilo.
- Ejecuta el Asistente: Inicia una “ejecución”, que es el proceso de pensamiento del asistente.
- Consulta el Estado: La API del Asistente es asíncrona, por lo que tenemos que seguir verificando el
run.statushasta que termine o necesite nuestra entrada. - Maneja
requires_action: ¡Esta es la parte mágica! Si el asistente decide que necesita usar una herramienta (como nuestrafetch_web_article_content), el estado de la ejecución se convertirá enrequires_action. Nuestro script luego analiza la llamada a la herramienta, ejecuta nuestra función Python *local* (fetch_web_article_content) y envía la salida de vuelta al asistente. - Recupera la Respuesta: Una vez que la ejecución está
completed, obtiene todos los mensajes del asistente y devuelve el más reciente.
if __name__ == '__main__':
Este bloque hace que el script sea interactivo. Te pide continuamente una URL, llama a nuestro agente y imprime el resumen. También mantiene el current_thread_id para que tu agente recuerde interacciones anteriores (aunque para esta tarea de resumen específica no es estrictamente necesario, es buena práctica para agentes más complejos).
Paso 4: ¡Ejecutando Tu Agente Resumidor!
Ahora, guarda ambos archivos (tools.py y summarizer_agent.py) en el mismo directorio. Asegúrate de que tu entorno virtual esté activado.
# Asegúrate de estar en el directorio ai_summarizer_agent
# y de que tu venv esté activado
python summarizer_agent.py
La primera vez que lo ejecutes, verás que está creando el asistente. Esto puede tardar unos segundos. Las ejecuciones posteriores serán más rápidas a medida que recupera el asistente existente.
Luego, te pedirá una URL. Intenta pegar un enlace de artículo, como:
https://www.nytimes.com/2024/03/23/technology/ai-agents-google-openai.html
O cualquier otro artículo que te interese. ¡Observa cómo procesa, llama a la herramienta y, eventualmente, genera un resumen!
Podrías notar un retraso mientras el asistente está ejecutándose y realizando sus llamadas a la herramienta. Esto es normal. El bucle de consulta está esperando a que los servidores de OpenAI procesen la solicitud, llamen a la herramienta y luego continúen razonando.
Conclusiones Accionables y Próximos Pasos
¡Felicidades! Acabas de construir tu primer agente de IA simple utilizando la API del Asistente de OpenAI y herramientas personalizadas. Aquí tienes lo que deberías llevarte de esto y cómo puedes expandirlo:
-
Comienza Pequeño y Enfocado:
Este es mi consejo más importante. En lugar de intentar construir una IA de propósito general que haga todo, elige una tarea específica y repetible. Nuestro resumidor es un ejemplo primordial. Esto facilita el depurado y te ayuda a entender la mecánica básica.
-
Las Instrucciones son Clave:
La calidad de la salida de tu agente es directamente proporcional a la claridad y especificidad de sus
instructions. Experimenta con diferentes formulaciones. Indícale qué priorizar, qué tono utilizar y cómo manejar los casos límite. -
Las Herramientas Empoderan a los Agentes:
Los agentes de IA son poderosos no solo por sus “cerebros” (el LLM) sino por las “manos” que les das (las herramientas). Nuestra herramienta
fetch_web_article_contentamplió las capacidades de la IA más allá de la generación de texto. Piensa en otras herramientas que podrías crear: escribir en un archivo, enviar un correo electrónico, consultar una base de datos, buscar en una base de conocimiento específica. -
El Manejo de Errores es Tu Amigo:
Los datos del mundo real son desordenados. Los sitios web se rompen, las APIs devuelven errores. Nota cómo agregamos bloques
try-excepten nuestra funciónfetch_web_article_content. Tu agente necesita manejar estas situaciones con gracia, o simplemente se colapsará. Dile a tu agente en sus instrucciones qué hacer si una herramienta falla. -
Explora y Experimenta:
- Agrega más herramientas: ¿Podría tu agente también buscar en una base de datos específica de artículos de investigación? ¿Podría guardar resúmenes en un archivo de texto?
- Refina las instrucciones: Pídele que se dirija a un público específico (por ejemplo, “resume para un niño de 10 años”, o “resume enfocándose en implicaciones económicas”).
- Agrega memoria (más allá del hilo): Nuestra configuración actual utiliza el hilo para memoria. Para agentes más persistentes, es posible que desees guardar el historial de conversaciones o hechos clave en una base de datos.
- Ejecuciones programadas: En lugar de pegar manualmente URLs, ¿podrías conectarlo a un feed RSS y hacer que resuma nuevos artículos diariamente?
Este es solo el comienzo de tu viaje en la construcción de agentes de IA. Los principios que utilizamos hoy – definir un propósito claro, proporcionar herramientas e iterar en las instrucciones – se aplican a sistemas de agentes mucho más complejos. Ahora tienes un ejemplo tangible y funcional que construiste tú mismo. ¡Sal y crea!
Si construyes algo interesante con esto, o encuentras algún obstáculo, contáctame en Twitter o deja un comentario abajo. ¡Me encantaría saber de ello!
Hasta la próxima,
Emma Walsh
agent101.net
Artículos Relacionados
- ¿Pueden los Agentes de IA Mejorar el Servicio al Cliente?
- Plataformas de Bajo Código para la Creación de Agentes de IA
- Construyendo un Agente de Investigación OpenClaw
🕒 Published:
Related Articles
- Japan AI-Regulierung: Neueste Nachrichten & Updates
- 5 Errores en la Monitorización de Costos que Cuestan Dinero Real
- Perché Silicon Valley sta scommettendo 25 miliardi di dollari su un’azienda di intelligenza artificiale di cui non hai mai sentito parlare
- Come gli agenti AI rivoluzionano le esperienze bancarie