本页目录

Vibe Coding Is Not Enough

复杂动态长上下文管理

复杂的开放性问题:无限长、动态变化的需求上下文。 大模型也无法一步到位解决需求。

需求管理

需求本身就很复杂,需求管理本身就有不小的工作量。

你有尝试过作为甲方用户,在一个项目中向大模型提过一长串需求吗?

常见问题

  • 需求已经实现了,但人类不知道,继续要求实现冗余需求。
  • 凭空创造不该出现的功能特性,被客户认为开后门。
  • 依赖的服务报错,

决策难点

架构与设计模式决策

水平差的人类经常做出错误的架构设计。 水平差的人类,如果向大模型发出了错误的决策,大模型出于对人类偏好的对齐,自然也会坚决执行错误的决策,越走越偏。

问题修复方案决策

一个Bug可能有多种修复方式:

  • 可以在不同层级的模块上修复
  • 侵入式代码适配 vs. 从根本上改变内部设计or外部接口约定
    • 可以在本模块内做侵入式适配(if 当前table是增量物化视图内部产生的临时表,跳过Vacuum),改动代码少,但导致了侵入式修改。
    • 可以要求增量物化视图模块从根本上避免分布式下的Vacuum失败(强行让多个CN之间的临时表名称完全相同,但这可能动的是整个增量物化视图代码的基础逻辑?)

需要人类决策,和人类意图对齐,保证代码可维护性。

可信软件工程

上下文缺失

测试集越全面完整、对bug容忍度越高、上下文越完整,越可以放心大胆让Agent跑长程任务。

但在系统软件开发领域,常常面临以下困境:

  • 测试集不全面:
    • 针对一个模块的CI测试包含门禁CI、日构建流水线测试(完整运行3小时起步)、周构建流水线测试。
    • 其它模块的单元测试数量也非常多。
    • 更多复杂的黑盒测试用例在测试工程师手上(可能包含无法自动化的测试)。
    • 测试集本身看护不全:并发场景、特殊时序关系下才能触发的bug,似乎难以自动化用例。(或许可以采用插桩的方式控制时序)
      • 和历史特性、其它特性交叉的测试集。
      • 各类专项测试,如FUZZ、安全渗透、性能测试……
      • 系统集成测试、长稳测试的回归至少需要跑3天以上(约1~5小时偶现一次的bug)。
  • 人和大模型对其它模块的认知不够完整。
    • 其它模块中看似是bug的地方,可能有着不为人知的约束条件,或者修改影响面过大,或者涉及行为变更。

用户信任

金融领域对数据库系统的Bu的容忍程度低,尤其是数据不一致问题。 产品功能的上线、客户信任的建立往往以年甚至10年为单位。

软件工程过程审计

10个1000行的commit,显然比 一个10000行的commit更容易被人和大模型接受。因为10个commit相对1个commit,提供了中间的思维链过程,包含了更多信息量。

Agent自动生成的测试套件不全面、偏离真实需求

不会主动加一些新的测试,比如代码覆盖率测试。

禁止引入未被记录的行为

面对大型项目,Vibe用户的需求管理可能十分混乱。

架构不可维护

  • 倾向于在原有逻辑的基础上添加,导致文件越来越长,不会主动重构代码。
  • 关注局部代码与测试,破坏整体架构。混用旧版和新版架构逻辑。

可观测性

当下Agent仍然需要指导它去生成一些辅助可观测性的代码。

自然语言编程

语言不重要,算法思想更重要

懂得专业名词才能与Agent更加高效地交流

检查每一行Agent生成的代码 vs. 一行Agent生成的代码都不看

  • Robert C. Martin: 一行agent生成的代码都不看。
  • Mitchell Hashimoto:检查每一行agent生成的代码1
  • Andrej Karpathy:AI Agent检查代码,每一行改动都能追溯到原始需求。
  • Linus Torvalds:人要对代码生成的结果负责。

Footnotes

  1. https://36kr.com/p/3916342030560649#1