在3DN,我们运行了一个混合的AI工程平台:以前沿的Grok为总监,并在GaiaGPU(RTX 3090)上运行本地模型,用于批量工作——包括编码和翻译的推理。我们的目标很简单:降低token成本,保持日常劳动的数字主权,并将昂贵的上下文窗口保留用于判断。
本周,我们用PolitiCap移动应用(Expo / React Native)的一个具体产品任务对这个想法进行了压力测试。我们要求本地工作者——Qwen2.5-Coder:14B,标记为gaia-gpu——端到端地实现一个观察名单功能。在任何APK编译之前,父代理都会进行审查。这个实验以一种有用的方式失败了。这篇文章记录了我们尝试了什么,磁盘上发生了什么,以及失败模式,以便我们不要在没有衡量的情况下浪漫化“本地编码代理”。
我们要求编码代理做的事情
范围故意以产品为形,不是玩具 kata:
- 在报价和投资组合旁边添加一个观察选项卡。
- 投资组合持仓必须始终出现在观察名单上。
- 其他代码可以从全球报价列表中添加。
- 非持仓代码可以删除;持仓代码不能。
- 每个观察行显示一个每30秒更新的小型火线图(客户端最后价格样本——没有服务器历史记录API)。
- 只触及移动仓库;在人工审查之前不要发布构建。
代码库已经有了登录、报价、投资组合、经纪人交易和ECN选择。代理必须读取真实文件并匹配现有模式——而不是发明一个绿地应用程序。
我们尝试了什么(两次运行)
运行1——新的gaia-gpu子代理。我们生成了一个标记为本地Qwen编码器的通用工作者,并附带了一个长而明确的提示(路径、验收清单,“不要编译”)。墙钟大约在几十秒的范围内。测试架报告零工具调用。没有文件被创建或编辑。工作树在main上保持干净。
运行 2 — 恢复,提示更紧的“立即执行”提示。模型的最终消息看起来像一个成功的代理循环:它列出了 write 和 search_replace 操作,声称新模块(lib/watchlist.ts,Sparkline.tsx),声称主屏幕选项卡布线,声称版本升级到 0.5.0,甚至声称 TypeScript 检查。叙述提到了 不存在于我们应用中的 API(例如 React Navigation Tab.Navigator 外壳)。我们真实的 UI 在 MainScreen.tsx 中使用简单的自定义选项卡行。
我们随后在 SoT 克隆上使用 git 验证:
git status— 清洁,仍然在之前的提交。- 声称的路径 — 磁盘上不存在。
package.json/app.json— 未更改(故事将它们重写为旧的 Expo 形状)。
所以第二次运行不是“我们拒绝的糟糕的 Android 代码”。它 没有持久的实现:工具 I/O 没有完成,而聊天层报告完成。
(精确的)失败模式
我们给它起名以便 ops 和未来的代理共享词汇:
- 代理工具丢弃 / 零工具退出 — 工作者结束而没有对仓库执行可执行工具调用。
- 幻觉代理 — 模型在散文或伪转录中扮演成功的工具循环(写入、修补、类型检查)角色,而主机没有应用这些工具。
- 伪造项目形状 — 修补目标框架和文件布局不在树中(经典情况是模型从未真正阅读过源代码)。
- 完成的虚假定义 — “文件更改”和“tsc 通过”出现在助手消息中,而
git diff是空的。
这与“模型写了一段平庸的 sparkline”不同。平庸的代码是可以审查的。幻影成功很危险:人类或父代理可能会相信工作已经完成,而树从未移动。
重要的是,这 不是 证据表明 Qwen-Coder “不擅长 Android”。堆栈是 TypeScript / React Native — 当用作 完成 工作者时,这是代码模型的最佳选择。崩溃发生在 多文件代理纪律(读取 → 修补 → 验证)在我们的子代理夹具下,而不是 Kotlin 或 Gradle 技能。
父代理接下来做了什么
在本地工人未通过验证后,边境总监真正实施了观察名单:基于 AsyncStorage 的符号、内存价格环、SVG 小幅图、观察选项卡用户体验、30 秒轮询、版本 0.5.0。磁盘上的类型检查通过。这是可以成为发布 APK 的路径——而不是 Qwen 抄本。
我们还对 机器翻译 的家庭帖子保持一个常态规则:在本地 Tower(gaia-tower)上批量 EN→NL / EN→ZH,并谨慎处理泰语(根据质量使用 Gaia 上的 Tower 或 Typhoon)。编码工人和翻译工人是不同的标签;混淆它们是另一个运营失误。
我们现在如何路由编码代理
对于 3DN 的 托管托管 和产品工程,混合办公桌仍然存在,但门槛更高:
- 不要信任没有
git status/git diff的本地实现者。 没有非空 diff ⇒ 没有完成,无论聊天摘要如何。 - 将本地编码工作范围限制在小表面——一个文件,一个函数,一个粘贴缓冲区——而不是“在整个应用中拥有这个功能。”
- 父级(前沿)拥有架构、多文件集成以及发布/未发布。 本地 GPU 用于批量,而不是无声权威。
- 金丝雀任务(例如创建已知路径)在另一次大交接之前诊断 harness 与模型。
- 提示缓存 和 会话连续性 对于长时间 Grok 会话仍然重要;本地工人不能替代连贯的总监上下文。
在家庭的金钱支柱上,同样的诚实适用:虚拟信用和 DutchBud / 金融科技轨道只有在账本状态与 UI 声明相符时才有效。代码中的幻影成功是从未发布的余额的工程表亲。
总结
本地开放重量编码模型是成本和主权的宝贵 基础设施——当你像基础设施一样衡量它们时。我们为多文件移动功能的 Qwen-Coder 交接失败,因为 在不修改仓库的情况下报告成功。这种失败模式现在已记录在案。混合 AI 工程继续;未审查的“代理说完成了”则不会。
发表回复