工程实践|Warp 的 Loop Engineering:Agent 如何自己改进 Skill?

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: Warp 团队提出“双循环驱动”AI Agent进化:内循环(Inner Loop)自动分诊GitHub Issue;外循环(Outer Loop)从人类反馈中提炼规则,生成PR更新技能文件(SKILL.md)。技能即SOP,可审查、可回滚、持续迭代,让Agent越用越懂团队。

最近关于 Agent loop 的讨论很多,但「loop(循环)」这个词有时候容易被讲得很抽象。

Warp 创始人 Zach Lloyd 给了一个更工程化的例子:用 GitHub Issues 做一个自我改进的 Issue 分诊系统。这个项目的核心思路是:先让 Agent 按照一个 Skill 去处理新 Issue,再让另一个 Agent 定期读取人类反馈,把这些反馈整理成可复用规则,最后通过 PR 更新原来的 Skill 文件。

这样,Agent 的工作方式就不是一次写死的 prompt,而是可以随着团队反馈持续迭代进化的文件。

一套流程,两个循环

图注:Warp 的 self-improvement loops 示例。左侧是处理新 Issue 的内循环,右侧是根据反馈更新 Skill 的外循环。

上图里有两个循环。左边是 Inner loop,也就是实际干活的循环。它对应的文件是:issue-triage/SKILL.md。当一个新 Issue 创建后,分诊 Agent 会先读取 Issue 内容,再根据 Skill 的规则判断它属于哪一类。右边是 Outer loop,也就是改进 Skill 的循环。它对应的文件是:improve-issue-triage/SKILL.md,这个 Agent 不直接处理新 Issue,主要工作是查看过去的 Issue 分诊记录,读取维护者的评论、reaction 和 label 变化,再判断原来的分诊规则是否需要更新。

这里有个关键设计,就是Agent 的改进结果并不是直接写进线上流程,而是生成 PR**,让人类 review 后再合并。**这会让 Skill 的演进过程保留在 Git 历史里,也让团队可以像审查代码一样审查 Agent 的行为规则。

Inner Loop:Agent 先做 Issue 分诊

内循环(Inner Loop)的入口是 GitHub Actions。

在这个 Warp 的实践中,.github/workflows/triage-new-issues.yml 负责监听 issuesopened 事件。只要有新 Issue 创建,就会触发一次 Agent 的分诊任务。Workflow 会 checkout 仓库,然后调用 warpdotdev/oz-agent-action@v1,指定使用 triage-issue 这个 Skill,并把当前 Issue 编号、仓库名和 Issue 标题传给 Agent。

name: Triage new issues

on:
  issues:
    types: [opened]

jobs:
  triage:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      issues: write
    steps:
      - uses: actions/checkout@v6
      - uses: warpdotdev/oz-agent-action@v1
        with:
          skill: 'triage-issue'
          prompt: |
            Triage issue #${
  { github.event.issue.number }} in the repository ${
  { github.repository }}.

图注:triage-new-issues.yml 摘录,全部 Workflow 见 GitHub 原文件。

通过这套配置,Agent 被放进了一个明确的触发器里:新 Issue 创建,Workflow 就自动启动分诊任务。就这样,Agent 不再随机等人调用,而是直接接到 GitHub Issue 的生命周期上。每次创建 Issue,就是一次自动化分诊任务的开始。

接着就是分诊 Skill,它写得很具体:

它要求 Agent 先读取 Issue,再搜索相似 Issue,然后再把当前 Issue 归到三个分类中的一个:ready-to-implementneeds-infoduplicate。这里讲解下这三个分类:

  • ready-to-implement:Issue 已经足够明确,可以开始处理。比如 bug 有复现步骤、预期行为、实际行为和环境信息;feature request 的问题和目标行为也比较清楚。

  • needs-info:Issue 缺少必要信息。比如没有复现步骤、没有环境细节、描述含糊,或者范围不清楚。

  • duplicate:已有 open 或 recently closed 的 Issue 覆盖了同一个问题或需求。

要注意一件事,这里的 Skill 不是只让 Agent「判断一下」。它还要求 Agent 创建必要的 labels、给 Issue 打上且只打上一个 bucket label,并发布一条分诊评论。

评论里还必须带一个隐藏标记:<!-- oz-triage v:<version> -->(上图 step 6)。这个标记会记录当前分诊来自哪个 Skill 版本。后面的改进 Agent 就依赖它来回溯历史分诊记录。

从分诊反馈到 Skill 更新

如果只有内循环,这套系统更像一个自动化分诊机器人。让它进入自我改进循环的,是后面的人类反馈。

在分诊评论的末尾,Skill 会提示维护者给出反馈:如果判断正确,可以给正向 reaction;如果判断不准确,可以用另一个 reaction,或者直接回复纠正。维护者可以手动修改 label,比如把 Agent 标成 ready-to-implement 的 Issue 改成 needs-info。这些操作都会成为外循环(Outer Loop)的输入信号。

