Agents Course documentation
Escribiendo acciones como fragmentos de código o estructuras JSON
Escribiendo acciones como fragmentos de código o estructuras JSON
Los Agentes de Llamada a Herramientas son el segundo tipo de agente disponible en smolagents
. A diferencia de los Agentes de Código que utilizan fragmentos de Python, estos agentes utilizan las capacidades integradas de llamada a herramientas de los proveedores de LLM para generar llamadas a herramientas como estructuras JSON. Este es el enfoque estándar utilizado por OpenAI, Anthropic y muchos otros proveedores.
Veamos un ejemplo. Cuando Alfred quiere buscar servicios de catering e ideas para fiestas, un CodeAgent
generaría y ejecutaría código Python como este:
for query in [
"Mejores servicios de catering en Ciudad Gótica",
"Ideas de temas de fiesta para superhéroes"
]:
print(web_search(f"Buscar: {query}"))
Un ToolCallingAgent
en cambio crearía una estructura JSON:
[
{"name": "web_search", "arguments": "Mejores servicios de catering en Ciudad Gótica"},
{"name": "web_search", "arguments": "Ideas de temas de fiesta para superhéroes"}
]
Esta estructura JSON se utiliza luego para ejecutar las llamadas a herramientas.
Aunque smolagents
se centra principalmente en CodeAgents
ya que tienen un mejor rendimiento general, los ToolCallingAgents
pueden ser efectivos para sistemas simples que no requieren manejo de variables o llamadas a herramientas complejas.
¿Cómo Funcionan los Agentes de Llamada a Herramientas?
Los Agentes de Llamada a Herramientas siguen el mismo flujo de trabajo de múltiples pasos que los Agentes de Código (consulta la sección anterior para más detalles).
La diferencia clave está en cómo estructuran sus acciones: en lugar de código ejecutable, generan objetos JSON que especifican nombres de herramientas y argumentos. El sistema luego analiza estas instrucciones para ejecutar las herramientas apropiadas.
Ejemplo: Ejecutando un Agente de Llamada a Herramientas
Revisemos el ejemplo anterior donde Alfred comenzó los preparativos de la fiesta, pero esta vez usaremos un ToolCallingAgent
para destacar la diferencia. Construiremos un agente que pueda buscar en la web usando DuckDuckGo, al igual que en nuestro ejemplo de Agente de Código. La única diferencia es el tipo de agente - el framework se encarga de todo lo demás:
from smolagents import ToolCallingAgent, DuckDuckGoSearchTool, InferenceClientModel
agent = ToolCallingAgent(tools=[DuckDuckGoSearchTool()], model=InferenceClientModel())
agent.run("Busca las mejores recomendaciones de música para una fiesta en la mansión Wayne.")
Cuando examines el rastro del agente, en lugar de ver Executing parsed code:
, verás algo como:
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Llamando a herramienta: 'web_search' con argumentos: {'query': "mejores recomendaciones de música para una │ │ fiesta en la mansión Wayne"} │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
El agente genera una llamada a herramienta estructurada que el sistema procesa para producir la salida, en lugar de ejecutar directamente código como un CodeAgent
.
Ahora que entendemos ambos tipos de agentes, podemos elegir el adecuado para nuestras necesidades. ¡Continuemos explorando smolagents
para hacer que la fiesta de Alfred sea un éxito! 🎉
Recursos
- Documentación de ToolCallingAgent - Documentación oficial para ToolCallingAgent