agentjido/jido

🤖 Autonomous agent framework for Elixir. Built for distributed, autonomous behavior and dynamic workflows.

Jido – Elixirのための自律エージェントフレームワーク

概要 – Jidoは、自律エージェントを通常のElixir/OTPコンポーネントとして構築できるライブラリです。エージェントは、単一の cmd/2 関数を実装する不変のデータ構造です。アクションを入力すると、新しいエージェント状態と、ランタイムが実行すべき副作用(信号の送信、子プロセスの生成、将来のタスクのスケジュールなど)を記述したディレクティブのリストを返します。コアパッケージは、エージェントモデル、GenServerベースの AgentServer ランタイム、および一連の組み込みディレクティブを提供します。AI/LLM統合は、コンパニオンパッケージを介してオプションで利用可能です。


主要な概念

概念 役割
Agent スキーマ検証された状態を持つ不変の構造体。cmd/2を定義します。
Action 検証済みのパラメータと現在のコンテキストを受け取り、状態の更新(およびオプションでディレクティブ)を返す純粋または副作用のある関数。
Signal 外部イベントをエージェントにルーティングするために使用されるCloudEventsスタイルのエンベロープ。
Directive ランタイムが所有するエフェクト(送信、生成、スケジュール、停止など)の型付き記述。
Strategy cmd/2がどのように実行されるかを決定する実行ポリシー(Direct、FSM、またはカスタム)。
Plugin エージェントに状態、アクション、ディレクティブを追加できる再利用可能な機能モジュール。

Jidoを使う理由

  • OTPネイティブ – GenServerとスーパービジョンツリーに基づいて構築されているため、耐障害性とホットコードアップグレードを無料で利用できます。
  • 不変、Elmスタイルの状態 – 推論とテストを容易にします。
  • 明確なエフェクト境界 – アクションは状態を変更し、ディレクティブは副作用を記述するため、ビジネスロジックを純粋に保てます。
  • マルチエージェントオーケストレーション – 階層的な親/子エージェント、信号ルーティング、およびエージェントをグループ化するための永続的な pods。
  • AIオプション – コアはLLMなしで動作します。必要な場合にのみ jido_ai または req_llm を追加してください。

主な機能(READMEより)

  • NimbleOptions/Zoiによるスキーマ検証を備えた不変エージェントアーキテクチャ。
  • ディレクティブベースのエフェクト (Emit, Spawn, SpawnAgent, StopChild, StartSensor, Schedule, Stop, …) およびカスタムディレクティブ用のプロトコル。
  • OTPランタイム統合 – AgentServer がスーパービジョン、親子階層、信号ルーティングを処理します。
  • 独自のスキーマをエージェントにマージし、ライフサイクルフックを提供するコンポーザブルなプラグイン。
  • 複数の実行戦略 – 直接実行、有限状態マシン (FSM) ワークフロー、および拡張可能なカスタム戦略。
  • マルチエージェントオーケストレーション – 名前付きトポロジ、ネストされたpods、パーティションセーフなテナンシー、および永続的なグループ。
  • 組み込みのスケジューリングとcron サポート。
  • 広範なドキュメント(クイックスタート、ガイド、APIリファレンス)とDiscordコミュニティ。

一般的なユースケース

  • ワークフローエンジン – 各ステップがアクションであり、プロセス全体がエージェントとしてモデル化されます。
  • 調整されたマイクロサービス – 信頼性の高いステートフルなオーケストレーションが必要な場合(例:注文処理、IoTデバイス管理)。
  • LLM拡張ボット – jido_ai を追加して、コアループを純粋に保ちながらエージェントが推論のためにLLMを呼び出せるようにします。
  • マルチテナントSaaSバックエンド – podsとパーティションを使用して、同じBEAMノードを共有しながらテナントのワークロードを分離します。
  • センサー/エッジデバイスオーケストレーション – StartSensor/StopSensor ディレクティブを介してセンサーランタイムを開始/停止します。

インストールとクイックスタート

# Add to mix.exs
{:jido, "~> 2.0"}

次に、Jidoインスタンスモジュールを作成し、スーパービジョンツリーに追加します:

defmodule MyApp.Jido do
  use Jido, otp_app: :my_app
end

# application.ex
children = [MyApp.Jido]
Supervisor.start_link(children, strategy: :one_for_one)

エージェントとアクションを定義します:

defmodule MyApp.CounterAgent do
  use Jido.Agent,
    name: "counter",
    schema: [count: [type: :integer, default: 0]],
    signal_routes: [{"increment", MyApp.Actions.Increment}]
end

defmodule MyApp.Actions.Increment do
  use Jido.Action,
    name: "increment",
    schema: [amount: [type: :integer, default: 1]]

  def run(params, ctx) do
    current = ctx.state[:count] || 0
    {:ok, %{count: current + params.amount}}
  end
end

実行します:

agent = MyApp.CounterAgent.new()
{agent, dirs} = MyApp.CounterAgent.cmd(agent, {MyApp.Actions.Increment, %{amount: 5}})
# agent.state.count => 5

または、ランタイム下で起動します:

{:ok, pid} = MyApp.Jido.start_agent(MyApp.CounterAgent, id: "c1")
Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user"))

エコシステムパッケージ

パッケージ 追加機能
req_llm LLM API用の軽量HTTPクライアント
jido_action コンポーザブルなアクション、検証、AIツール統合のためのヘルパーマクロ
jido_signal CloudEventsエンベロープ + パブ/サブルーティング用ユーティリティ
jido (core) エージェントフレームワーク、ディレクティブ、ランタイム
jido_ai エージェント用のオプションのLLM/AI統合

成熟度とコミュニティ

  • バージョン: 2.x (Hex.pmで安定版)。
  • CI: GitHub Actionsバッジで継続的インテグレーションを表示。
  • ドキュメント: hexdocs.pmの完全なAPIリファレンスとリポジトリ内の広範なガイド。
  • サポート: Discordコミュニティ、デモ付きのウェブサイト、視覚的実験用のワークベンチリポジトリ。
  • ライセンス: Apache-2.0 (寛容で商用利用可能)。

まとめ

Jidoは、Elixir開発者に自律エージェントを記述するための正式なOTPネイティブな方法を提供します。状態は不変であり、副作用はディレクティブによって記述され、ランタイムがスーパービジョン、信号ルーティング、マルチエージェントオーケストレーションを処理します。AIはオプションのアドオンであるため、Jidoは純粋なワークフローエンジンからLLM拡張ボットまで幅広く適しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト