公司开始全面 vibe coding 之后感觉更累了

1 月 21 日
 wxiao333
最近 15 人小组实践 vibe coding 遇到了一系列问题。整的我们连续加班了 1 个月。

项目背景:
公司里的核心项目。涉及资金流企业级复杂架构,对系统的稳定性和高可用性要求极其严苛。
这个项目是专门为大促(比如双 11 )这种极端高并发流量设计的,里面充满复杂的业务逻辑,比如多层级的数据核对、消息补偿机制和各种应急预案。技术路线上使用公司自研框架上从 0 到 1 开发。
而且压力大的是,它是个倒排期项目,上线时间给定死了,一秒都不能拖。

准备阶段:
这次开始前我们内部讨论了很久,决定采用 SDD (规范驱动开发) 模式,即由规范和文档驱动 AI 进行架构设计、系统开发以及单测和集测的编写。
出于数据安全的考虑,团队申请了一个全新的项目仓库。明确要求 AI 不能读取公司既有的私有代码库,以规避潜在的合规风险。
由于 AI 缺乏对公司内部定制或自研框架的了解,我们手动编写了大量示例代码和 Todo 供 AI 学习。
团队预先定义了多个 Agent (智能体),并设计了详细的 Workflow (工作流),试图通过流程化来约束 AI 的发散行为。

惊喜的开始:

• 详尽且专业的架构文档:AI 产出的架构设计文档看起来非常完善,甚至比人类写的还要好得多。人类写文档时往往会基于“常识”而忽略一些细节或内部约定,但 AI 会写得非常详尽,不遗漏细节。
• 惊人的开发速度: 在纯开发阶段,AI 展示了极高的效率。内部估算,如果是由人类工程师完成该项目的纯开发工作,大约需要 15 到 20 人日,而 AI 仅用了 3 天时间 就完成了所有的代码编写。
• 高质量的代码注释与异常处理: 我们平时为了追求开发速度,有可能对注释和异常处理的相对简单,但 AI 编写的代码在注释质量和异常处理机制方面比人类工程师开发出来的要好很多。
• 清晰的设计与逻辑分层:AI 在接收到相关知识后,能够定义出非常清晰的类图、方法、依赖关系和分层结构。它会先进行详细的设计,明确每个类的职责,初步看过去代码质量非常不错。
• 代码初期的易读性:AI 初步生成的代码逻辑相对直接(偏“面条式”代码),没有过度使用复杂的架构模式或抽象,这使得人类在第一眼看过去时觉得逻辑非常清晰且好理解。

不过这样的蜜月期,并没有维持多久,很快我们开始遇到各类问题,加班也多了起来。

遇到的问题:

1. 技术与代码质量问题
• 逻辑伪造与“将错就错”:AI 在面对缺失的知识、错误的接口文档或注释时,会伪造逻辑或猜测( Mock )返回格式。遵循“垃圾进,垃圾出”( GIGO )原则,如果输入信息有误,AI 的产出必然也是错误的。
• 错误传播与测试盲区: 如果 AI 基于错误的架构分析生成代码,它也会基于同样的错误逻辑设计测试用例,导致单测和集测无法发现逻辑漏洞。
• 产生“屎山代码”: 虽然 AI 初步生成的代码看似整洁,但在经过人工点对点的调试修复问题后,代码会逐渐演变成难以维护的屎山代码,。
• 缺乏企业内部知识: 由于数据安全限制,AI 无法读取既有的私有代码库,且对企业内部定制或自研的框架缺乏了解,导致其难以写出符合要求的代码。
• 不符合开发规范:AI 编写的代码往往不符合团队内部的开发规范或习惯(如事务处理方式),导致人类工程师在 CR (代码评审)或维护时感到非常困难。

2. 架构与设计层面的局限
• 输出不稳定与概率推断: 基于 Transformer 架构的 AI 本质上是概率推断模型,同样的输入和提示词产生的输出是不稳定的。我们为了研究针对本项目最佳的 AI 沟通方式,不断的测试修改各种提示词,花费了不少时间。
• 上下文限制与“遗忘”:AI 的上下文处理能力有限,在解决具体问题时可能会忘记之前的全局设计,导致代码复用性差,甚至在同一项目中针对相同问题重复编写不同的代码。
• “只见树木不见森林”:AI 容易陷入局部逻辑,忽略全局影响,例如在修改代码逻辑后忘记更新注释或相关的单元测试。
• 文档过度冗长:AI 喜欢编写极其详尽、甚至带有重复内容的长文档,这增加了人类阅读和理解的成本,往往 AI 5 分钟输出的内容,我们要花 1 个小时去理解。

3. 工作流程与效率悖论
• 工作强度反而增加: 使用 AI 后,程序员的工作时长变得更长、更累,甚至需要工作到凌晨,这与“AI 减负”的初衷相悖。
• 由于过度约束导致的“犯傻”: 为了约束 AI ,开发人员会定义越来越多的 Agent 和复杂的 Workflow ,但约束过多会导致 AI 出现“过敏”或变得笨拙,丧失了发散性思维的能力。
• Token 消耗巨大: 复杂的 Workflow 和长指令会导致 Token 消耗量激增(每天消耗上亿 Token ),导致成本异常昂贵。
• 陷入“面多加水”的死循环: 当 AI 做不好时,人类倾向于增加更多 Agent 或约束,这使得系统越来越复杂,最终效果反而变差。

