若无底层 Git,你会如何捕获两个即将执行不兼容变更的智能体?
摘要
作者介绍了 Foremerge——一个为并行编码智能体设计的开源协调协议,它能在变更发生前检测冲突,并探讨了该协议在非代码领域的应用可能性,同时寻求实际案例。
我维护着 Foremerge,一个为并行编码智能体设计的开源协调协议。声明:这是我的项目,本文是设计探讨而非推广或发布。其机制很轻量。智能体在编辑任何内容前,会发布其计划变更的范围(scopes),每个范围都附带声明的操作。例如,一个智能体声明 symbol:PaymentService 并执行替换操作,另一个智能体则对同一范围声明扩展操作。在任一行代码写入之前,后者就会收到一个“高度冲突”提示。存储采用 SQLite,位于仓库的 Git 公共目录下,因此隔离的工作树可共享该存储。声明是租用且建议性的,不涉及实际锁机制。在审视该协议假设为代码的环节时,我发现其生命周期分为前后两半。前半部分除了定位存储库之外,不依赖 Git:包括意图声明、冲突声明、冲突检测、智能体自身对重叠的判断记录、协调消息、审批及解决。目前的范围词汇表是封闭的(包括 symbol, api, schema, config, infra, test, migration, env, file, component, contract, domain),但其比较逻辑是基于类别、键和操作类型。操作是添加、扩展、修改、替换、删除、重命名还是迁移,是任何资源的属性,而非源代码的属性。而后半部分则完全依赖 Git。变更集(ChangeSet)通过文件树和差异生成指纹。验证过程会运行命名检查,仅当指纹在运行前后保持一致时才计数。接受步骤会在 refs/foremerge/accepted 下固化一个不可变提交,依赖关系和落地完成都通过提交的祖先关系来证明。因此问题是:如果你运行的智能体作用于非仓库的东西,你的“Git”是什么?具体来说:什么能提供智能体即将变更内容的、基于内容寻址的快照?是文档修订 ID?Terraform 状态序列号?CRM 记录版本号?对于许多 SaaS 服务,类似机制并不存在。此时后半部分就退化为“智能体声称已完成”,审计轨迹只能标记为“已声明”而非“已验证”。你实际上在非编码智能体之间见过哪些冲突场景?我能想到的有:一个支持智能体准备退款,而另一个智能体却在升级该订单;两个外联智能体向同一联系人发送草稿;两个内容流水线在同一日向同一频道发布同一主题。我尚未量化这些情况,更想听取真实案例。范围词汇表应该是开放式的,让项目自行定义类型(如 record:hubspot/contact/123),还是应该为不同领域定义专属配置文件及匹配规则?令牌相似性匹配会将 symbol:CreditLedgerService 与 symbol:CreditLedger 关联起来,但对于仅差一位数字的 ID 可能会产生误判。当操作不可逆时,前置检测的价值是否更高?Git 使回滚成本低廉,因此在代码中节省的是返工成本。已发送的邮件或已发出的退款无法撤回。我并非在问是否应让模型判断冲突。该设计刻意避免引入模型循环:检测器是确定性的,执行操作的智能体自行记录其对重叠的判断。我希望保持这一点。限定范围,以免有人费力寻找:本地优先、单机运行,目前唯一的底层基座是 Git。本文所述均基于已发布的代码或文档。我有意弱化了关于前半部分“不依赖 Git 以定位存储”的描述,因为命令行工具仍会拒绝在无显式数据库路径的情况下打开仓库外的存储。
相似文章
展示 HN: Foremerge – 捕捉并行编码代理间的意图冲突
Foremerge是一个开源协调协议,用于AI编码代理,通过基于Git的数据库共享代理计划,在意图冲突导致代码问题之前进行检测。
我两个代理的 git 工作树的干净合并,但它自身的测试失败了
作者描述了一个实验,其中合并两个 AI 代理的 git 工作树导致了测试失败,尽管合并是干净的,突显了在没有相互意识的情况下并行代理开发的挑战。
并行运行多个编码代理时出现了我未曾预料的故障。实际让我措手不及的三个问题
文章讨论了并行运行多个编码代理时出现的三个意外问题:共享工作树的冲突、运行时冲突(数据库、端口)以及难以检测卡住的代理。解决方案包括使用每个代理的 Git 工作树、隔离运行环境以及监测剩余差距指标。
我开始认为电子表格代理缺少了让编程代理真正可用的东西:Git
作者认为电子表格代理采用缓慢,因为它们缺乏Git风格的协作基础设施(差异、审查、回滚),而这正是编程代理可用的原因。作者宣布发布了一个早期运行时以弥补这一差距。
当编码代理比我们更快时,Git diff 还是适合人类审查的正确工具吗?
作者质疑随着编码代理加速,Git diff 是否仍然足以供人类审查,并建议转向审查代理的后果和决策,通过增强的工具链以实现更好的监督。