DuraGraph

面向 AI Agent 的持久化工作流编排引擎:事件溯源、可回放、单二进制自托管。

Star 数
★ 163
最近更新
12 天前
License
Apache-2.0
主语言
Go

30 秒速览

可在哪里用
兼容但需适配
开始前需要
Go toolchain (for go install or building from source)Embedded PostgreSQL and NATS (bundled in dev mode)Docker (optional, for deploy/ assets and the published image)Shell / 命令行网络访问本地文件系统
典型场景
需要长时间运行的 LLM Agent 团队:Agent 会跑几小时甚至更久,担心 worker 在中途崩溃导致状态丢失,希望重启后从最后一个已提交状态继续。
主要局限
生产就绪度有限:多租户与 NATS Accounts 隔离、生产 Helm chart、工作流版本管理与迁移都明确标为 in flight,尚未完成。

这个 Agent 能做什么,适合哪些场景?

DuraGraph 是一个自托管、面向企业场景的 AI 工作流编排系统,核心思路是把每一次状态变更都作为不可变事件写入 PostgreSQL,并与工作本身放在同一个事务里,因此 worker 在工具调用中途崩溃也不会丢状态,整个运行可以从事件日志重放。仓库是 monorepo:cmd/duragraph 是控制平面二进制(引擎 + 内嵌 dashboard + 开发模式引导),internal/ 按 DDD、事件溯源与 CQRS 分层,dashboard/ 是 React + TanStack Router + xyflow 的控制台(含可视化工作流编辑器,构建时嵌入二进制),python/ 与 go-sdk/ 是两类 worker SDK,examples/ 提供 Go 与 Python 参考 Agent,deploy/ 存放 Docker、SQL 迁移与 Helm chart。对外接口是稳定的 REST + SSE API,覆盖 runs、threads、assistants、graphs;worker 通过 SDK 在启动时注册图定义,不需要代码生成或自定义 DSL。部署边界很清晰:开发模式用单个二进制内嵌 PostgreSQL 与 NATS,生产环境可换成外部 Postgres 和 NATS。

运行时,worker 通过 Python 或 Go SDK 连接控制平面并注册图定义;客户端调用 POST /api/v1/threads/:id/runs 创建 run,引擎的图执行引擎按节点、边、条件分支、human-in-the-loop 中断与工具调用逐步推进,并把每个状态迁移作为事件写入 PostgreSQL 事件存储。写事务与工作本身同一事务提交,因此崩溃后可从中断处恢复,且不会重复执行。Outbox relay 把领域事件转发到 NATS JetStream,dashboard 通过 SSE 实时显示节点点亮、图拓扑与可回放的轨迹。读取侧走 CQRS 查询,GET /api/v1/runs/:id 取运行状态,GET /api/v1/threads/:id/runs 列出会话中的 run,GET /api/v1/threads/:id/runs/:run_id/stream 订阅实时执行事件,POST /api/v1/assistants 注册 assistant,GET /api/v1/assistants/:id/graph 读取图结构。此外暴露 OpenTelemetry 友好的 Prometheus 指标。

  1. 需要长时间运行的 LLM Agent 团队:Agent 会跑几小时甚至更久,担心 worker 在中途崩溃导致状态丢失,希望重启后从最后一个已提交状态继续。
  2. 需要审计与合规的场景:要把每一次状态变更按时间顺序留痕,并基于事件存储做 eval 与合规视图。
  3. 被线上失败困扰的开发者:想按产生问题的确切决策序列逐步回放出错 run,而不是只看堆栈和模糊的最后已知位置。
  4. 想免运维试跑自己的 AI 工作流的个人或小团队:用 duragraph dev 一条命令起引擎和内嵌 Postgres/NATS,从 Playground 发第一条消息。
  5. 已经在用 Go 或 Python 写 Agent 的工程团队:用 go-sdk 或 python/ 中的 SDK 注册图定义,接入现有代码而不写 DSL。
  6. 平台团队:需要自托管的控制平面、REST + SSE 接口、Prometheus 指标,并计划在生产替换成外部 Postgres 与 NATS。

如何安装或部署这个 Agent?

README 给出四种安装途径,任选其一:

# Homebrew(macOS、Linux)
brew install Duragraph/tap/duragraph

# 一行安装脚本
curl -fsSL https://duragraph.ai/install.sh | sh

# 从 Go 安装
go install github.com/Duragraph/duragraph/cmd/duragraph@latest

# 或从 Releases 下载预编译二进制
# → https://github.com/Duragraph/duragraph/releases

从源码参与开发:

git clone https://github.com/Duragraph/duragraph.git
cd duragraph
task dev   # 针对本地 Postgres + NATS 启动引擎与 dashboard
task test  # 单元 + 集成测试套件