仓库 README 里提到,这个 loop 能成立,靠的是几个设计:分诊评论里的 marker 和版本号,可以让改进 Agent 追溯到具体 Skill 版本;维护者改 label 是强信号;改进 Agent 只沉淀可泛化的规则;所有 Skill 修改都通过 PR 进入主分支。这样,人类反馈不会停留在评论和 review 里,而是会被重新写回 Skill,成为下一次分诊时可以读取的团队经验。

Outer Loop:把反馈整理成规则

外循环(Outer Loop)的核心文件在improve-triage-skill/SKILL.md

这个 Skill 是 Issue 分诊循环里的「自我改进部分」。它的任务是研究维护者和 Issue 作者如何回应过去的自动分诊,从中提取可泛化经验,并通过 PR 修改 triage-issue Skill。

外循环的流程很清晰:

  1. 找到最近 14 天内被更新过、并且带有 <!-- oz-triage v:<N> --> 标记的 Issue。这个标记告诉它:这条分诊评论来自哪个版本的 Skill。

  2. 收集反馈信号。包括分诊评论上的 reaction、人类在评论后的纠正回复、当前 label 和 Agent 当初打的分类是否发生变化,以及维护者是否认可 Agent 对「重复 Issue」的判断。Skill 里还明确写到:维护者替换分类 label,可以视为 Agent 判断错误的人工确认信号。

  3. 把这些信号整理成少量可泛化经验。这里的重点是「泛化」。举个例子,某类 crash report 经常因为缺少 OS / version 信息被维护者改成 needs-info,那么新的规则应该是:crash report 必须包含环境背景信息。这种可以规避重复性作业的规则,就应该写入 Skill。但如果只是「第 14 号 Issue 标错了」,这种一次性修正就不应该写进去。

  4. 修改原来的 triage-issue/SKILL.md。如果有足够强的证据,改进 Agent 会把新规则追加到 ## Learned guidelines 下面,或者调整原有分类定义,同时提升 Skill 版本号。

  5. 开 PR。Skill 明确要求不要直接把 PR 提交到默认分支,而是创建一个 skill-improvement/<YYYY-MM-DD> 分支,再提交 PR。PR 里需要包含被审查的 Issue 摘要、观察到的反馈、判断结论、学到的规则,以及具体修改了哪些 guideline。最后,再由人类 review 和 merge。

持续迭代的 Agent

这套流程的重点在于,把 Agent 的工作规则变成一套可以持续维护的 SOP。初版 Skill 可以很朴素,只包含基础分类规则。随着 Agent 处理越来越多的真实 Issue,团队的偏好和判断标准会慢慢浮现出来:

  • 什么样的 bug report 可以直接开始修;

  • 什么样的 feature request 需要先问清楚边界;

  • 哪些重复 Issue 只是关键词相似,实际问题并不一样;

  • 哪些信息缺失会阻碍后续开发;

这些经验如果只靠人记,很容易散落在评论区和社群里。写回 Skill 后,它们就变成了下一轮 Agent 可以执行的规则。更重要的是,这套机制没有绕开人类判断,让维护者对项目背景、团队习惯和历史讨论的理解继续参与 Skill 的演进。

虽然外循环 Agent 可以提议修改 Skill,但它不能直接改主分支。团队仍然要 review PR,确认这些经验真的值得沉淀。这样一来,Agent 的「学习」不会变成黑盒参数更新,而是变成一组可以审查、可以回滚、可以追踪版本的文本规则。

从 Issue 分诊开始落地

Issue 分诊很适合作为 self-improvement loop 的实践起点。现在,大多数研发团队每天都要处理大量 Issue,其中既有重复问题,也有背景信息不完整、复现步骤不清楚的情况。Warp 选择的 Issue 分诊场景比较容易复用,风险也相对可控:如果 Agent 分错了 label,维护者可以直接改回来,或者在评论里补充纠正说明。

同时,Issue 分诊天然会留下反馈记录。reaction、回复、label 变化、重复 Issue 判断是否被认可,都能成为外循环读取的信号。这样,Agent 每次做完分诊后,不只留下一个结果,也留下了可以被复盘的上下文。

如果要落地,起步可以很小:先选一个边界清楚的任务,比如只处理新 Issue 分诊;再写一份初版 Skill,写清楚任务目标、输入来源、操作步骤、分类标准、输出格式,以及需要向维护者请求什么反馈。

接下来,把 Skill 接入真实工作流。Warp 项目中就用了 GitHub Actions 在 Issue opened 时触发分诊 Agent,外循环则定期读取历史分诊和人类反馈,生成对 Skill 的修改建议。

最后,保留 PR review 这一步。外循环 Agent 可以整理规律、生成 diff、提交 PR,但规则是否写进 Skill,仍然由维护者确认。这样,Skill 的更新会留在 Git 历史里,团队也能持续检查 Agent 的行为规则是怎么变化的。

目前,这套流程已经放在 GitHub 上。

