Jido:Elixir自治代理框架的终极指南

📅 2026/7/15 18:33:43 👁️ 阅读次数 📝 编程学习
Jido:Elixir自治代理框架的终极指南

Jido:Elixir自治代理框架的终极指南

【免费下载链接】jido🤖 Autonomous agent framework for Elixir. Built for distributed, autonomous behavior and dynamic workflows.项目地址: https://gitcode.com/GitHub_Trending/ji/jido

Jido 是一个为 Elixir 打造的自治代理框架,专为工作流和多代理系统设计。它让你能够定义代理、连接动作、信号和指令,并内置监督和容错机制,使软件能够检查上下文、选择多个步骤、与其他代理协作,并长时间可靠运行。

为什么选择 Jido?

OTP 原语非常出色,你可以使用原始的 GenServer 构建代理系统。但是当构建多个协作代理时,你会重新发明许多轮子:

原始 OTPJido 形式化
每个 GenServer 的特定消息形状作为标准信封的信号
业务逻辑混合在回调中作为可重用命令模式的动作
代码中分散的隐式效果作为类型化效果描述的指令
每个服务器的自定义子跟踪内置的父/子层次结构
进程退出 = 完成基于状态的完成语义

Jido 不是“更好的 GenServer”——它是构建在 GenServer 之上的形式化代理模式。

核心特性

  • 不可变代理架构:受 Elm/Redux 启发的功能代理状态模型,cmd/2作为核心操作,带 NimbleOptions 或 Zoi 的模式验证状态
  • 基于指令的效果:动作转换状态并可能执行所需工作,指令描述运行时拥有的外部效果,内置多种指令及可扩展的自定义指令协议
  • OTP 运行时集成:基于 GenServer 的 AgentServer 用于生产部署,带生命周期管理的父子代理层次结构,可配置策略的信号路由
  • 可组合插件:扩展代理的可重用功能模块,每个插件的状态隔离与自动模式合并,初始化和信号处理的生命周期钩子
  • 执行策略:简单工作流的直接执行,状态驱动工作流的 FSM(有限状态机)策略,自定义执行模式的可扩展策略协议
  • 多代理编排:带可配置策略的多代理工作流,复杂工作流的基于计划的编排,具有命名拓扑的持久代理组

快速安装 Jido

使用 Igniter(推荐)

最快的入门方式是使用 Igniter:

mix igniter.install jido

