agentjido/jido

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

Jido – Elixir를 위한 자율 에이전트 프레임워크

개요 – Jido는 자율 에이전트를 일반적인 Elixir/OTP 컴포넌트로 구축할 수 있게 해주는 라이브러리입니다. 에이전트는 단일 cmd/2 함수를 구현하는 불변 데이터 구조입니다. 액션을 입력하면 새로운 에이전트 상태와 함께 런타임이 수행해야 할 부작용(신호 방출, 자식 프로세스 생성, 미래 작업 예약 등)을 설명하는 지시문(directive) 목록을 반환합니다. 핵심 패키지는 에이전트 모델, 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 봉투 + pub/sub 라우팅용 유틸리티
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 강화 봇까지 폭넓게 적합합니다.

관련

  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트
  • 프로젝트