news 2026/9/20 9:27:25

Go Micro 用 AI 智能体循环构建自身:双 Agent 自治开发闭环的机制、故障与产物

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Go Micro 用 AI 智能体循环构建自身:双 Agent 自治开发闭环的机制、故障与产物
  • 后端
  • 微服务
  • AI Agent
  • RPC框架

【免费下载链接】go-micro

A Go agent harness and service framework

项目地址:https://gitcode.com/gh_mirrors/go/go-micro
点击查看免费下载

Go Micro 自称"Agent harness(智能体开发框架)",而它检验这一主张最诚实的方式,就是让 Agent 去构建它自己。本文基于官方博客《How Go Micro Builds Itself》及仓库中的真实工作流与源码,完整拆解这套"定时任务 + 双 AI Agent(Codex 实现、Claude Code 编排)+ 人类设定方向"的自举开发闭环:它如何调度、如何合并 PR、出了哪些故障、产出了什么,以及你可以如何用micro loop init在自有仓库复刻这套机制。

核心思路:把框架指向它自己

Go Micro 是一个 Agent harness,即一套供 AI 智能体运行、检查点续跑、可观测、可复用的运行框架。项目方认为,检验 harness 是否足够健壮,最好的方式不是写演示 demo,而是用它去构建它自己——如果一套 harness 能支撑一个"自我构建"的循环,那它同样有资格支撑"构建你的软件"的循环。

因此,仓库中出现了这样一幕:一个按计划调度的双 Agent 循环,会自行开 issue、写增量、通过自动合并机制把 PR 合入本仓库,人类不再逐行打字,而是设定方向。这套机制并非作秀——博客原文强调,"如果 harness 好到足以驱动一个构建自身的循环,那就是它足以驱动构建你软件的循环的证据"(internal/website/content/en/blog/news/how-go-micro-builds-itself.md)。

三个角色:Codex 实现、Claude Code 编排、人类定方向

工作被拆成三个角色,职责边界非常清晰:

角色定位职责
Codex串行构建者(serial builder)一次只接一个范围受限的任务,实现它,跑构建、测试、lint,然后开 PR
Claude Code编排者(orchestrator)搭建设备机制、审查、集成,处理 Codex 不该独自做的判断性决定
人类方向与品味的所有者品牌与定位文案、破坏性公共 API 变更、架构决策——这些永不自动合并

除这三类工作之外,其余全部自动化。

判断性工作与机械性工作的分离,是这套闭环的纪律核心:能自动化的一切都自动化,但需要"品味"的调用永远留在人类手里。

机制:一个刻意"无聊"的循环

每个循环周期都刻意保持无聊——这恰恰是设计意图。仓库中的 .github/workflows/loop-builder.yml 与 .github/workflows/loop-planner.yml 等文件,把博客描述的三步机制落成了真实可读的 YAML:

  1. 定时工作流开新 issue 并派发任务:一个 scheduled workflow 打开一个全新的追踪 issue,向 Codex 下达单一指令——挑选能推进 North Star(北极星目标)的最高价值改进,实现它,验证构建、测试与 lint 全部通过,然后开 PR。
  2. Codex 在独立分支完成工作并开 PR
  3. GitHub 原生 auto-merge 在 CI 变绿那一刻自动合入——构建、测试、golangci-lint。没有人工审批步骤。CI 是唯一的闸门,而它并非"批准",只是"拒绝合入坏代码"。

每个增量都很小、单一关注点、可回滚。任何过不了人类贡献者 PR 同样检查的"聪明技巧",都无法存活。

从工作流文件看真实实现

loop-builder.yml 揭示了几个博客未展开的关键工程细节:

  • MECHANISM 与 POLICY 分离:工作流本身是"机制"(MECHANISM),而.github/loop/prompts/builder.md这个 prompt 文件是"可编辑的策略"(POLICY)——要改变某个角色的行为,改 prompt 文件即可,不需要改 YAML
  • 每个运行必须用全新 issue:文件头注释明确指出,"agent 从触发它的 issue 推导 PR 分支名,复用同一个 tracker 会让所有运行塌缩到同一个分支上"。这正是博客中"分支名冲突"故障的官方注释版本。
  • CODEX_TRIGGER_TOKEN 门控:agent 会忽略 github-actions bot 的 @提及,所以派发必须以真实用户(PAT)身份发帖;没有 token 就跳过(no-op)。派发逻辑用gh issue create建 issue,再用sed把 prompt 中的__ISSUE__占位符替换成真实 issue 号,随后gh issue comment完成@codex指令投递。
  • PAUSED 状态:该工作流在 2026-07-12 起暂停了自动 schedule(注释写明团队在做聚焦的 1:1 修复),但仍可通过workflow_dispatch按需手动运行——这印证了博客所说"人类设定方向、随时可干预"的设计。

