黑匣子问题:为什么人工智能生成的代码不再可维护

相同的通知系统,两种架构。非结构化生成将所有内容耦合到一个模块中。结构化生成分解为具有显式单向依赖性的独立组件。图片由作者提供 文章《黑匣子问题:为什么人工智能生成的代码不再可维护》首先出现在《走向数据科学》上。

来源:走向数据科学

跨团队的模式

去年组建了采用人工智能编码工具的工程团队。第一个月是欣快的。速度加倍,功能交付更快,利益相关者感到兴奋。到了第三个月,一个不同的指标开始攀升:安全地更改生成的任何内容所需的时间。

代码本身不断变得更好。改进的模型,更正确,更完整,更大的背景。然而,生成最多代码的团队越来越多地要求重写。

除非您查看结构,否则它就没有意义。

开发人员打开在单个 AI 会话中生成的模块。可能是 200 行,也可能是 600 行,长度并不重要。他们意识到唯一理解此代码中关系的是生成它的上下文窗口。函数签名没有记录他们的假设。三个服务以特定的顺序相互调用,但代码库中不存在该顺序的原因。每一次的改变都需要充分的理解和深刻的审视。这就是黑匣子问题。

是什么让人工智能生成的代码成为黑匣子

人工智能生成的代码并不是坏代码。但它有很快就会成为问题的倾向:

  • 一切都集中在一个地方。人工智能对整体架构有强烈的偏见,并选择快速路径。请求“结帐页面”,您将在单个文件中获得购物车渲染、支付处理、表单验证和 API 调用。它可以工作,但它是一个单元。如果不处理所有部分,您就无法审查、测试或更改任何部分。
  • 循环和隐式依赖关系。AI 根据在上下文窗口中看到的内容将事物连接在一起。服务 A 调用服务 B,因为它们位于同一会话中。这种耦合没有在任何地方声明。更糟糕的是,AI经常创建循环依赖关系,A依赖B依赖A,因为它不跟踪跨文件的依赖关系图。几周后,删除 B 会破坏 A,但没人知道为什么。
  • 具体示例

    考虑人工智能生成用户通知系统的两种方式: