JamJet

コアコンセプト

JamJetにおけるエージェント、ノード、状態、耐久性について理解します。

コアコンセプト

JamJetはエージェントネイティブなランタイムです。障害に耐え、ワーカー間でスケールし、他のエージェントと組み合わせる必要があるAIワークフロー向けに設計されています。このページでは主要なプリミティブを説明します。

ワークフロー

ワークフローはノードの有向グラフです。以下を持ちます:

  • 一意のidversion
  • state_schema — グラフ内を流れるデータの型定義
  • 実行が開始されるstartノード
  • 1つ以上の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から読み込み、stateに書き込みます。

ステート

ステートはワークフロー実行の共有データストアです。ノード間、再起動をまたいで永続化されます。

state_schema:
  query: str        # ユーザーからの入力
  search_results: list[str]  # 中間データ
  answer: str       # 最終出力

ステートは型付きです。スキーマはコンパイル時に検証されます。実行時、各ノードは任意のステートキーを読み込み、自身のoutput_keyに書き込むことができます。

tip: ステートはメモリではなくデータベースに保存されます。実行中にランタイムがクラッシュしても、ステートは完全に復旧され、最後のチェックポイントから実行が再開されます。

実行

実行とは、特定の入力を持つワークフローの1回の実行です。各実行には一意のID(例:exec_01JM4X8NKWP2)が割り当てられます。

実行の特徴:

  • 永続的 — データベースに保存され、再起動後も維持される
  • 観察可能 — すべての状態遷移がイベントとして記録される
  • 検査可能jamjet inspectで完全な状態、イベントタイムライン、トークン使用量を確認できる

永続性

永続性はJamJetの中核的な保証です:ランタイムがクラッシュしても、実行は必ず完了します

これはイベントソーシングによって実現されます:

  1. 各ノードの実行前に、node_startedイベントがデータベースに書き込まれる
  2. 各ノードの完了後に、状態パッチを含むnode_completedイベントが書き込まれる
  3. 再起動時、スケジューラはイベントログを再生して実行が停止した場所を正確に再構築する
  4. 最初の未完了ノードから実行が再開される

作業は失われず、ノードが2回実行されることもありません。

注記: これは「少なくとも1回」の配信とは異なります。JamJetのスケジューラは分散ロックを使用して、複数のワーカープロセスがある場合でも各ノードが正確に1回実行されることを保証します。

エージェント

エージェントとは、次のことができるワークフローです:

  • 他のエージェントから発見され呼び出される(Agent Cardsを介して)
  • 他のエージェントにタスクを委任する(A2Aプロトコルを介して)
  • 複数のユーザーインタラクションにわたって長期実行状態を維持する

すべてのエージェントにはAgent Cardがあります — その機能、エンドポイント、入出力スキーマの機械可読な記述です。これが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