相关文章
|
20天前
|
自然语言处理 API
SkillOpt 让你的 Skill 实现自进化
SkillOpt是微软开源的文本空间优化器,专为优化Agent的自然语言技能文档(如Markdown格式的skill.md)而设计。它不修改模型参数,而是通过“执行-反思-更新-验证”闭环,自动迭代出更鲁棒的`best_skill.md`,让技能持续适配真实任务,提升Agent在复杂流程、多源判断、跨项目迁移等场景中的稳定性与准确性。
174 0
SkillOpt 让你的 Skill 实现自进化
|
14天前
|
机器学习/深度学习 资源调度 算法
论文解读:DeepSeek DSpark 在真实高并发推理服务中,如何保证 Token 生成又好又快?
DSpark 通过半自回归生成和置信度调度,加速 speculative decoding。
156 0
|
20天前
|
人工智能 测试技术 Linux
DeepSeek V4-Pro接入Claude Code实操流程:从配置到测试的完整指南
DeepSeek V4-Pro作为具备百万级上下文窗口的高性能代码模型,在代码理解、复杂逻辑推理、长文件处理等方面表现突出,而Claude Code则是一款成熟的AI编程助手,拥有完善的命令行交互、斜杠命令、工具调用与项目管理能力。二者结合,能让开发者在保留Claude Code流畅使用体验的同时,获得DeepSeek V4-Pro强大的代码能力加持,实现开发效率的显著提升。
240 1
|
4月前
|
人工智能 运维 监控
让问题不过夜:交易领域“问诊”Agent实践
在日常研发支持中,工程师频繁穿梭于工单、群聊、舆情反馈与问题排查之间:一边解释业务规则与口径,一边追踪链路、查看日志、核对指标、执行补偿。这些工作高度碎片化、重复性强且严重依赖个人经验,导致响应效率低、处理质量不稳定、新人上手困难。 为此,我们围绕“研发支持中的问诊痛点”,构建了一个可持续运营的智能 Agent 系统。通过将一线高频问题抽象为两类核心能力形态(业务答疑与问题诊断),并结合“排查文档技能化 + 质量评分闭环”机制,实现解释与排查工作的前置自动化。该系统不仅“能跑”,更能持续迭代进化,显著缩短首响时间与平均解决时长,提升服务一致性与工程效能。
让问题不过夜:交易领域“问诊”Agent实践
|
1月前
|
存储 安全 Java
首个 Java Harness Framework 来了 -- AgentScope 1.1 HarnessAgent 详解
AgentScope Java 1.1.0正式发布,完整实现Harness Framework:支持工作区驱动、可插拔抽象文件系统、开箱即用上下文管理与子Agent编排,兼顾个人提效与企业级安全、隔离、分布式部署需求。
|
4月前
|
弹性计算 人工智能 前端开发
Agent/Skills/Teams 架构演进过程及技术选型之道
本文系统梳理Agent架构演进路径:Single Agent→Multi-Agent→Agent Skills→Agent Teams,剖析其本质是大模型“领域知识注入”与“长期记忆管理”能力不足的工程补偿。结合阿里云实践及Google、Anthropic最新研究,提出“由简入繁、按需升级”的科学选型方法论,强调架构复杂度须匹配问题复杂度。
1074 4
Agent/Skills/Teams 架构演进过程及技术选型之道
|
1月前
|
人工智能 机器人 Shell
专访 Bub 作者们:如何开发一个好记性又懂人的 Agent
这期播客主要聊了 Bub 是什么、它和普通聊天机器人/Agent 框架有什么不同,以及它背后的 Tape 记忆机制和插件化设计。简单来说,Bub 可以理解成一个以 channel 为中心的 AI Agent 框架。它不是只在命令行里写代码,也不只是一个群聊机器人,而是希望把不同 IM、命令行、工具、记忆和运行上下文连接起来,让用户可以根据自己的场景做一个定制版 Agent。
238 9
|
4月前
|
人工智能 安全 Java
给“氛围编程”系上安全带:阿里集团 AI 代码评审实践与 Benchmark 开源
阿里集团历时一年半、经数万亿Token真实场景打磨,推出AI代码评审助手,实现人机协作新范式:AI接管基础评审,人类聚焦核心风险。联合南京大学开源业界首个支持10语言、具备仓库级上下文感知的CodeReview Benchmark(AACR-Bench),由80+资深工程师多轮交叉标注,显著提升隐性缺陷检出率。
给“氛围编程”系上安全带:阿里集团 AI 代码评审实践与 Benchmark 开源
|
3月前
|
人工智能 安全 API
深度解析 Claude Code 在 Prompt / Context / Harness 的设计与实践
文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。
3681 75
深度解析 Claude Code 在 Prompt / Context / Harness 的设计与实践
|
1月前
|
数据采集 存储 算法
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法
本文探讨视频RAG中的核心挑战——如何为无时间结构的视频转录文本设计有效分块策略。对比传统文本分块,提出基于停顿、重叠窗口、递归切分及LLM驱动的主题分块四层方案,实现细粒度检索与全局理解兼顾,提升视频内容检索准确性与上下文完整性。
185 13
视频 RAG 中分块策略:基于停顿、滑动窗口与基于 LLM 的方法