4. 心理压力与管理挑战
• 认知负荷与上下文切换: 领导层可能误认为 AI 能大幅提升生产力,从而给程序员安排更多并发项目,导致程序员需要在多个 AI 窗口和项目背景间频繁切换,造成脑力枯竭,。
• 巨大的“不安全感”:AI 的自评分往往虚高(比如 AI 设计的架构或算法,我们让 AI 给自己打分结果他给自己打 98 分),但人类很难一眼看出其逻辑中的隐患。由于不理解 AI 某些设计的意图,人类工程师会产生强烈的不安全感和心理压力,。
• 信息爆炸:AI 产出的海量文档和代码需要人工进行大量审查( Review ),这一过程极其消耗精力。


后续反思
1. 明确 AI 的适用场景:
◦ 推荐场景: 编写一次性脚本、处理数据报表、编写复杂的 SQL 、整理文档、画图、辅助理解不熟悉的既有代码、查 Bug 、以及编写基础的单元测试和集成测试代码。
◦ 限制场景: 涉及核心业务逻辑、复杂资金流、高可用架构设计时,必须由人类主导。
2. 坚持“人机协作”而非“全权委托”:
◦ 建议通过 Web Coding 的方式,让 AI 按照人类提供的模板类和示例代码进行学习和约束。
◦ 核心逻辑必须按照团队的开发规范和习惯进行重写,以确保代码的可维护性和安全性。
7096 次点击
所在节点    程序员
46 条回复
idealhs
1 月 21 日
感觉你这篇文章也是 AI 的
codingerj
1 月 21 日
能问下用的具体是哪个 AI 工具吗
wxiao333
1 月 21 日
@idealhs 兄台高见,本人语文不好,高考差点没及格,确实让 AI 帮润色了一下

@codingerj 不直接点名了,但是是市面上最强的之一
timespy
1 月 21 日
@idealhs +1 ,这种排版的一眼 ai ,反而没有太大阅读欲望了
forbreak
1 月 21 日
你这个是 ai 润色过的吧。试过纯 ai 编写,一毛一样的问题, 所以一直不能理解他们说的零人工参与 ai 写一个项目。 而且后续还要继续长期更新维护的话,ai 的缺点还会放大。
digitv
1 月 21 日
资金流这种复杂的系统也敢用 AI ,只能说你们牛逼,被各种 AI 忽悠瘸了吧。。。
anytk
1 月 21 日
如果 AI 不能为代码的后果负责,为什么会相信 AI 能解决程序员的问题呢
m1nm13
1 月 21 日
@wxiao333 不不不,只有最强 opus. 没有之一, 其他之一什么 codex 5.2high 之流在我这早被判定为弱智了
xujia1998
1 月 21 日
不是 vibe coding 太累了,是你们公司领导层太傻逼了
billzhuang
1 月 21 日
项目背景看下来,即使人做,也会是个屎山。
tomczhen
1 月 21 日
假设代码是由人工完成的,但是生产力保持不变,其实还是会出这些问题,只是 ai 让这种假的实现了。
jimrok
1 月 21 日
模型还不够强,即使把全部底层代码都喂给模型,也没有足够的上下文理解全貌,至少国产模型现在还不够行。今年能达到什么程度不好说。我一般就是 ai 生成个架构,具体功能不对,我就问 ai ,这个功能控制点在哪里,告诉我代码行数,然后我去修复。
cyio
1 月 21 日
首次尝试,后面如果再做新项目,是不是会效率更高、更可控
wxiao333
1 月 21 日
@timespy 内容都是本人的工作笔记和团队的复盘会记录整理的,干货满满
由于本人语文不太好,文章确实是 AI 润色过的,但绝对不是什么垃圾文章,大家放心阅读。
gorvey
1 月 21 日
vibe coding 只适合个人开发学习使用,生产环境只能当副驾驶
PbCopy111
1 月 21 日
为啥不把 AI 当成辅助工具,人写代码,它负责找 bug 或者 else ,为啥要用它写呢。。。。不明白啊,不明白。。。
xwhxbg
1 月 21 日
看起来贵司是没有调研过 vibe coding 的 workflow 导致认为 vibe coding 就是跟 AI 聊天导致的问题

上下文这个是通过 beads 数据库解决的,所有的 commit 和 LLM 的 plan 都会存里面,这样即使上下文 compact 了也会自动取数据库里的东西,能明白某个函数当初为什么这样设计,现在我们改动会如何影响那个设计

人为调试,这点看起来是因为用 prompt 根 LLM 说不通所以懒得搞了直接人工上,实际上你应该把你调试的过程,用 LLM Prompt 一步一步实现,请 LLM 帮你去调试,例如加日志,启动测试环境等等,最终把这个过程萃取成 skills

幻觉问题,很显然你们没有任何 rules ,LLM 可以随便撒谎,不做 fact check

垃圾代码,你需要一个插件去让 LLM 精简代码,参考 https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md ,然后在 PR 阶段用 LLM review ,可以有效避免因为概率问题导致的 oneshot miss
npe
1 月 21 日
偷偷用就好了,闷声发大财
iOCZS
1 月 21 日
<amp-youtube data-videoid="M-EaZqYrkyY" layout="responsive" width="480" height="270"></amp-youtube>
edenzhang
1 月 21 日
很有帮助

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/1187220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX