Agente como Herramienta
Envuelve cualquier agente como una herramienta invocable — sincrónica, en streaming o conversacional.
Agent-as-Tool
JamJet te permite envolver cualquier agente como una herramienta invocable dentro de un flujo de trabajo. Tres modos de invocación cubren diferentes casos de uso: desde consultas rápidas hasta análisis de larga duración y conversaciones de múltiples turnos.
Tres Modos
Sync
Una solicitud, una respuesta. Ideal para operaciones rápidas y sin estado.
graph.add_agent_tool("classifier",
agent="https://classifier-agent.example.com",
mode="sync",
timeout_ms=5000,
)Envía a /tasks/send y devuelve la respuesta completa como salida del nodo.
Streaming
Procesamiento incremental de NDJSON con emisión de eventos en tiempo real. Ideal para agentes de larga duración donde necesitas visibilidad del progreso, control de presupuesto y terminación anticipada.
graph.add_agent_tool("researcher",
agent="https://research-agent.example.com",
mode="streaming",
budget={"max_cost_usd": 0.50},
streaming={"idle_timeout_secs": 30},
)Envía a /tasks/sendSubscribe y procesa el flujo NDJSON de forma incremental:
- Eventos en tiempo real — cada fragmento se emite al backend de estado a medida que llega, no se agrupa al final
- Tiempo de inactividad — si no llegan datos dentro de
idle_timeout_secs(por defecto 30), el flujo se termina - Control de presupuesto — cuando el
cost_usdacumulado de los fragmentos superamax_cost_usd, el flujo se detiene - Cancelación A2A — en caso de terminación anticipada (presupuesto o timeout), se envía un
tasks/cancelal agente remoto con máximo esfuerzo - Resultados parciales preservados — los fragmentos ya emitidos nunca se pierden, incluso ante fallos
Conversational
Intercambio de múltiples turnos para refinamiento iterativo. El coordinador envía la entrada, lee la respuesta y la devuelve como entrada del siguiente turno.
graph.add_agent_tool("editor",
agent="https://editor-agent.example.com",
mode={"conversational": {"max_turns": 5}},
)Envía a /tasks/send en un bucle. Se detiene cuando el agente responde con status: "completed" o se alcanza max_turns.
Configuración de Streaming
| Parámetro | Por defecto | Descripción |
|---|---|---|
streaming.idle_timeout_secs | 30 | Segundos de silencio antes de terminar |
budget.max_cost_usd | None | Costo máximo acumulado antes de terminación |
timeout_ms | 30000 | Tiempo de espera HTTP general (solo sync/conversational) |
Para el modo streaming, el tiempo de inactividad por fragmento reemplaza el timeout HTTP general. El cliente se construye sin un timeout global para que los flujos de larga duración con datos activos no se interrumpan prematuramente.
Eventos
La herramienta de agente emite eventos estructurados al registro de eventos:
| Evento | Cuándo |
|---|---|
agent_tool_invoked | Solicitud enviada al agente remoto |
agent_tool_progress | Cada fragmento NDJSON recibido (solo en streaming) |
agent_tool_completed | Finalización exitosa con salida final |
agent_tool_terminated | Terminación anticipada (presupuesto excedido o tiempo de espera inactivo) |
agent_tool_error | Error de red durante la transmisión |
Cada evento incluye timestamp_ms para temporización precisa. Los eventos de progreso incluyen chunk_index y accumulated_cost_usd.
Manejo de Errores
| Fallo | Comportamiento |
|---|---|
| Error de red durante la transmisión | El nodo falla con error, resultados parciales preservados |
| JSON malformado en NDJSON | Envuelto como {"raw": "..."}, la transmisión continúa |
| Datos no UTF-8 | Omitidos con advertencia, la transmisión continúa |
| Tiempo de espera inactivo | El nodo falla, cancelación A2A enviada |
| Presupuesto excedido | El nodo falla, cancelación A2A enviada |
| El agente retorna error HTTP | El nodo falla inmediatamente |
Los fallos críticos (tiempo de espera, error de red) causan que el nodo falle para que el flujo de trabajo pueda reintentar o manejar el error. El exceso de presupuesto también se trata como un fallo.
Resolución de Protocolo
El URI del agente determina el protocolo:
| Prefijo de URI | Protocolo |
|---|---|
https:// | A2A (HTTP remoto) |
jamjet:// | Local (en proceso) |
| Otro | MCP |
Ejemplo
Consulta el ejemplo de agent-as-tool para un flujo de trabajo completo que utiliza los tres modos.