Tutorial 25: Ejecución de Código
Tutorial 25: Ejecución de Código — guía fácil de entender basada en la documentación oficial
Esta es parte de la serie oficial de tutoriales de Hermes Agent. Ver todos los tutoriales
Imagina que estás horneando un pastel y, en lugar de ir por los ingredientes uno a uno, escribes la receta completa, se la das a un ayudante, y este te trae solo el pastel terminado. Eso es exactamente lo que hace la Ejecución de Código para Hermes Agent: le permite al agente ejecutar un script completo de Python que llama a múltiples herramientas internamente, y luego devuelve solo el resultado final a la conversación.
¿Qué es la Ejecución de Código?
Normalmente, cuando Hermes necesita buscar en la web, leer un archivo o ejecutar un comando, hace cada paso de uno en uno — y cada resultado intermedio se carga en su “memoria” (la ventana de contexto). Eso es lento y desperdicia tokens.
Con la herramienta execute_code, Hermes escribe un script de Python que puede llamar a herramientas programáticamente — como web_search, read_file o patch — todo de una sola vez. El script se ejecuta en un proceso hijo separado, y solo la salida de print() regresa al agente. Todos los datos intermedios desordenados permanecen ocultos.
Cómo Funciona: Paso a Paso
Paso 1: El agente escribe un script de Python
Comienza importando herramientas desde un módulo especial:
from hermes_tools import web_search, web_extract
Paso 2: Hermes crea un módulo auxiliar
Genera automáticamente un stub hermes_tools.py que conecta tu script con el agente principal.
Paso 3: Se abre un canal de comunicación
Hermes abre un socket de dominio Unix (una “línea telefónica” local y rápida entre procesos) e inicia un hilo de escucha.
Paso 4: El script se ejecuta en un proceso hijo
Cada llamada a herramienta dentro de tu script viaja por ese socket de vuelta a Hermes, quien la ejecuta y envía el resultado de regreso.
Paso 5: Solo regresa la salida de print()
Las declaraciones print() del script son lo único que el LLM ve. Todos los resultados intermedios de las herramientas nunca entran en la ventana de contexto — ahorrando una cantidad masiva de tokens.
¿Cuándo Usa Hermes Esto?
El agente elige automáticamente execute_code cuando detecta:
- 3 o más llamadas a herramientas con lógica entre ellas (como filtrar o comparar)
- Procesamiento de datos por lotes — por ejemplo, buscar en muchos archivos y extraer fragmentos
- Bucles — repitiendo una acción en muchos elementos
¿La gran ventaja? Eficiencia de tokens. En lugar de alimentar cada resultado de búsqueda de vuelta a la conversación, solo el resumen final llega a través.
Ejemplos Prácticos que Puedes Probar
1. Pipeline de Procesamiento de Datos
from hermes_tools import search_files, read_file
import json
# Find all config files and extract database settings
matches = search_files("database", path=".", file_glob="*.yaml", limit=20)
configs = []
for match in matches.get("matches", []):
content = read_file(match["path"])
configs.append({"file": match["path"], "preview": content["content"][:200]})
print(json.dumps(configs, indent=2))
2. Investigación Web Multi-Paso
from hermes_tools import web_search, web_extract
import json
results = web_search("Rust async runtime comparison 2025", limit=5)
summaries = []
for r in results["data"]["web"]:
page = web_extract([r["url"]])
for p in page.get("results", []):
if p.get("content"):
summaries.append({
"title": r["title"],
"url": r["url"],
"excerpt": p["content"][:500]
})
print(json.dumps(summaries, indent=2))
3. Refactorización de Archivos por Lotes
from hermes_tools import search_files, read_file, patch
matches = search_files("old_api_call", path="src/", file_glob="*.py")
fixed = 0
for match in matches.get("matches", []):
result = patch(
path=match["path"],
old_string="old_api_call(",
new_string="new_api_call(",
replace_all=True
)
if "error" not in str(result):
fixed += 1
print(f"Fixed {fixed} files out of {len(matches.get('matches', []))} matches")
4. Pipeline de Compilación y Pruebas
from hermes_tools import terminal
import json
result = terminal("cd /project && python -m pytest --tb=short -q 2>&1", timeout=120)
output = result.get("output", "")
passed = output.count(" passed")
failed = output.count(" failed")
print(json.dumps({"passed": passed, "failed": failed}, indent=2))
Puntos Clave para Recordar
- Herramientas disponibles dentro de los scripts:
web_search,web_extract,read_file,write_file,search_files,patchyterminal(solo en primer plano). - Solo la salida de
print()regresa — todo lo demás permanece oculto. - Ideal para bucles, filtrado y flujos de trabajo de varios pasos — es como darle a Hermes un mini-entorno de programación.
Resumen
La Ejecución de Código convierte a Hermes de un asistente paso a paso en un procesador por lotes. Escribe un script, lo ejecuta y te da solo la respuesta final — ahorrando tiempo, tokens y carga mental. Si alguna vez ves a Hermes haciendo muchas llamadas repetitivas a herramientas, probablemente esté usando esta función bajo el capó.
Lo que sigue: Tutorial 26 — Procesamiento por Lotes: ejecutando cientos de prompts en paralelo.
📖 Documentación oficial
Este artículo se basa en la documentación oficial de Hermes Agent :Docs oficiales › user-guide/features/code-execution