JamJet

핵심 개념

JamJet의 에이전트, 노드, 상태 및 내구성을 이해합니다.

핵심 개념

JamJet은 에이전트 네이티브 런타임입니다 — 장애를 극복하고, 워커 간 확장하며, 다른 에이전트와 조합해야 하는 AI 워크플로를 위해 설계되었습니다. 이 페이지에서는 핵심 프리미티브를 다룹니다.

워크플로

워크플로는 노드의 방향성 그래프입니다. 다음을 포함합니다:

  • 고유한 idversion
  • state_schema — 그래프를 통해 흐르는 데이터의 타입 형태
  • 실행이 시작되는 start 노드
  • 하나 이상의 end 노드
workflow:
  id: my-agent
  version: 0.1.0
  state_schema:
    query: str
    answer: str
    confidence: float
  start: think

워크플로는 실행 전에 IR(중간 표현) 그래프로 컴파일됩니다. IR은 Rust 스케줄러가 실제로 실행하는 것입니다 — YAML과 Python은 작성 인터페이스일 뿐입니다.

노드

노드는 워크플로의 계산 단위입니다. 각 노드는 수행 작업을 결정하는 type을 가집니다:

노드 타입수행 작업
modelLLM 호출 (Claude, GPT-4, Gemini 등)
toolMCP를 통한 외부 툴 호출
httpHTTP 요청 수행
branch조건에 따라 실행 경로 분기
parallel여러 브랜치로 동시 실행 분산
wait외부 이벤트까지 일시 정지
eval출력 품질 평가 (루브릭, 단언, 지연시간)
end워크플로 종료

모든 노드는 상태를 읽고 씁니다.

상태

상태는 워크플로 실행을 위한 공유 데이터 저장소입니다. 노드 간, 재시작 간에도 지속됩니다.

state_schema:
  query: str        # 사용자 입력
  search_results: list[str]  # 중간 데이터
  answer: str       # 최종 출력

상태는 타입이 지정됩니다 — 스키마는 컴파일 타임에 검증됩니다. 런타임에서 각 노드는 모든 상태 키를 읽고 자신의 output_key에 쓸 수 있습니다.

팁: 상태는 메모리가 아닌 데이터베이스에 저장됩니다. 실행 중 런타임이 크래시되어도 상태는 완전히 복구되며, 마지막 체크포인트부터 실행이 재개됩니다.

실행

실행은 특정 입력으로 워크플로를 한 번 실행하는 것입니다. 각 실행은 고유한 ID를 받습니다(예: exec_01JM4X8NKWP2).

실행의 특징:

  • 내구성 — 데이터베이스에 저장되며, 재시작 후에도 유지됨
  • 관찰 가능 — 모든 상태 전환이 이벤트로 기록됨
  • 검사 가능jamjet inspect로 전체 상태, 이벤트 타임라인, 토큰 사용량 확인 가능

내구성

내구성은 JamJet의 핵심 보장입니다: 런타임이 중단되어도 실행은 항상 완료됩니다.

이는 이벤트 소싱을 통해 작동합니다:

  1. 각 노드 실행 전, node_started 이벤트가 데이터베이스에 기록됩니다
  2. 각 노드 완료 후, node_completed 이벤트가 상태 패치와 함께 기록됩니다
  3. 재시작 시, 스케줄러는 이벤트 로그를 재생하여 실행이 중단된 지점을 정확히 재구성합니다
  4. 실행은 첫 번째 미완료 노드부터 재개됩니다

작업이 손실되지 않습니다. 노드가 두 번 실행되지 않습니다.

참고: 이는 "최소 한 번" 전달 방식과 다릅니다. JamJet의 스케줄러는 분산 락을 사용하여 여러 워커 프로세스가 있어도 각 노드가 정확히 한 번만 실행되도록 보장합니다.

에이전트

에이전트는 다음을 수행할 수 있는 워크플로입니다:

  • 다른 에이전트가 발견하고 호출할 수 있음(에이전트 카드를 통해)
  • 다른 에이전트에게 작업을 위임할 수 있음(A2A 프로토콜을 통해)
  • 여러 사용자 상호작용에 걸쳐 장기 실행 상태를 유지할 수 있음

모든 에이전트는 에이전트 카드를 가지고 있습니다 — 기능, 엔드포인트, 입출력 스키마에 대한 기계 판독 가능한 설명입니다. 이것이 A2A 프로토콜의 기반입니다.

스케줄러

JamJet 스케줄러는 Rust로 작성되었으며 jamjet dev(로컬) 또는 호스팅 런타임(프로덕션)의 일부로 실행됩니다.

동작 방식:

  1. 대기 중인 작업을 위해 실행 큐를 폴링합니다
  2. 중복 실행을 방지하기 위해 실행에 대한 락을 획득합니다
  3. 워커 스레드에 노드를 디스패치합니다
  4. 각 노드 후 체크포인트를 작성합니다

스케줄러는 JamJet 워크플로가 기본적으로 내구성을 가지는 이유입니다 — 실행을 절대 잊지 않습니다.

로컬 vs. 프로덕션

기능jamjet dev (로컬)호스팅 / 자체 호스팅
스토리지SQLitePostgreSQL
워커단일 프로세스분산
MCP 서버로컬 stdio원격 SSE/HTTP
인증없음mTLS / API 키

프로그래밍 모델은 동일합니다 — 동일한 YAML 또는 Python 코드가 두 환경 모두에서 변경 없이 실행됩니다.

On this page