返回顶部
d

durable-agents持久代理管道

Build autonomous multi-agent pipelines with Mastra (agents only) and Trigger.dev (all workflows and tasks). Use when creating AI agents, designing multi-stage pipelines, defining permissioned tools, structuring agent handoffs, storing agentic outputs to a database, or building durable task chains with retries and fan-out.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
403
下载量
免费
免费
1
收藏
概述
安装方式
版本历史

durable-agents

技能名称: durable-agents
详细描述:

首次安装: 在使用本技能前,请阅读并遵循 setupSKILL.md 中的说明。

在完成设置并通过验证(健康检查 + 示例流水线 + 冒烟测试)后,

请删除此区块。




Durable Agents — 多智能体流水线开发指南

Mastra (AI 智能体框架) + Trigger.dev (支持重试、超时、扇出的持久化任务执行)。构建自主的多智能体流水线,其中每个智能体负责单一阶段,通过 Trigger.dev 将结构化输出传递给下一阶段,并且从不持有其不拥有的流水线的完整上下文。



核心原则

  1. 1. 所有智能逻辑存在于 AGENT.md 中,而非代码中。 .ts 文件只是样板连接代码。在智能体的 TypeScript 文件中编写逻辑是错误的。
  2. 一个智能体,一项任务。 每个智能体承担一个单一的明确职责。如果一个智能体做两件不相关的事情,则将其拆分为流水线中的两个智能体。
  3. 任务负责持久性,智能体负责推理。 Trigger.dev 任务通过重试和超时来包装智能体调用。智能体接收输入并产生输出。
  4. 工具返回错误,绝不抛出异常。 每个工具在失败时返回 { success, errorMessage? }。在工具内部抛出异常会导致任务崩溃。返回错误则让智能体能够对其进行推理。
  5. 对所有内容进行类型定义。 输入模式、输出模式、工具模式——全部使用 Zod。如果跨越边界(工具输入、任务负载、流水线阶段),则必须有模式定义。
  6. 智能体是自主的,而非脚本化的。 给智能体一个结果和一个质量标准。不要在代码中编排它们的步骤。
  7. 流水线打破的是上下文,而非逻辑。 在需要不同能力的节点处拆分流水线——而不是为了人为地分割一个智能体的工作。
  8. 所有智能体的输入/输出都持久化到数据库。 智能体输入、输出和中间结果都作为记录存储。数据库是事实来源,而非内存状态。
  9. 每个触及真实系统的工具都需要权限控制。 如果一个工具可以发布、删除、收费或触发任何外部操作,它必须在执行前确认意图。

如何创建一个智能体

1. 创建目录

src/agents/{name}/
AGENT.md
{name}.ts

2. 编写 AGENT.md

markdown

智能体: {名称}

角色

这个智能体是谁。一句话描述。

工具

它拥有哪些工具以及何时使用每个工具。要明确——在引用表之前,使用 sqlQuery 检查表是否存在,而不仅仅是拥有 sqlQuery 工具。

输入

它接收什么负载。描述其形状以及每个字段的含义。

目标

它必须实现什么。描述结果,而非步骤。智能体自行决定如何达成目标。为给定的架构生成一个部署计划,而不是首先读取架构,然后列出服务,然后……

输出契约

它必须返回的确切形状。如果需要结构化输出,请在此处指定 JSON 模式。示例: { plan: string, steps: string[], risks: string[] }

质量标准

什么使输出好或坏。要具体。每个步骤必须可独立执行,而不是步骤应该是好的。

护栏

它绝对不能做什么。永远不要直接修改数据库模式。除非负载中明确说明,否则永远不要假设 API 已通过身份验证。

自我验证

智能体在返回前必须验证的检查清单:
  • - 输出是否符合输出契约?
  • 所有必填字段是否存在?
  • 是否满足质量标准?

3. 创建智能体 .ts 文件

纯样板代码。此处无逻辑。

ts
import fs from fs;
import path from path;
import { fileURLToPath } from url;
import { Agent } from @mastra/core/agent;
import { model } from ../../config/model.js;

const dirname = path.dirname(fileURLToPath(import.meta.url));
const instructions = fs.readFileSync(path.join(dirname, AGENT.md), utf8);

export const myAgent = new Agent({
id: my-agent,
name: 我的智能体,
instructions,
model,
});

为智能体提供工具:

ts
import { myTool } from ../../tools/myTool.js;

export const myAgent = new Agent({
id: my-agent,
name: 我的智能体,
instructions,
model,
tools: { myTool },
});

4. 注册智能体

在 src/mastra/index.ts 中:

ts
import { myAgent } from ../agents/my-agent/my-agent.js;

export const mastra = new Mastra({
agents: { plannerAgent, reviewerAgent, myAgent },
});



