探索生成式人工智能

本文主要探讨了生成式 AI(特别是大型语言模型,LLMs)在软件开发中的应用及相关影响,包括工具链、不同工具的特点与示例、使用场景、潜在问题及应对措施等方面,具体如下:

  • 工具链及分类维度:开发新领域软件时,可通过建立工具链的心智模型来处理信息。用于支持编码的 LLM 工具可从辅助任务(如快速查找信息、生成代码等)、交互模式(聊天界面、内联辅助、CLI 等)、提示词组成(用户创建或工具基于用户输入和上下文创建)、模型属性(训练数据、模型大小、上下文窗口等)、起源与托管(商业产品、开源工具等)等维度进行分类。
  • 常见工具及示例:列举了 GitHub Copilot、GitHub Copilot Chat、ChatGPT、GPT Engineer、“Team AIs”、Meta’s CodeCompose 等工具,说明它们在不同维度上的特点和应用场景。
  • 当前使用情况及未来展望:目前人们最常使用直接聊天交互与代码编辑器中的编码辅助相结合的方式,开源世界中也有很多关于提示词组合生成代码的实验。未来,人们寄希望于模型组件的改进,如探讨更大或更特定训练的模型、更大上下文窗口的模型等对编码辅助的影响,以及开源模型和大型云服务模型的发展。
  • LLM 辅助编码的实例及结论:以生成中位数函数为例,展示 LLM 辅助编码的过程及可能出现的问题,如代码可能存在的缺陷、需要理解代码原理以编写合理测试等,得出使用 LLM 辅助编码时需具备相关知识、工具可提供改进建议但仍需人工审查等结论。
  • 内联辅助的适用性因素:内联代码生成在 IDE 中的使用较为广泛,其有用性取决于多种因素,如技术栈的流行程度、问题的简单程度和常见性、建议的大小、开发者的经验、错误容忍度等。在不同情况下,内联辅助的效果有所不同,需要开发者根据实际情况判断其是否有用。
  • 内联辅助可能带来的问题:内联辅助可能会放大不良或过时的实践,导致工具陷入旧的编码模式;也可能引发审查疲劳和自满情绪,如产生自动化偏见、沉没成本谬误、锚定效应等。
  • 编码助手与结对编程的关系:编码助手不能替代结对编程,结对编程有助于提高团队整体效率,包括知识共享、团队流程优化、避免浪费等方面。编码助手可以辅助结对编程,但不能完全取代它。
  • TDD 与 GitHub Copilot 的结合:TDD(测试驱动开发)在使用 GitHub Copilot 等编码助手时仍然重要,它能提供良好的反馈和逐步解决问题的方法。在使用 Copilot 进行 TDD 时,有一些技巧和注意事项,如从用户故事开始、注意测试的编写和代码的重构等。
  • GenAI 与其他代码生成器的区别:GenAI 与传统的模型驱动开发(MDD)代码生成方式不同,它可以在不定义结构化语言和翻译器的情况下,提高所有抽象层次的开发效率。但在应用 GenAI 时,可能需要重新思考传统的抽象层次,以更好地利用其潜力。
  • 应对编码助手不可靠性的方法:评估对编码助手输入的信心可从反馈循环速度、可靠性、误差范围、对时效性的要求等方面考虑,还可以给助手设定时间限制、为助手设定人格等方式来减轻风险。
  • 借助 AI 进行遗留代码库的入职培训:在入职遗留代码库时,AI 工具(如 Wiki-RAG-Bot、Bloop、GitHub Copilot 等)可以帮助理解领域知识和代码,但在实际操作中仍面临一些挑战,如确定相关代码库、环境设置困难、生成测试困难等。这表明 AI 在处理复杂遗留代码库时仍有局限性。
  • 构建 AI 代理应用迁移技术栈:使用 Microsoft 的 autogen 工具构建 AI 代理应用来迁移技术栈(如从 Enzyme 测试迁移到 React Testing Library),了解到函数调用是使代理工作的关键 LLM 能力,但代理仍有改进空间,需考虑优化和工具集成,以更好地解决编码问题。
  • 多文件编辑的作用及考虑因素:GitHub Copilot 的多文件编辑功能可处理跨多个文件的较大任务,但在使用时需考虑问题规模(如代码上下文需求、令牌限制、出错概率、人工审查难度等)、问题描述方式(是实施计划还是待解决问题)和审查体验等因素。
  • LLM 推理在软件任务中的作用:大型语言模型的推理能力基于模式匹配和统计预测,在编码任务中,推理能力在调试和制定实施计划方面可能有一定作用,但在一些常见编码任务(如内联编码建议等)中并非关键。同时,推理模型在使用中存在一些限制,如对上下文质量要求高、推理过程中不能调用函数等。
  • 开发者技能在代理式编码中的作用:尽管代理式编码助手取得了很大进展,但仍需要开发者的干预和指导。开发者的经验和技能在避免 AI 误操作(如降低开发速度、影响团队流程、降低代码可维护性等)方面起着重要作用,包括仔细审查代码、及时纠正错误、避免过度依赖“足够好”的解决方案等。团队和组织也应采取措施,如加强代码质量监控、利用自定义规则等,以降低 AI 带来的风险。
阅读 9
0 条评论