Published on 2025-08-07
AI在软件开发中的实践与局限性(翻译)
在新兴IDE ZED的视频“Agentic Engineering”中,主持人与嘉宾阿尔贝托(Alberto)讨论了人工智能在软件开发中的实际应用与局限性。下面是基于视频的翻译。(视频源地址)
阿尔贝托是一位拥有15年全栈Web开发经验的资深软件工程师,他分享了一篇博客文章中关于使用大型语言模型(LLMs)开发SaaS应用的经验教训。他选择使用Go语言以满足商业客户日益增长的数据需求。
阿尔贝托起初对AI的潜力充满热情,使用了GitHub Copilot和LLMs(如ChatGPT、Claude、Gemini)来生成代码,希望通过AI实现快速开发。然而,他遇到了以下重大挑战:
- 代码质量问题:AI生成的代码存在命名不一致(例如“third_party_API”与“third_party_provider”)、代码冗余(例如多次声明Redis配置)以及生成过多无用文件,导致代码库杂乱。
- 修复不可靠:当出现错误时,AI尝试修复常常引入新问题或破坏现有功能,形成“前进一步,后退一步”的循环。
- 缺乏控制:由于对Go语言不熟悉,过度依赖AI让阿尔贝托感觉与代码库脱节,无法完全理解生成的代码。
- 幻觉和上下文问题:LLMs有时会引用不存在的数据库表,或忽略已提供的上下文(例如误认为使用MySQL而非ClickHouse),令人沮丧。
在进行了一次“恐怖的”代码审查后,阿尔贝托改变了方法。他回归传统方式,如使用纸笔规划,学习Go语言的最佳实践,并将AI视为战术助手而非架构师。这包括自己编写初始代码草稿,仅将AI用于小任务(如重构、将PHP逻辑转换为Go),并仔细审查AI的所有输出。
在后续实验中,阿尔贝托使用更新的模型(如Claude 4 Opus)重新尝试解决问题,发现了一些改进(例如命名不一致和代码重复减少),但问题依然存在,例如多次应用速率限制器导致性能问题。他得出结论,尽管AI模型有所改进,但仍会犯基本错误,需要人工监督。
主要结论:
- AI的角色:AI最适合用于增强特定任务(如学习新语言、生成粗稿),而不是完全自动化复杂的软件开发。
- 人工监督:开发者必须保持控制,将AI视为助手,通过规划和审查保持对代码库的清晰理解。
- 收益递减:新型AI模型显示出增量改进,但仍存在代码重复、命名不一致和幻觉等问题,表明核心智能的提升有限。
- 平衡视角:阿尔贝托主张避免过度炒作或怀疑,鼓励开发者尝试并找到适合自己的方法,不必因AI将取代程序员的说法感到压力。
他总结道,AI使开发者能够专注于更高层次的架构决策,但目前还无法自主构建生产就绪的应用程序。讨论强调了使用AI的务实方法,认可其价值,同时也认识到其当前局限性。