AI 重构的那些 bad case

以下 case 使用模型均为 gpt5.5 xhigh

TLDR

当前最厉害的模型之一

  • 做事靠谱吗? 大部分靠谱
  • 会有幻觉吗? 会
  • 会偷懒取巧吗? 会
  • 会为了做而做吗?会
  • 会生成屎山代码吗? 会
  • 会使得整体项目更复杂还是更简单? 看你怎么用

所以

  • 我们要 review 生成的代码吗? 要
  • 当前能做到交给 Agent 一个任务,之后看都不用看直接合并吗? 暂时不能,大概率翻车
  • 要为代码负责吗? 废话,你的 PR,你的代码,你的锅

建议:

  • 复杂任务尽量用最好的模型
  • Agent 说 job done 之后,用另一个 模型 交叉 review 【重点:交叉验证,不同模型能力、关注点不一样】
  • 提交 PR 前后,人工 review 【重点:为自己的产出负责】
  • 对于 review comment(不管是来自于 Agent,还是人), 先阅读,反向读代码,理解后做判断 【重点:不要让 Agent 直接去修 comments,修多了或修少了都有可能,没有自己的理解和判断,永远积累不到经验】

过度防御

某些模型(gpt) 或者某些场景下, Agent 总是过度防御

例子: 命名 view 层有限制大于零,调用链上每一层都防御 【大概率是没读到,没理解上下文】

代码能用是能用,可读性非常差

无意义到包装或转发

Proxy function or methods

@staticmethod
def wait_release_done(release_history_id: int, timeout: int = DEFAULT_WAIT_RELEASE_TIMEOUT) -> str:
    return wait_release_done(release_history_id, timeout=timeout)

这个更过分, 先封装成对象 - 在 proxy method 中再转成id

image-20260602232443128

image-20260602232336527

Proxy constants

image-20260527232050538

甚至,模块 export 代理

image-20260602234716305

不会删掉没有调用的dead code

image-20260602234055431

只要能解决问题,什么方法都行

lazy import to avoid cycle import

image-20260528234918701

其实应该 break the cycle

丢失掉所有有用的注释

怎么写着写着,注释越来越少,干净又整洁

image-20260602232155194

image-20260602225050389

超级复杂的实现 vs 看似取巧的变通

你告诉它这个字段会导致一个注入,然后,它就去解决这个注入

增加一个非常复杂的 escape 方法 vs 舍弃掉这个字段

image-20260602225333542

你告诉它这个 version 有个注入, 它专心去解决注入,但是实际上这只是一个版本号,合法就不会出现注入问题

解决注入 vs 校验合法性

image-20260602225833153

相对保守不改变函数的协议带来的复杂度

image-20260602233101283

半吊子的封装

嗯,复杂的逻辑封装成函数了, 但是,这两个 except 是怎么回事?

image-20260602231108403

LockTimeout 和 ReleaseError 实际上也属于 release_to_stages 的上下文

image-20260602231312144

看一个更典型的, 你或许不会犯第二次错误,但是 Agent 会

image-20260602231455870

小心 noqa

如果我的变更命中的你的规则,那么一定是你的规则有问题,改一下绕过去好了

规则存在的目的并不是为了被破坏

注:这是个proxy method, 最终删掉了

image-20260602233315414

image-20260602234351439

image-20260602235238977

下面这个就厉害了,为了解 import 顺序导致的循环引用, 偷偷塞了一个 (其实我第一轮都没注意到,review 其他 noqa 的时候搜到的)

应该去解决循环引用,而不是通过 import 顺序绕过循环引用, 然后通过 noqa 绕过import order 检查

image-20260602234453500


aiagents

927 Words

2026-05-27 15:00 +0000