Agent Skill工程:如何把一次成功运行提炼成可测试的方法

Agent Skill 工程:如何把一次成功运行提炼成可测试的方法

Agent 完成一次任务后,最容易做错的事,就是立刻加个 cron。

一次成功可能依赖操作者临时补的数据、模型偶然选中的路径,或者人工在最后一步修掉的问题。把整段对话复制到定时任务里,只是在自动重放偶然性。

SpaceXAI 的 Grok Bot 文档给出了更稳妥的顺序:先完成一次任务,让方法可靠,保存为 Skill,测试,再创建 Routine。对开发团队而言,这可以直接翻译成一套 Skill 工程流程。

Trace 不是 Skill

一次 Agent 运行可以表示为:

ts 复制代码
type RunTrace = {
  inputs: InputSnapshot[];
  actions: ToolCall[];
  decisions: DecisionRecord[];
  outputs: Artifact[];
  validations: CheckResult[];
  interventions: HumanIntervention[];
};

Trace 是事实记录,包含成功路径、试错和人工补洞。Skill 是从多条事实中抽出的规范:哪些条件必须满足、哪些动作可以执行、什么结果算完成、遇到什么情况必须停。

ts 复制代码
type SkillSpec<I, O> = {
  id: string;
  version: string;
  applicableWhen: (ctx: Context) => boolean;
  inputSchema: Schema<I>;
  execute: (input: I, env: Env) => Promise<O>;
  validate: (output: O, evidence: Evidence[]) => CheckResult[];
  approvalPolicy: ApprovalPolicy;
  failurePolicy: FailurePolicy;
};

如果一个"Skill"只有 execute,没有 schema、validate 和 failurePolicy,它仍然只是脚本化提示词。

五步提炼流程

1. 先标注人工介入

人工改过筛选条件、补过文件、替换过错误来源,就把它们标成 intervention。未被解释的人工动作不能直接删除,否则生产运行会缺少关键步骤。

2. 把判断改写成规则

例如:

ts 复制代码
if (report.generatedAt < cutoff.minus({ hours: 24 })) {
  return fail("STALE_INPUT");
}

无法写成确定规则的判断,保留为审批点:让 Agent 给出证据、建议和影响,由人选择,而不是让模型偷偷替代业务决策。

3. 冻结输入契约

输入契约至少包括来源、字段、作用域、新鲜度和权限。长期记忆可以保存偏好,却不能替代会变化的业务事实。重要决定必须重新读取当前源系统。

4. 定义输出与证据

输出不应只有一段自然语言。建议同时返回结构化结果和证据引用:

ts 复制代码
type SkillResult<T> = {
  data: T;
  evidence: Array<{ source: string; observedAt: string }>;
  checks: CheckResult[];
  status: "complete" | "partial" | "blocked";
};

5. 先测失败,再接调度

至少覆盖:缺数据、旧数据、字段变更、权限不足、工具超时和重复触发。故障测试通过后,Routine 才负责按时间或事件启动 Skill。

回放测试不要只比较文本

生成式输出不适合做逐字快照。更稳的方式是检查不变量:

ts 复制代码
expect(result.evidence.length).toBeGreaterThan(0);
expect(result.checks.every(x => x.passed)).toBe(true);
expect(result.status).not.toBe("complete")
  .when(sourceIsMissing);

文本可以变化,但来源不能丢、必填字段不能少、缺数据时不能假装完成、高影响动作不能越过审批边界。

版本与 Routine 绑定

Routine 应固定 Skill 的明确版本:

ts 复制代码
const routine = {
  schedule: "0 8 * * 1-5",
  skill: "account-health@2.1.0",
  onMissingSource: "stop",
};

输出格式或审批语义发生破坏性变化时升主版本,并重新跑回放与故障用例。网站、连接器和数据格式变化,也应触发重新验证,不能让旧 Routine 静默继续。

一份上线前检查表

  • 输入是否来自当前权威源,并带采样时间?
  • 关键分支是否有可解释规则?
  • 输出是否有 schema 和证据?
  • 缺失、过期与权限不足是否会停止?
  • 发送、发布、删除、购买等动作是否需要审批?
  • Routine 是否固定了已验证的 Skill 版本?

Agent 的能力不会因为定时运行而自动变可靠。把成功轨迹压缩为 Skill,把 Skill 变成可回放、可验证、可版本化的契约,才是从 Demo 走向团队工程的关键一步。

Tipkay 会按岗位组合经验、流程、模型和工具;团队仍应把自己的输入契约、验证规则和关键操作确认加入每个具体流程。

相关推荐
AI前端工程狮2 小时前
服务端已经死了,客户端却报"超时"
人工智能·程序员
阿屿2 小时前
从零手搓 AI 伴侣(二):好感度通胀危机,与它的「货币政策」
java·人工智能
师夷长技以自愈3 小时前
第 2 篇:AI 点菜,程序端菜——第一次学会"工具调用"
人工智能
数据集_深度学习3 小时前
果园红绿苹果目标检测数据集介绍和论文参考
人工智能·目标检测
武子康3 小时前
H3-World 的 11.3 小时训练数据,是怎样对齐成动作监督的?
大数据·人工智能·深度学习
泯泷3 小时前
大模型会吃掉 Harness 吗?Agent 天空上的“两朵乌云”
人工智能·llm·agent
吴名氏.3 小时前
Java转AI Agent教程(第十二周)检索与切分
java·开发语言·人工智能·ai·ai agent
LightBreeze20023 小时前
深入理解 Leaf-Spine:从网络拓扑到 AI 数据中心 Fabric
人工智能·fabric·spine·叶脊网络
Elastic 中国社区官方博客4 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
程序员cxuan4 小时前
再见了 Typora
人工智能·后端·程序员