凭据方面:无需预先配置数据库或消息中间件,开发模式内嵌 PostgreSQL 与 NATS;首次启动后使用日志中打印的 bootstrap admin 账号登录 dashboard。生产环境需要外部 PostgreSQL 与 NATS(deploy/ 下提供 Docker 与 SQL 迁移,Helm chart 仍标注为进行中)。

如何使用这个 Agent?

第一步启动服务:

duragraph dev
# → 引擎与 dashboard 监听 http://localhost:8081

第二步跑通第一个 Agent:打开 http://localhost:8081,用日志里打印的 bootstrap admin 登录,进入 Playground,选择一个已注册的 assistant,发送一条消息;可以看到工作流实时执行,每个节点依次点亮,并能在 Traces 中查看完整图拓扑与可回放的事件日志。examples/ 下有 RAG、工具调用 Agent、文档处理、eval 等 Go 与 Python 示例,可直接对着 duragraph dev 运行。

第三步接入自己的 Agent:起一个 worker,用 python/ 或 go-sdk/ 里的 SDK 在启动时注册图定义;然后通过 REST + SSE 驱动 run:

POST   /api/v1/threads/:id/runs                  # 创建 run
GET    /api/v1/runs/:id                          # 查询 run 状态
GET    /api/v1/threads/:id/runs                  # 列出某会话的 run
GET    /api/v1/threads/:id/runs/:run_id/stream   # SSE:实时执行事件
POST   /api/v1/assistants                        # 注册 assistant
GET    /api/v1/assistants/:id/graph              # 读取图拓扑

这个 Agent 有哪些优点和局限?

优点
  • 事件溯源 + CQRS + outbox 的组合是真实实现:每个状态迁移与工作在同一事务写入 PostgreSQL,崩溃后从最后提交状态恢复且不重复执行,run 可从事件日志完整重放,便于调试与审计。
  • 开发体验门槛极低:单个二进制内嵌 PostgreSQL 与 NATS,duragraph dev 一条命令即可跑起引擎与 dashboard,不需要 docker compose,也不需要先准备基础设施。
  • SDK 与语言生态对工程团队友好:提供 Python(PyPI 包 duragraph)与 Go 两个 worker SDK,worker 在启动时注册图定义,无需代码生成或自定义 DSL。
  • 运维与集成面完整:稳定的 REST + SSE 接口、React + xyflow 的内嵌 dashboard(含可视化工作流编辑器和 Traces 会话视图)、OpenTelemetry 友好的 Prometheus 指标,以及 Docker 与 SQL 迁移资产。
  • Apache-2.0 许可,采用 monorepo 让控制平面、SDK、dashboard 与文档围绕同一份规范一起演进。
局限
  • 生产就绪度有限:多租户与 NATS Accounts 隔离、生产 Helm chart、工作流版本管理与迁移都明确标为 in flight,尚未完成。
  • 可观测性有缺口:按节点的 REST spans 端点仍未提供,目前只能通过 SSE 获取执行事件。
  • 生产部署引入外部依赖:开发模式内嵌 Postgres 与 NATS 很省事,但 README 说明生产环境使用外部 PostgreSQL 与 NATS,等于把数据库与消息中间件的运维成本接了过来。
  • 需要理解其架构模型:要真正用好,团队得接受事件溯源、CQRS、outbox relay 这套概念,对只想写线性 Agent 脚本的人属于额外认知负担。
  • 仓库未说明支持的 LLM provider 或模型适配层,也没有列出各主流 Agent 运行时之间的迁移路径,选型时这方面的证据缺失。

这个 Agent 与同类方案有什么区别?

README 明确把自己定位为「Temporal for AI agents」,并指出采用的是与 Temporal 相同的持久化工作流架构,只是针对 AI Agent 图的形状(节点、边、条件分支、human-in-the-loop 中断、工具调用)做了专门设计。文中还提到 LangChain 类编排器只保存 run 的当前状态,出问题时只留下堆栈和模糊的最后位置——这是 README 自己给出的对比对象。

与相关度最高的同类 agent 并排比较关键指标。

Agent 源码审查 Star 最近更新 主语言 完整支持的平台
DuraGraph 当前 45 · 缺口较多 ★ 163 12 天前 Go
Babysitter 52 · 缺口较多 ★ 1.8k 23 天前 JavaScript Claude Code
Maze 分布式 LLM Agent 框架 51 · 缺口较多 ★ 611 1 个月前 Python
自托管 AI 入门套件 50 · 缺口较多 ★ 15k 2 个月前

FollowAgents 如何评估这个 Agent?

FollowAgents 源码审查 · FARS-2.1
缺口较多
45/ 100 五分制 2.3 / 5
信任安全 10/29
可靠稳定 6/14
适用触发 10/18
规范维护 9/18
有效结果 7/13
证据核验 3/8
查看各维度的扣分理由
信任安全10 / 29 · 1.7/5