这会自动:

  • 将 Jido 添加到依赖项
  • 创建MyApp.Jido实例模块(use Jido, otp_app: :my_app
  • config/config.exs中创建配置
  • MyApp.Jido添加到监督树

生成示例代理开始使用:

mix igniter.install jido --example

手动安装

jido添加到mix.exs中的依赖项列表:

def deps do [ {:jido, "~> 2.0"} ] end

然后定义 Jido 实例模块并将其添加到监督树:

# In lib/my_app/jido.ex defmodule MyApp.Jido do use Jido, otp_app: :my_app end
# In config/config.exs config :my_app, MyApp.Jido, max_tasks: 1000, agent_pools: []
# In your application.ex children = [ MyApp.Jido ] Supervisor.start_link(children, strategy: :one_for_one)

快速上手 Jido

1. 定义代理

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

2. 定义动作

defmodule MyApp.Actions.Increment do use Jido.Action, name: "increment", description: "Increments the counter by a given amount", schema: [ amount: [type: :integer, default: 1] ] def run(params, context) do current = context.state[:count] || 0 {:ok, %{count: current + params.amount}} end end

3. 执行命令

# 创建代理 agent = MyApp.CounterAgent.new() # 执行动作 - 返回更新的代理 + 指令 {agent, directives} = MyApp.CounterAgent.cmd(agent, {MyApp.Actions.Increment, %{amount: 5}}) # 检查状态 agent.state.count # => 5

4. 使用 AgentServer 运行

# 启动代理服务器 {:ok, pid} = MyApp.Jido.start_agent(MyApp.CounterAgent, id: "counter-1") # 向运行中的代理发送信号(同步) # 信号类型必须在 signal_routes 中声明 {:ok, agent} = Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user")) # 通过 ID 查找代理 pid = MyApp.Jido.whereis("counter-1") # 列出所有运行中的代理 agents = MyApp.Jido.list_agents()

Jido 核心概念

cmd/2契约

Jido 中的基本操作:

{agent, directives} = MyAgent.cmd(agent, action)

关键不变量:

  • 返回的agent始终是完整的 - 不需要“应用指令”步骤
  • directives仅描述运行时拥有的外部效果 - 它们从不修改代理状态
  • 代理决策逻辑保持显式和可测试;确定性动作产生确定性cmd/2结果

动作 vs 指令 vs 状态操作

动作指令状态操作
转换状态,可能执行副作用描述运行时拥有的效果描述内部状态变化
cmd/2执行,更新agent.state代理发出的裸结构体由策略层应用
可以调用 API、读取文件、查询数据库运行时(AgentServer)解释它们从不离开策略

状态操作(Jido.Agent.StateOp

状态操作是在cmd/2期间由策略层处理的内部状态转换。与指令不同,它们永远不会到达运行时。

状态操作目的
SetState将属性深度合并到状态中
ReplaceState完全替换状态
DeleteKeys删除顶级键
SetPath在嵌套路径设置值
DeletePath删除嵌套路径的值

指令类型

指令目的
Emit通过配置的适配器调度信号
Error从 cmd/2 发出错误信号
Spawn生成通用 BEAM 子进程
SpawnAgent生成跟踪的子 Jido 代理(默认restart: :transient
StopChild优雅地停止并移除跟踪的子代理
StartSensor启动或替换标记的传感器运行时
StopSensor停止标记的传感器运行时
Schedule安排延迟消息
Stop停止代理进程

Jido 生态系统

Jido 是 Jido 生态系统的核心包。生态系统围绕核心 Jido Agent 行为构建,并提供多个可选包来扩展核心行为。

描述
req_llmLLM API 的 HTTP 客户端
jido_action具有 AI 工具集成的可组合、已验证动作
jido_signal基于 CloudEvents 的消息信封和用于路由和发布/订阅消息的支持工具
jido具有状态管理、指令和运行时的核心代理框架
jido_ai代理的 AI/LLM 集成

深入学习 Jido

从这里开始:

  • 快速入门 - 在 5 分钟内构建你的第一个代理
  • 核心循环 - 理解思维模型

指南:

  • 构建代理 - 代理定义和状态管理
  • 信号与路由 - 基于信号的通信
  • 代理指令 - 运行时的效果描述
  • 运行时和 AgentServer - 基于进程的代理执行
  • 选择运行时模式 - 何时使用SpawnAgentInstanceManagerPodpartition
  • Pods - 具有命名拓扑、延迟激活、嵌套 pod 和实时添加/删除突变的持久代理组
  • 多租户 - 具有分区和 Pod 优先持久工作区的共享实例租户
  • 持久性和存储 - 休眠、解冻和 InstanceManager 生命周期
  • 调度 - 声明式和动态 cron 调度
  • 插件 - 可组合功能包
  • 策略 - 执行策略(直接、FSM)

高级:

  • FSM 策略深入探讨 - 状态机工作流
  • 工作池 - 用于吞吐量的预热代理池
  • 测试代理 - 测试模式和最佳实践

API 参考:hexdocs.pm/jido

常见问题解答

一般问题

Q: Jido 是什么,它与其他代理框架有何不同?

A: Jido 是一个为 Elixir 打造的自治代理框架,专为工作流和多代理系统设计。主要区别:

  • OTP 原生架构:构建在 GenServer 之上,内置监督和容错
  • 不可变代理:受 Elm/Redux 启发的功能状态模型
  • AI 可选:核心包提供代理架构,不需要 AI/LLM
  • 显式效果边界:动作可以拥有即时工作;指令描述运行时拥有的效果

Q: AI 是 Jido 必需的吗?

A:不!核心包 (jido) 提供代理架构和运行时而无需 AI。AI/LLM 集成可通过配套包可选添加:

  • jido_ai:代理的 AI/LLM 集成
  • req_llm:LLM API 的 HTTP 客户端

当软件需要检查上下文、选择步骤、协调代理并可靠运行时使用 Jido - AI 是可选的。

功能

Q: 有哪些可用的指令?

A: 内置指令:

  • Emit:向系统发出信号
  • Error:从cmd/2发出错误信号
  • Spawn:生成子进程
  • SpawnAgent:生成子代理
  • AdoptChild:将孤立或未附加的子项附加到当前父项
  • StopChild:停止子进程/代理
  • StartSensor:启动或替换所有者监控的标记传感器运行时
  • StopSensor:停止标记的传感器运行时
  • Schedule:安排未来动作
  • RunInstruction:在运行时执行指令并将结果路由回cmd/2
  • Stop:停止代理
  • Cron / CronCancel:注册和取消基于 cron 的计划

外部包也可以定义自定义指令结构体。有关详细信息,请参见 代理指令。

Q: 插件如何工作?

A: 可组合插件通过以下方式扩展代理:

  • 可重用功能模块
  • 每个插件的状态隔离与自动模式合并
  • 跨代理的轻松功能共享

有关详细信息,请参见 插件指南。

Q: 有哪些可用的执行策略?

A:

  • 直接策略:立即执行
  • FSM 策略:状态机工作流

请参见 策略指南 和 FSM 策略深入探讨。

帮助资源

  • 文档:hexdocs.pm/jido
  • 网站:jido.run
  • 生态系统:jido.run/ecosystem
  • Discord:jido.run/discord
  • GitHub:github.com/agentjido/jido
  • Jido Workbench:github.com/agentjido/jido_workbench

【免费下载链接】jido🤖 Autonomous agent framework for Elixir. Built for distributed, autonomous behavior and dynamic workflows.项目地址: https://gitcode.com/GitHub_Trending/ji/jido

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考