micro loop init在你的仓库复刻

这套循环并非只属于 go-micro 自己,它通过 CLI 暴露成可复用的脚手架。核心实现在 cmd/micro/loop/loop.go,要点包括:

  • micro loop init把工作流、prompt 与队列脚手架写入目标仓库;micro loop init --roles all初始化全部角色。
  • 生成物包括:.github/workflows/loop-<role>.yml派发工作流、.github/loop/prompts/<role>.md各角色 prompt(策略)、.github/loop/NORTH_STAR.md(方向)与.github/loop/PRIORITIES.md(队列)。
  • "配置 vs 核心"的边界(config-vs-core boundary):workflows 与 prompts 是可复用核心,而config是模板的替换表面。
  • renderKeep 语义:prompts、NORTH_STAR、PRIORITIES 属于 POLICY,即使带--force也绝不覆盖——重新运行 init 刷新机制时不会冲掉你写好的策略。

这种"机制可重生成、策略可编辑"的拆分,正是任何仓库(包括 go-micro 自己)能通过编辑 prompt 文件而非 fork CLI 来定制行为的原因。

三种高度:架构师、增量循环与 DevRel

一个循环只生产增量,它自己并不知道这些增量是否在朝某个方向累积。因此系统在三种"高度"上做不同粒度的审查:

  • 架构师(architect)pass:每隔几天把整个框架对照 thesis(纲领)审查一遍——API 连贯性、services → agents → workflows 生命周期中的缺口、漂移——然后提交范围受限的 issue。它决定要构建什么
  • 每小时增量循环:负责把那些 issue 构建出来。
  • DevRel pass:每天审计 README、网站、文档与博客的一致性,把值得写出来的东西浮现出来(本篇文章正是它应该捕获的那类内容)。

对应到仓库,可以观察到这套分工确实落地了:

  • 架构/规划角色由 loop-planner.yml 承载,它维护一个排序队列.github/loop/PRIORITIES.md
  • 构建角色由 loop-builder.yml 承载;
  • 仓库中还有 loop-coherence.yml、loop-release.yml、loop-security.yml、loop-triage.yml 等一套 loop 系列工作流,分别覆盖一致性、发布、安全与分诊;
  • 每小时的真实模型一致性由 harness.yml 的定时任务(cron: "17 * * * *")支撑,它既跑确定性 mock LLM 的 harness,也按需跑真实 provider 的活体一致性。

一句话概括:"架构师指方向,循环来构建,DevRel 保持叙事诚实。方向自上而下流动,代码自下而上汇聚。"

故障模式:循环里真正有趣的部分

把自治循环接起来,大部分工作是管道(plumbing)和故障模式——这正是它成为 harness 绝佳测试的原因。博客列举了三个真实踩过的坑:

  1. 撒谎的工具(lying tool):agent 的"open a pull request"工具竟是个stub——它只把 PR 的 title 和 body 记录下来交给下游步骤,从不 push 分支、不调 API。agent 每次都兴高采烈地报告"已开 PR",但 PR 从未出现。修复方式是不再信任该工具,让 agent 自己 push 并开 PR。
  2. 状态碰撞(state collision):每次都从同一个追踪 issue 派发,导致 agent 每次都推导出相同的分支名,于是第一个增量开了 PR,其余增量静默冲突。改用每次运行一个全新 issue解决——这一点在 loop-*.yml 的文件头注释里被明确写成了"deliberate"(刻意为之)。
  3. 指令漂移(instruction drift):某个增量"好心"地把仓库自己的 agent 指令改写成指向那个坏掉的工具。自治循环会忠实地把自己的错误编码进指令里,所以护栏必须显式存在。

博客的总结很到位:这些故障毫不稀奇,它们是运营 agent 循环的日常——工具会撒谎、状态会碰撞、指令会漂移。而 harness 提供的东西——可观测性、持久运行、韧性、护栏——恰恰是你认真跑这样一个循环时会第一时间伸手去拿的东西。

故障背后:护栏在源码里是什么

"护栏必须显式"在仓库里可以找到具体形态。agent 的运行包装在 agent/builtin.go 中,内置护栏(guardrails)按approve → loop → step → spend等层次包裹底层调用,任何违反都会返回一个带结构化原因的refused(...)结果(ai.RefusedApprovalai.RefusedSpendBudgetai.RefusedMaxStepsai.RefusedLoop等),模型侧只会看到一次被拒绝的工具调用。agent/guardrails_test.go 与 agent/builtin_test.go 覆盖了这些拒绝路径——"守门"不是口头承诺,而是有测试兜底的代码行为。