README 描述了事件溯源、outbox、可回放等机制,但未给出权限模型、最小权限配置、用户确认流程、数据流透明性说明或敏感数据处理策略;SECURITY.md 仅提供漏洞上报邮箱,无安全设计细节。依赖清单(go.mod)包含大量第三方库但无漏洞扫描或锁定策略证据。回滚能力仅以事件回放间接暗示,无显式回滚流程。发布者身份未验证,来源归属仅靠 LICENSE 中的版权声明。整体信任相关证据薄弱,故各项均给低分。

可靠稳定6 / 14 · 2.1/5

README 对架构、状态、API 端点描述较一致,且与 go.mod 中的依赖(embedded-postgres、nats-server、echo 等)吻合,自洽性尚可。但依赖可用性仅靠 go.mod 声明,无版本锁定或供应链验证;失败消息方面,测试文件显示错误会抛出(如 ValueError),但无面向用户的错误信息设计证据。故自洽性给 2,其余给 1。

适用触发10 / 18 · 2.8/5

README 明确面向自托管企业用户,提供 dev 模式、单二进制、Python/Go SDK,场景覆盖较清晰;‘Status’ 节列出已实现与进行中功能,边界较明确。但触发精度(如 CLI 命令、API 触发条件)缺乏详细说明,环境适配仅提及嵌入式 Postgres/NATS 与生产外部依赖,无具体环境矩阵。故受众与场景、能力边界、环境适配给 2,触发精度给 1。

规范维护9 / 18 · 2.5/5

README 信息架构清晰(安装、运行、架构、API、状态、贡献),安装说明具体(brew、curl、go install)。但命名稳定性无版本化证据,示例与 FAQ 仅指向 examples/ 目录而无内容,已知限制在 Status 节有列出,许可证完整(Apache-2.0),版本变更日志缺失,维护责任仅指向 GitHub Issues/Discussions 且发布者未验证。故许可证给 3,信息架构、安装说明、已知限制给 2,其余给 1 或 0。

有效结果7 / 13 · 2.7/5

输出可用性方面,README 提供可运行的快速开始和 API 端点,但无实际输出示例或结果展示;边际价值在于事件溯源与可回放对 AI 工作流的差异化,但缺乏与替代方案的量化对比;成本效益无资源消耗、性能或运维成本数据。故输出可用性与边际价值给 2,成本效益给 1。

证据核验3 / 8 · 1.9/5

README 中的声明(如崩溃安全、可回放)无对应测试或代码引用可追溯;测试文件仅覆盖 Python SDK 的异步执行和 CLI,未验证核心引擎声明;跨源佐证有限,go.mod 与 README 依赖描述一致但不足以验证功能。事实与推断分离方面,README 混合了事实描述与营销性推断(如‘Temporal for AI agents’),未明确区分。故各项均给 1。

风险与缓解建议
  • 发布者身份未经验证,维护责任与更新路径不明确,企业采用前需自行评估供应链风险。
  • README 中的崩溃安全、可回放等核心声明缺乏可追溯的测试或代码证据,静态审查无法验证。
  • 依赖清单包含大量第三方库,无漏洞扫描或锁定策略证据,存在供应链安全隐患。
  • 缺少版本变更日志和命名稳定性说明,升级与兼容性风险未知。
  • 安全策略仅提供漏洞上报邮箱,无权限模型、数据流透明性或敏感数据处理细节。
证据充分度: 评估于 2026年9月17日 审查版本 09a18ab59923
查看完整评分方法 →

常见问题

开发模式真的不需要任何外部基础设施吗?
是。DuraGraph 以单个二进制分发,内嵌 PostgreSQL 与 NATS,执行 duragraph dev 后引擎与 dashboard 一同监听 http://localhost:8081,无需 docker compose 或额外 provisioning;生产环境则改用外部 PostgreSQL 与 NATS。
worker 崩溃或工具调用失败时会发生什么?
状态迁移与工作本身在同一事务写入 PostgreSQL,事件已持久化。重启后引擎从最后一个已提交状态恢复,按 README 的说法不会重复执行,也不会丢失已有工作。
如何在 dashboard 之外的系统里观察执行过程?
可以通过 SSE 订阅 GET /api/v1/threads/:id/runs/:run_id/stream 获取实时执行事件,或轮询 GET /api/v1/runs/:id 取运行状态;事件还会经 outbox relay 转发到 NATS JetStream。按节点的 REST spans 端点尚未提供。
支持哪些 LLM 供应商?
README 与仓库说明中未列出任何模型供应商适配层或受支持的模型清单,因此无法从现有材料判断模型侧的兼容范围,接入前需要自行核实。
可以用在多人或多租户环境中吗?
目前不行。multi-tenant 与 NATS Accounts 隔离仍列在 in flight 清单中,尚未完成;dashboard 登录使用启动日志中打印的 bootstrap admin 凭据。
在 GitHub 查看 ↗ 安装 ↓

相关 Agents