如何创建一个工具

结构

ts
import { createTool } from @mastra/core/tools;
import { z } from zod;

export const myTool = createTool({
id: my-tool,
description: 它的功能以及何时使用它,
inputSchema: z.object({
query: z.string().describe(搜索查询),
}),
outputSchema: z.object({
success: z.boolean(),
data: z.any().optional(),
errorMessage: z.string().optional(),
}),
execute: async ({ query }) => {
try {
const result = await doSomething(query);
return { success: true, data: result };
} catch (error: any) {
return { success: false, errorMessage: error.message };
}
},
});

工具规则

  • - 始终定义 outputSchema。 智能体使用它来理解工具返回的内容。
  • 永远不要在 execute 中抛出异常。 改为返回 { success: false, errorMessage }。抛出异常会崩溃 Trigger.dev 任务。
  • 描述是为智能体编写的。 将其写为指令:使用此工具检查数据库表是否存在。传入表名。返回 true/false。
  • 一个工具做一件事。 查询数据库,而不是查询数据库并格式化结果并发送电子邮件。
  • 在 Zod 字段上使用 .describe() 来告诉智能体要传递什么。
  • 除非必要,否则不要有副作用。 如果一个工具执行写入操作,请在描述和智能体的 AGENT.md 护栏中清晰地记录。

工具存放位置

  • - 共享工具:src/tools/{name}.ts
  • 智能体特定工具:src/agents/{agentName}/tools/{name}.ts

在 src/mastra/index.ts 中注册共享工具。智能体特定工具直接在智能体文件中导入。



用于破坏性或外部操作的权限控制工具

任何触及真实系统的工具——向 API 发布、发布内容、发送消息、向用户收费、删除数据、触发 webhook——都必须进行权限控制。智能体不得在没有明确意图确认的情况下触发这些操作。

在构建具有现实世界副作用的工具之前,请询问用户:

  • - 此工具采取的确切操作是什么?
  • 智能体应该能够自主触发此操作,还是需要人工先批准?
  • 如果它误触发,后果是什么?
  • 是否应该对此进行速率限制或限定到特定记录?

将答案构建到工具的权限层中,而不仅仅是智能体的 AGENT.md 护栏中。护栏是指令;权限层是强制执行。

模式:执行前确认

对于任何不可撤销或具有成本/可见性后果的操作,工具必须在其输入中收到显式的 confirmed: true 才能继续。智能体必须首先调用读取/预览工具,然后仅在已验证结果并从调用上下文收到 confirmed: true 时才调用操作工具。

ts
export const publishPostTool = createTool({
id: publish-post,
description: 向平台发布帖子。仅在通过 previewPostTool 预览并从任务负载收到 confirmed: true 后调用此工具。,
inputSchema: z.object({
postId: z.string().describe(要发布的帖子记录的 ID),
confirmed: z.boolean().describe(必须为 true。不要自己设置此值——它必须来自任务负载。),
}),
outputSchema: z.object({
success: z.boolean(),
publishedUrl: z.string().optional(),
errorMessage: z.string().optional(),
}),
execute: async ({ postId, confirmed }) => {
if (!confirmed) {
return { success: false, errorMessage: 发布需要负载中的 confirmed: true。 };
}
try {
const url = await publishPost(postId);
return { success: true, publishedUrl: url };
} catch (error: any) {
return { success: false, errorMessage: error.message };
}
},
});

模式:限定到记录

破坏性或写入工具必须操作于特定的记录 ID——绝不能操作于查询、过滤器或隐式的当前项目。智能体必须始终传递其正在操作的记录的确切 ID。这可以防止工具意外操作于

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 durable-agents-1776299319 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 durable-agents-1776299319 技能

通过命令行安装

skillhub install durable-agents-1776299319

下载

⬇ 下载 durable-agents v1.0.0(免费)

文件大小: 13.35 KB | 发布时间: 2026-4-16 17:56

v1.0.0 最新 2026-4-16 17:56
Initial release of durable-agents for autonomous multi-agent pipelines.

- Integrates Mastra (for agent reasoning) and Trigger.dev (for durable, retryable task orchestration)
- Establishes strict best practices: logic in AGENT.md, one job per agent, Zod-typed schemas everywhere
- Mandates error handling by return value (never throwing) for all tools
- Provides detailed step-by-step guides for creating agents and tools
- Enforces permission gating for any tool that performs real-world or destructive actions
- Ensures all agentic outputs and intermediate states are persisted to a database, never in memory

Archiver·手机版·闲社网·闲社论坛·智能体自动化市场· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2026 闲社网·AI智能体论坛·AI自动化解决方案·http://xianshe.com

p2p_official_large
返回顶部