도구로서의 에이전트
모든 에이전트를 호출 가능한 도구로 래핑 — 동기, 스트리밍 또는 대화형.
Agent-as-Tool
JamJet을 사용하면 모든 에이전트를 워크플로우 내에서 호출 가능한 도구로 래핑할 수 있습니다. 세 가지 호출 모드는 빠른 조회부터 장시간 실행 분석, 다중 턴 대화까지 다양한 사용 사례를 지원합니다.
세 가지 모드
Sync
단일 요청, 단일 응답. 빠르고 상태 비저장 작업에 적합합니다.
graph.add_agent_tool("classifier",
agent="https://classifier-agent.example.com",
mode="sync",
timeout_ms=5000,
)/tasks/send로 요청을 전송하고 전체 응답을 노드 출력으로 반환합니다.
Streaming
실시간 이벤트 전송과 함께 증분 NDJSON 처리. 진행 상황 가시성, 예산 제어, 조기 종료가 필요한 장시간 실행 에이전트에 적합합니다.
graph.add_agent_tool("researcher",
agent="https://research-agent.example.com",
mode="streaming",
budget={"max_cost_usd": 0.50},
streaming={"idle_timeout_secs": 30},
)/tasks/sendSubscribe로 요청을 전송하고 NDJSON 스트림을 증분 방식으로 처리합니다:
- 실시간 이벤트 — 각 청크는 도착하는 즉시 상태 백엔드로 전송되며, 종료 시 일괄 처리되지 않습니다
- 유휴 타임아웃 —
idle_timeout_secs(기본값 30초) 내에 데이터가 도착하지 않으면 스트림이 종료됩니다 - 예산 제한 — 청크에서 누적된
cost_usd가max_cost_usd를 초과하면 스트림이 중단됩니다 - A2A 취소 — 조기 종료 시(예산 또는 타임아웃) 원격 에이전트로 베스트 에포트 방식의
tasks/cancel이 전송됩니다 - 부분 결과 보존 — 이미 전송된 청크는 실패 시에도 절대 손실되지 않습니다
Conversational
반복적 개선을 위한 다중 턴 교환. 코디네이터가 입력을 전송하고, 응답을 읽은 후 다음 턴의 입력으로 피드백합니다.
graph.add_agent_tool("editor",
agent="https://editor-agent.example.com",
mode={"conversational": {"max_turns": 5}},
)루프 방식으로 /tasks/send에 요청을 전송합니다. 에이전트가 status: "completed"로 응답하거나 max_turns에 도달하면 중단됩니다.
스트리밍 설정
| 매개변수 | 기본값 | 설명 |
|---|---|---|
streaming.idle_timeout_secs | 30 | 종료 전 무응답 시간(초) |
budget.max_cost_usd | None | 종료 전 최대 누적 비용 |
timeout_ms | 30000 | 전체 HTTP 타임아웃(sync/conversational 전용) |
스트리밍 모드에서는 청크별 유휴 타임아웃이 전체 HTTP 타임아웃을 대체합니다. 클라이언트는 전역 타임아웃 없이 구축되므로 데이터가 활발히 전송되는 장시간 스트림이 조기 종료되지 않습니다.
이벤트
에이전트 도구는 이벤트 로그에 구조화된 이벤트를 발생시킵니다:
| 이벤트 | 발생 시점 |
|---|---|
agent_tool_invoked | 원격 에이전트로 요청 전송 시 |
agent_tool_progress | 각 NDJSON 청크 수신 시 (스트리밍 전용) |
agent_tool_completed | 최종 출력과 함께 성공적으로 완료 시 |
agent_tool_terminated | 조기 종료 시 (예산 초과 또는 유휴 타임아웃) |
agent_tool_error | 스트림 중 네트워크 오류 발생 시 |
각 이벤트에는 정확한 타이밍을 위한 timestamp_ms가 포함됩니다. 진행 이벤트에는 chunk_index와 accumulated_cost_usd가 포함됩니다.
오류 처리
| 실패 유형 | 동작 |
|---|---|
| 스트림 중 네트워크 오류 | 노드가 오류와 함께 실패하며, 부분 결과는 보존됨 |
| NDJSON 내 잘못된 JSON | {"raw": "..."}로 래핑되며, 스트림은 계속됨 |
| UTF-8이 아닌 데이터 | 경고와 함께 건너뛰고, 스트림은 계속됨 |
| 유휴 타임아웃 | 노드가 실패하고, A2A 취소가 전송됨 |
| 예산 초과 | 노드가 실패하고, A2A 취소가 전송됨 |
| 에이전트가 HTTP 오류 반환 | 노드가 즉시 실패 |
하드 실패(타임아웃, 네트워크 오류)는 워크플로가 재시도하거나 오류를 처리할 수 있도록 노드를 실패시킵니다. 예산 초과도 실패로 처리됩니다.
프로토콜 해석
에이전트 URI가 프로토콜을 결정합니다:
| URI 접두사 | 프로토콜 |
|---|---|
https:// | A2A (원격 HTTP) |
jamjet:// | 로컬 (인프로세스) |
| 기타 | MCP |
예제
세 가지 모드를 모두 사용하는 완전한 워크플로는 agent-as-tool 예제를 참조하세요.