Lo que vas a construir
Un agente de IA autonomo que razona, decide que herramientas usar, y completa tareas por si mismo.
Le das una tarea como "investiga cuanto cuesta un vuelo a Tokio y guardalo en un archivo", y el agente piensa paso a paso: primero busca en web, luego calcula fechas, finalmente escribe el archivo. Sin que le digas como hacerlo.
Al terminar tendras un agente en Python usando el patron ReAct (Reasoning + Acting) con Gemini. Podras darle herramientas (busqueda web, calculadora, archivos) y pedirle tareas complejas que resuelve de forma autonoma.
El prompt para empezar
Crea un agente IA en Python con:
- Patrón ReAct (Reasoning + Acting)
- Herramientas: búsqueda web, calculadora, leer archivos
- Loop que ejecute hasta completar la tarea
- Usa Gemini como LLM
Lo que la IA creará
import google.generativeai as genai
import os
import json
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
model = genai.GenerativeModel("gemini-1.5-flash")
# Definir herramientas
def search_web(query: str) -> str:
"""Simula búsqueda web"""
return f"Resultados para '{query}': Info relevante encontrada..."
def calculate(expression: str) -> str:
"""Evalúa expresiones matemáticas"""
try:
return str(eval(expression))
except:
return "Error en cálculo"
def read_file(path: str) -> str:
"""Lee contenido de archivo"""
try:
with open(path) as f:
return f.read()[:1000]
except:
return f"No se pudo leer {path}"
TOOLS = {
"search_web": search_web,
"calculate": calculate,
"read_file": read_file,
}
SYSTEM_PROMPT = """Eres un agente que resuelve tareas paso a paso.
Para cada paso, responde en formato JSON:
{
"thought": "Tu razonamiento",
"action": "nombre_herramienta",
"action_input": "parámetro"
}
O si terminaste:
{
"thought": "Razonamiento final",
"final_answer": "Tu respuesta"
}
Herramientas disponibles:
- search_web(query): Busca en internet
- calculate(expression): Calcula expresiones
- read_file(path): Lee archivos
"""
def run_agent(task: str, max_steps: int = 10):
"""Ejecutar agente hasta completar tarea"""
messages = [
{"role": "user", "parts": [SYSTEM_PROMPT + f"\n\nTarea: {task}"]}
]
for step in range(max_steps):
response = model.generate_content(messages)
text = response.text
# Parsear respuesta JSON
try:
data = json.loads(text.strip().strip("```json").strip("```"))
except:
print(f"Error parseando: {text}")
continue
print(f"\n--- Paso {step + 1} ---")
print(f"Pensamiento: {data.get('thought')}")
# ¿Terminó?
if "final_answer" in data:
print(f"\n✅ Respuesta: {data['final_answer']}")
return data["final_answer"]
# Ejecutar herramienta
action = data.get("action")
action_input = data.get("action_input")
if action in TOOLS:
result = TOOLS[action](action_input)
print(f"Acción: {action}({action_input})")
print(f"Resultado: {result}")
messages.append({"role": "model", "parts": [text]})
messages.append({"role": "user", "parts": [f"Observación: {result}"]})
return "Máximo de pasos alcanzado"
# Uso
run_agent("¿Cuál es el resultado de 45 * 23 + 100?")