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拡張ボットまで幅広く適しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト