Jido Elixir 智能体框架
面向 Elixir/OTP 的有状态工作流与协作进程框架。
- Star 数
- ★ 1.9k
- 最近更新
- 2 天前
- License
- Apache-2.0
- 主语言
- Elixir
- FA 评分
- 41/100 · 缺口较多
30 秒速览
- 可在哪里用
- 通用 · 跨平台
- 开始前需要
- 典型场景
- Elixir 后端团队需要把多个长期运行、可监督的业务进程组织为协作工作流时。
- 主要局限
- 采用需要 Elixir 1.17+ 和 Erlang/OTP 26+,对非 BEAM 技术栈团队存在运行时与迁移成本。
这个 Agent 能做什么,适合哪些场景?
Jido 是一个用于构建工作流和多主体系统的 Elixir 自主智能体框架。它将智能体定义为带状态、实现 cmd/2 的不可变结构;Action 执行工作并转换状态,Signal 将事件路由进系统,Directive 描述由运行时处理的外部效果。生产运行使用基于 GenServer 的 AgentServer,并提供监督、父子智能体生命周期、信号路由、实例分区和多租户边界。框架还提供 Direct 与 FSM 执行策略、可组合插件、计划式编排和 Pod 形式的持久智能体组。AI 不是核心运行条件,模型集成由 jido_ai 等生态包按需提供。
开发者用 use Jido.Agent 定义名称、描述、schema 和 signal_routes,再用 use Jido.Action 定义带参数 schema 的 run/2。调用 MyAgent.cmd(agent, {ActionModule, params}) 会执行 Action,返回更新后的 agent 与 directives;StateOp 由策略层处理状态更新,而 Emit、SpawnAgent、Schedule、Stop 等 Directive 由 AgentServer 运行时解释。运行中的 AgentServer 可通过 Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user")) 接收 Signal;实例模块可用 start_agent、whereis 和 list_agents 管理进程。
- Elixir 后端团队需要把多个长期运行、可监督的业务进程组织为协作工作流时。
- 需要将 CloudEvents 风格消息路由到有明确状态和命令边界的服务时。
- 构建需要父子进程生命周期管理、延迟调度或运行时发射事件的 BEAM 应用时。
- 希望以 FSM 策略实现状态驱动流程,而非在 GenServer 回调中混合业务逻辑时。
- 需要在共享实例中通过 logical partitions 或 Pod 管理多租户工作空间时。
如何安装或部署这个 Agent?
运行:
mix igniter.install jido这会添加依赖、创建 MyApp.Jido、写入配置并加入监督树。也可在 mix.exs 添加 {:jido, "~> 2.0"},创建:
defmodule MyApp.Jido do
use Jido, otp_app: :my_append
在 config/config.exs 配置:
config :my_app, MyApp.Jido, max_tasks: 1000, agent_pools: []并将 MyApp.Jido 放入 application.ex 的 children。文档要求 Elixir 1.17+ 与 Erlang/OTP 26+;未说明凭据要求。
如何使用这个 Agent?
先定义 Agent 和 Action,例如为 Agent 配置 signal_routes: [{"increment", MyApp.Actions.Increment}],并在 Action 的 run/2 中返回 {:ok, %{count: current + params.amount}}。创建并执行:
agent = MyApp.CounterAgent.new(){agent, directives} = MyApp.CounterAgent.cmd(agent, {MyApp.Actions.Increment, %{amount: 5}})
要以进程方式运行:
{:ok, pid} = MyApp.Jido.start_agent(MyApp.CounterAgent, id: "counter-1")
{:ok, agent} = Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user"))
Signal 类型必须已在 signal_routes 中声明。
这个 Agent 有哪些优点和局限?
- 以 Elixir/OTP 和 GenServer 为基础,提供监督与故障容忍,而不是只提供链式调用接口。
- cmd/2 明确返回更新后的 agent 和 directives,使状态转换与运行时拥有的效果分离。
- 提供可配置的父子层级、实例作用域监督、逻辑分区与 Pod,适合持久化协作进程拓扑。
- Direct 与 FSM 策略,以及可合并 schema 的插件,支持不同的工作流建模方式。
- 采用需要 Elixir 1.17+ 和 Erlang/OTP 26+,对非 BEAM 技术栈团队存在运行时与迁移成本。
- AI/LLM 不属于核心包;需要模型功能时还要评估并集成 jido_ai、req_llm 等生态包。
- Action 可以执行 API、文件或数据库操作,因此具体应用仍须自行设计 I/O、权限和错误处理边界。
- 资料只展示内置运行时与生态包,未说明针对 OpenAI、Anthropic 或其他命名模型提供商的核心包适配范围。
这个 Agent 与同类方案有什么区别?
README 将 Jido 与 LangChain、CrewAI 对比:LangChain 被描述为 Python 优先的链式编排,CrewAI 被描述为基于角色的团队协作;Jido 的定位是建立在 GenServer 之上的 OTP 原生智能体模式,强调监督树、不可变状态和显式 Directive 效果边界。
与相关度最高的同类 agent 并排比较关键指标。
| Agent | 源码审查 | Star | 最近更新 | 主语言 | 完整支持的平台 |
|---|---|---|---|---|---|
| Jido Elixir 智能体框架 当前 | 41 · 缺口较多 | ★ 1.9k | 2 天前 | Elixir | — |
| Pi Dynamic Workflows | 88 · 表现良好 | ★ 531 | 9 天前 | TypeScript | — |
| LlamaAgents | 66 · 存在缺口 | ★ 452 | 3 天前 | Python | — |
| Agently AI 应用运行时 | 63 · 存在缺口 | ★ 1.7k | 11 天前 | Python | OpenAI API · Claude API |
FollowAgents 如何评估这个 Agent?
查看各维度的扣分理由
证据显示框架强调显式指令和运行时所有权,但未提供权限最小化、用户确认或敏感数据处理的机制。依赖安全仅通过CI和常规依赖管理体现,未提供漏洞扫描证据。外部效果通过指令描述,但未提供回滚机制。来源归属仅通过许可证和版权声明体现。
文档和代码示例一致,但未提供故障消息的详细说明。依赖可用性通过Hex和GitHub Actions体现,但未提供依赖锁定或镜像。
明确面向Elixir开发者,提供了多种场景和指南。能力边界通过指令和策略说明,但触发精度未详细说明。环境适配通过OTP和Elixir版本要求体现。
信息架构清晰,安装说明详细,命名稳定,示例和FAQ丰富。已知限制未明确列出,许可证为Apache-2.0,版本控制通过Hex和GitHub Actions体现,维护责任通过贡献指南体现。
输出可用性通过清晰的API和示例体现,边际价值通过对比原始OTP体现,成本效益未提供性能或资源使用数据。
声明与代码示例一致,但未提供独立验证。事实与推断未明确分离。
- 源码中未见:执行前用户确认开启或自行加上执行前确认;先在沙箱或测试环境跑通,确认行为后再接入真实数据。
- 源码中未见:敏感信息处理使用专用、低权限、可随时吊销的 API 密钥,不要复用生产凭据,也不要让密钥出现在日志里。
- 源码中未见:回滚或恢复路径运行前先备份,或在 git 分支、快照上操作,确保改动可以撤销。
- 未提供权限最小化或用户确认机制,部署时需自行实施安全控制。
- 未提供敏感数据处理或回滚机制,需评估数据保护需求。
- 依赖安全未提供漏洞扫描证据,建议使用依赖审计工具。
- 未明确列出已知限制,需自行评估适用性。