Quanta

← 返回 Quanta 简报

十六个遗留 Java 服务:Claude Code 结对改造的两档模型配比

编码 Agent 规模化ZH62 次阅读

01 · 三千行上下文与十六个服务:改造从哪里开始

我们是一个常年背着高负载改造任务的平台组,手上是十六个相互调用的遗留 Java 服务。核心链路里混着十年前的 Servlet 过滤器、手写 JDBC、几处没人敢碰的同步块,以及三套互相不兼容的序列化约定。真正难的不是单个类,而是上下文:一次看似局部的改动,往往要先读进去三千行调用关系,再从生产日志反推出一份状态机。人工结对平均要花两三天才能摸清一个服务的边界,而这样的服务我们有十六个。

我们把 Claude Code 当成常驻的结对同事,而不是一次性的代码生成器:先让它通读模块、理清调用与依赖、标出可疑的共享可变状态,再进入逐文件改造。所有模型调用统一走 Quanta 中转,一个余额覆盖多家模型,Claude Code、Codex、Gemini CLI 与任意 OpenAI SDK 都能直接接入;每一笔都按真实 token 计量,缓存写入与缓存读取分开计价,预算可以细到每一次读文件的动作。

02 · Haiku 4.5 与 Opus 5.5 的正面分工:机械改写对上并发难题

我们没有把整个仓库交给同一个模型。改造进入第二周后,工作自然裂成两条线,两条线的难度、返工率和预算消耗完全不同,于是模型配比也跟着分开。

  • › 机械改写这一侧:换掉废弃 API、补齐空指针校验、把散落的魔法数字提成常量、按新规范重排日志。这类任务边界清晰、测试覆盖好,交给 Claude Haiku 4.5 循环处理最合适:它跑得快,单次改动小而干净,配合 Claude Code 的文件编辑与测试执行,一天能扫掉一个服务里上百处低风险修改。这正是它帮助最大的地方——量大、重复、需要快速迭代。
  • › 并发与事务这一侧:共享缓存的失效顺序、跨服务的补偿逻辑、长事务里的锁粒度、被隐藏在工具类里的线程局部状态。这些地方一步错就是线上事故,需要模型读很久、想很久、并在改动前先给出风险排序。我们用 Claude Opus 5.5 主导这一侧,它帮助最大的场景是跨文件推理:它会先指出同步块与数据库事务的边界不一致,再动手改,而不是直接重写。

两条线的结对方式也不同:Haiku 4.5 那边是快节奏的批量提交,Opus 5.5 那边是慢节奏的方案对谈。同一个仓库、同一个入口,不同难度走不同档位。

03 · 结对节奏:测试先行、小步提交、每次只动一个模块

结对编程的价值不在一次生成多少行,而在每一步都留下可回滚的证据。我们固定了四条节奏,Claude Code 每一轮都遵守:

  • › 先补测试再改代码:对旧接口先写特征测试,把现有行为钉住,哪怕它明显不合理,也先固化再讨论。
  • › 每次只动一个模块:一个服务拆成若干改造批次,每批只覆盖一类风险,方便代码评审定位回归来源。
  • › 提交信息写清动机:Claude Code 生成的说明必须回答为什么改,而不只是改了什么,半年后考古全靠它。
  • › 失败即停:测试红灯时不做连锁修改,先回到上一个绿灯状态重新推理,避免在错误前提上堆叠补丁。

这套节奏把评审从逐行读语法,变成抽查风险判断。过去评审最耗时的是理解意图,现在意图写在提交里,评审只看边界与取舍。

04 · 按真实 token 计费:缓存写入与缓存读取分开看预算

这种高负载工作流最怕的是账单失真。结对式改造的开销结构很特别:大量 token 花在反复读同一批文件上,而真正的新写入只占一小部分。Quanta 按真实 token 计量,并把缓存写入与缓存读取分开计价,我们因此能看清一个服务的改造成本由哪些动作构成。

  • › 读得多,写得少:通读与复读是大头,缓存命中后的读取成本远低于重新写入,所以我们坚持让 Claude Code 在同一会话里连续处理同一模块。
  • › 会话边界决定缓存:把大任务切成互不相关的会话看似省事,实则反复付出缓存写入;按模块而非按文件组织会话更划算。
  • › 预算可归因:一个余额覆盖全部模型,每笔调用都有明细,哪个服务花得多、哪条线返工重,一目了然。

顺带一提,推荐他人注册还能拿到对方充值金额的一成九作为返点,对常年扩编模型预算的团队来说是一笔可观的回血。

05 · 从两个人试点到全员上线:配额、权限与推广节奏

试点从两个人、两个服务开始,四周后扩展到全组。推广时我们只抓三件事:

  • › 配额按项目分桶:实验性服务给宽松额度,核心链路服务设上限,避免一次失控的批量生成吃掉整月预算。
  • › 权限最小化:Claude Code 的编辑范围限定在各自负责的模块目录,跨服务改动必须走单独的分支与评审。
  • › 沉淀可复用提示:把服务的启动方式、测试命令、常见坑写进仓库说明,让结对上下文随代码一起版本化,新人接手不必重走弯路。

回头看,真正的收益不是某次改动快了几分钟,而是十六个服务的改造从无法估算,变成了可以在预算表里排期的工程。若你也在做类似的批量遗留改造,欢迎开通一个 Quanta 账号,把 Claude Code、Codex、Gemini CLI 和任意 OpenAI SDK 接进同一个余额,从最小的一个服务开始试。