jido
Elixir 上的自治 Agent 框架,用函数式思维构建可测试、可容错的多 Agent 系统
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Elixir 上的自治 Agent 框架,用函数式思维构建可测试、可容错的多 Agent 系统
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。

「如果把构建 AI Agent 看作搭乐高,Jido 就是提供标准化积木的那盒基础颗粒——每一块都有明确定义的位置和拼接口。」
在 AI Agent 浪潮中,大多数框架都围绕 Python 展开。然而 Elixir/Erlang 社区一直拥有独特的优势:基于 BEAM 虚拟机的分布式容错能力和 OTP 设计模式(GenServer、Supervisor、Agent)。这些基础设施天然适合构建长时间运行、需要容错和并发的 Agent 系统。
Jido(自動,日语「自动化」之意)正是填补这一空白的项目:由 agentjido 组织开发,核心思想是将 AI Agent 的架构模式形式化为 Elixir 生态的标准库,让开发者用普通 Elixir 代码构建多 Agent 协作系统,而无需重复发明轮子。
Jido 的核心循环借鉴了函数式编程中经典的 Elm/Redux 模式。一个 Agent 是一个不可变的数据结构,所有状态变更通过 cmd/2 函数显式返回:
{agent, directives} = MyAgent.cmd(agent, action)
这个简单等式背后蕴含着三个精心设计的设计决策:
1. Agent 是纯数据结构
Agent 本身是一个包含 id、name、state、schema 等字段的结构体。每次 cmd/2 调用都返回新的 Agent 实例,状态永远不可变。这使得 Agent 天然可测试、可序列化、可热更新——完全符合 Elixir 的哲学。
2. Action 负责「做什么」
Action 是执行单元,对应传统架构中的 service/controller。它接收 params(经过 schema 验证的参数)和 context(当前 Agent 状态),返回 ok/state_updates 或错误元组。Action 可以是纯函数(数学计算),也可以是副作用函数(API 调用、数据库查询),取决于当前步骤是否需要返回值来继续推理。
3. Directive 负责「通知外部」
当 Agent 需要触发外部效果(发送信号、派生子 Agent、定时调度)时,它通过 directives 返回描述性指令,由运行时(AgentServer)负责执行。这实现了决策逻辑与副作用执行的严格分离。
Jido 的运行时基于 GenServer,以 AgentServer 的形式运行在 Elixir 应用监督树中。它负责:
Signal 是 Jido 生态中的消息封装规范,基于 CloudEvents 标准。一个 Signal 包含类型、负载、来源等元信息,通过 jido_signal 包提供 pub/sub 路由能力。这是 Jido 区别于普通 GenServer 的关键:标准的消息格式让多个 Agent 之间的协作无需约定私有协议。
Jido 内置了完整的指令类型:
| 指令类型 | 作用 | 说明 |
|---|---|---|
| Emit | 发送信号 | 通过配置的 adapter 路由 |
| Spawn | 派生 BEAM 进程 | 轻量级 |
| SpawnAgent | 派生子 Agent | 带父子层级 |
| Schedule | 定时调度 | 支持 Cron 表达式 |
| Stop | 停止子级 | 可选退出原因 |
每种指令都有对应的运行时实现(DirectiveExec),完全可扩展。
Jido 支持两种内置执行策略:
用户还可以通过 Strategy Protocol 实现自定义执行模式。
Agent 可以挂载插件(Plugin)来扩展能力。插件有自己的独立 schema,自动与 Agent 主 schema 合并。内置插件包括 Identity Plugin(Agent 身份管理)等。
Jido 不只是一个库,而是一个围绕 Agent 架构扩展的生态:
| 包名 | 定位 | 核心功能 |
|---|---|---|
| jido | 核心框架 | Agent 架构、cmd/2 契约、运行时 |
| jido_action | Action 扩展 | 组合式验证 Action、AI 工具集成 |
| jido_signal | Signal 路由 | CloudEvents 消息、pub/sub |
| jido_ai | AI 集成 | LLM/模型接入 Agent |
| req_llm | HTTP 客户端 | LLM API 的 Elixir HTTP 封装 |
Jido 定位为 Elixir 生态的库(library),而非独立服务。安装方式极为简洁:
# 方式一:Igniter(推荐,自动配置)
mix igniter.install jido
# 方式二:手动添加依赖
# mix.exs
def deps do
[{:jido, "~> 2.0"}]
end
配置完成后,只需定义 Agent 模块并加入监督树即可:
defmodule MyApp.Jido do
use Jido, otp_app: :my_app
end
# Application.ex
children = [MyApp.Jido]
Supervisor.start_link(children, strategy: :one_for_one)
无 Dockerfile,无 Web UI,纯 Elixir OTP 应用集成。依赖 Elixir >= 1.15 和 Erlang/OTP >= 26,内存占用极低(512MB 足够)。
1. AI 集成是可选的,不是开箱即用的
Jido 的核心不包含任何 LLM 接入逻辑。必须额外引入 jido_ai 和 req_llm,需要自己管理模型 API Key 和 prompt 模板。对于想快速体验 AI Agent 的用户,门槛比 LangChain/CrewAI 更高。
2. 纯 Elixir 生态,Python 工程师有学习曲线
Action 的 run/2 函数签名、Elixir 的 pipe operator、GenServer 模式——没有 Elixir 经验的开发者需要一定的学习投入。
3. 文档面向中高级用户
guides 目录有 32 个文档,但假设读者熟悉 OTP 模式和 Elixir 语法。入门文档数量相对较少。
Jido 代表了一种有别于主流 Python Agent 框架的设计哲学:用不可变数据结构 + 显式状态转换 + 副作用分离来构建 Agent 系统。这种方法的优势在于:
随着 AI Agent 从实验走向生产,对可靠性、可维护性、可扩展性的要求会越来越高——而这正是 Elixir/OTP 生态的强项。Jido 的出现,预示着函数式编程范式在 AI Agent 领域的一次有意义的探索。
项目信息