AI-Coding Driver Development - AI驱动开发
前言 本文中总结了我自2023年以来,深度使用大语言模型辅助工作与编码的一些使用经验与技巧。 TL;DR 完善的文档 + 完善的单元测试 + 完善的注释 + 严格的代码审查 + 详细的需求描述,结合少量固定约束提示词,可以实现无负担或少负担的将AI融入编码工作中。 AI编程 迭代到目前,AI编程领域已经出现了Agent、MCP、Codebase RAG等多种增强工具。商业化工具从最初的 TabNine、Github Copilot 到现在的商业化 Cursor、Windsurf、Claude Code,开源 Roo-Code、Continue、Aider等工具。 其中每一个工具我都曾经重度在工作中使用过,基于我过往的使用经验,总结出一些使用技巧。 明确目标 首先需要 明确你的目标 ,以及思考这个目标大模型能否完成? 模型训练时的数据是有限的,所以首先需要考虑的问题是,你当前需要解决的这个问题,模型的训练数据中有没有可能存在相同或相似的数据? 例如你使用的技术栈是很主流的Java + spring boot,前端 TypeScript + Next.js,存在大量的训练数据,那AI生成效果可以达到满意。 但凡是会用到小众的库或小众语言,LLM就开始胡言乱语、伪造不存在的API、伪造不存在的语法,如果自身没有鉴别能力,很容易被误导。这种就是大模型的 幻觉问题 。 你的能力上限决定AI的能力上限,最佳场景是这个功能我自己会写,但是我懒得写,所以我指挥AI帮我完成工作。 Complete / Ask / Agent AI辅助编程主要可以分为两大类 代码补全 (auto complete) 问答/结对编程 (chat / agent) 通常对话模型需要经过预训练、指令微调(Instruction Tuning)、强化学习等训练步骤,才能够正常理解对话形式的上下文。而代码补全通常是基于未经过指令微调的基础模型,主要用于文本的补全。 对我而言,日常并不依赖AI代码补全。因为补全需要一定实时性,对速度要求高,且基础模型通常不会太大(猜测不超过14B),无法包含足够的上下文信息,幻觉问题非常严重,补全错误率高,容易打断思路。 当然AI补全也不是完全无用,在特定场景下,例如需求明确的简单CRDD,流水线代码、文档注释、日志输出等,AI补全效果可以满足简单需求。 Agent 是对传统AI编程能力的一次大增强,利用Agent工作流可以使 LLM 将一个大任务拆分成多个小任务,逐步完成,而避免单次任务过于繁重导致结果不理想的问题,那 Agent 模式就一定好用吗? 我们都知道,Agent每次请求都需要带上过去的上下文信息,请求次数越多,Token数量成指数级放大。这会带来两个问题: TOKEN 数量大以后,大模型容易遗漏关键信息、注意力涣散,导致幻觉增加,代码错误率高。 多轮任务堆叠后,出现上下文稀释,状态同步困难、debug难度高。 钱包爆炸。 MCP (Multi-Component Pipeline)本质上是为LLM提供一套工具箱(toolbox), 使传统文本生成模型拥有了和“现实”的交互能力,实现例如访问网页、命令执行、连接数据库等功能。 在没有 Agent 和 MCP 之前,AI结对编程需要你手动将需要交互的文件加入到Chat对话中,交互后,LLM通常会返回diff结构(Ask Mode);或是先返回部分设计思路与代码片段,再由专用的diff模型生成diff(Architect mode)。整个交互逻辑需要依赖用户的能力,LLM更像是一个听话的“实习生”,根据用户提示解决问题,无法自动修复问题。 ...