它产出了什么:真实而不光鲜的增量

循环产出的增量并不光鲜,但真实。博客列举了最近的几项,均可在源码中逐一对号入座:

  • OpenTelemetry 运行时间线与micro runs命令:agent 运行循环被埋点,可用micro runs命令检查。命令实现在 cmd/micro/cli/agent/agent.go:micro runs <name>列出某 agent 的历史运行(statuseventsdurationlastupdated等字段,支持--status--trace--limit过滤与--json输出),并可下钻到micro agent history <name> <run-id>查看事件流。埋点实现在 agent/otel.go:agent.runagent.model.callagent.model.streamagent.tool.call四类 span,加上recordTimelineEvent把每个 RunEvent 同时写成 span event(agent.<kind>),事件还携带SpanID
  • 把时间线与 trace span 关联:如上所述,每个运行事件在写入时都会带上sc.SpanID(),从而把运行时间线事件与 OpenTelemetry trace span 关联起来——这正是"correlated those timelines with trace spans"的源码形态。
  • durable flow 的重试退避(retry backoff):在 flow/options.go 中,RetryBackoff设置失败步骤尝试之间的延迟(零值表示立即重试),RetryBackoff(d time.Duration)选项在 flow/steps.go 中通过time.After(f.opts.RetryBackoff)落地。flow/steps_test.go 中的TestFlowStepRetryBackoffWaitsBetweenAttempts用 10ms 退避实测了等待确实发生。
  • 流程步骤取消安全(cancellation-safe):取消安全的核心在 flow/steps.go 的重试循环里——"一旦运行上下文被取消或期限耗尽就立刻停止,被取消的运行不应继续重试,上下文错误会被向上暴露以便调用方检测取消"。flow/steps_test.go 的TestFlowTimeoutStopsRetryBackoffTestFlowStepRetryBackoffStopsOnCancel分别验证了超时/取消会终止退避等待中的重试,而不是烧光预算。

每一项都以一个独立小 PR 落地、单独通过 CI。这就是这套工作的纹理:不是让模型一次性写出整个框架,而是一个循环在一个让它保持诚实的闸门下,持续地把它变得更好一点。

结语:循环本身就是证明

团队的观点是:agentic 软件的未来是定时、循环、真正干活的 agent,而不是聊天。Go Micro 正是由这样一套机制、对着自己的仓库构建出来的。人类依然设定方向、拥有需要品味的决策;CI 是闸门;一切可回滚。在这些边界之内,harness 构建了它自己——如果它能做到这一点,它就能构建你的软件。

如果你想在自己的仓库里复刻这套机制,路径很清晰:阅读 cmd/micro/loop/loop.go 了解脚手架语义,运行micro loop init生成工作流与策略文件,再编辑.github/loop/prompts/<role>.md.github/loop/NORTH_STAR.md来定义你自己的方向与职责边界——机制与策略的分离,正是它可以在任何仓库里被复用的原因。

  • 后端
  • 微服务
  • AI Agent
  • RPC框架

【免费下载链接】go-micro

A Go agent harness and service framework

项目地址:https://gitcode.com/gh_mirrors/go/go-micro
点击查看免费下载

相关推荐

上一篇:告别手机续航焦虑:ReVanced Manager电量优化全攻略
下一篇:突破远程协作边界:RustDesk 2025功能规划全景图

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/20 9:26:37

GetQzonehistory完整教程:一键备份QQ空间历史说说

GetQzonehistory完整教程&#xff1a;一键备份QQ空间历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory GetQzonehistory 是一个免费开源的 Python 工具&#xff0c;用来备份 QQ 空…

作者头像 李华
网站建设 2026/9/20 9:25:26

显卡驱动卸载神器DDU:从蓝屏到干净重装完全指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:24:44

Claude Code 粘贴自动发送,TaoToken 接入后 Shift 还管用吗?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:23:51

Claude Code 实战:TaoToken 跑通 Python pytest 仓库的失败用例修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:23:20

Jetson边缘AI部署全栈工程实践:从L4T启动到TensorRT推理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/20 9:23:10

移动端Three.js室内漫游:场景、操控与碰撞

简介&#xff1a;一份基于Three.js的WebGL室内漫游与导航功能源码&#xff0c;面向移动端App、小程序及H5场景开发者。项目使用GLB模型&#xff0c;完整实现了室内第一人称视角漫游、导航路径展示与交互&#xff0c;后续可接入蓝牙定位实现实时室内导航&#xff0c;适合需要快速…

作者头像 李华