AI在47分钟内构建了一个功能,而几年前这需要8小时的工作。但这里有个没人告诉你的事实:没有正确的策略,同样的AI会浪费三小时来构建错误的东西。
你好,我是Chuck,我已经写了30年的代码。在2023年,我意识到我要么拥抱AI,要么找一份新工作。我选择了拥抱它。从那时起,我已经使用编码代理构建了十多个应用程序,今天我将与你分享所有学到的策略。
AI改变了一切,最值得注意的是,它加快了一切速度。过去需要一天的工作现在只需一小时。

这种速度意味着几件事:
首先,你的反馈周期快得多,错误和错误方向浮现得更快,成功也浮现得更快。
其次,很多代码现在是一次性的。从成本效益来看,编写和丢弃代码比编写和重构代码更划算。
第三,过去需要多年才能遇到的软件开发陷阱现在在几周或几个月内就会出现。
第四,没有指导,AI很快就会偏离轨道并走向悬崖。
在我使用Cursor等编码代理的时间里,我发现了12个策略来防止AI走向悬崖。这些是通过试错艰难学到的。
1. 使用Agent.md
我注意到LLM的许多特点之一是它们都想添加”回退”。
回退是条件代码,在第一个条件失败时执行。当你的代码要去火星时这很好,但大多数代码不会去火星,肯定不是我的代码。更糟的是,回退本质上是有缺陷的,大多数时候都不需要。
这就是Agent.md文件的用处。你可以指示LLM不要使用回退。实际上,你可以告诉它做任何事情。任何你会添加到提示中的内容都可以添加到Agent.md中。该文件会自动添加到每个新上下文中。
目前,每个编码代理都有自己的agent.md文件。Cursor称其为.cursorrules,Claude Code称其为claude.md。我怀疑在不久的将来,编码代理将标准化为一个通用名称。
在我的Agent.md中,我定义了我想使用的软件模式、测试策略和架构。任何我发现代理由于缺乏上下文或方向而重复做的事情,我都会添加到文件中。
这是一个链接到代理规则的存储库。
一旦你的Agent.md文件设置好了,你就可以不受限制地使用AI。
2. 全力以赴
Claude Code和Cursor AI开箱即用时都以”安全模式”启动。安全模式需要对每个工具调用进行权限。在批准了几分钟的每个工具调用后,我就放弃了安全模式。
幸运的是,每个编码代理都允许你选择退出”安全模式”。风险是AI可能会做一些不可取的事情,但在我使用编码代理的时间里,我从未遇到过任何不可逆转的事情。
我确实会关注LLM在做什么,但我还不太放心离开编码代理。
老实说,除非你要求LLM处理实时生产代码,我不知道你为什么需要安全模式。
现在你已经解放了你的编码代理,我们需要定义问题。
3. 定义你的问题
AI是字面主义者。你得到你要求的东西,这意味着模糊的提示会产生模糊的结果。
我发现向AI提供详细的需求并要求”评估”会得到最好的结果。这允许AI寻找设计中的差距并用后续问题做出响应。经过几次往返后,你将有一个坚实的计划。
在最近的版本中,Cursor和Claude Code都添加了”计划模式”,这使上述过程正式化。
我更进一步,让另一个LLM审查该计划。例如,我使用ChatGPT进行第一次AI评估。它生成一个包含所有需求的markdown文档。然后我将该文档提供给Claude进行反馈,Claude的第二次审查总是能找到遗漏的差距。
这是个品味问题,但AI倾向于为我过度架构。同样,AI似乎认为代码要去火星。
一旦你确定了计划,要求AI将其保存到项目中的文档。
这引出了下一点。
4. 创建分阶段计划
将大功能分解为可管理的阶段和任务
创建计划后,要求AI将工作分解为阶段。你需要小的工作单位;越小越好。工作单位越小,成功的机会就越高。
一些编码代理开箱即用就能做到这一点,但如果他们不能,就要求他们。
最好的计划如果你无法跟踪进度,仍然会失败。这就是检查清单的用处。
5. 要求一份检查清单
要求AI提供一份检查清单,并告诉它你需要一份来跟踪进度。许多编码代理已经将检查清单添加到代理提示和UI中,但有时我仍然需要一份检查清单来跟踪进度或跟踪长期运行的工作。
检查清单还给AI一些东西来衡量自己,所以它知道什么时候完成。
检查清单很好,但我们如何跨上下文使用检查清单呢?这就是我们的交接文档的用处。
6. 创建交接文档
什么是交接文档?
交接文档是应用程序的高级描述。其目的是让一个空上下文快速了解你的应用程序的域、代码和架构。
理想情况下,代理会在前一个上下文停止的地方继续进行。
在我的Agents.MD中,我指示代理用高级更改更新我的交接文档。我们不想要的是文档中的每个细节;我需要一个高级摘要,我让AI来确定什么是。

我的工作流程有点像这样:
每次我开始一个新上下文时,我都会包含我的交接文档并指示AI新功能。AI接过任务并开始工作,就像它已经在项目上工作了6个月一样。
交接文档对于较小的应用程序很好,但在较大的应用程序中,它消耗太多令牌,不实用。我正在考虑其他选项,例如向量数据库或图数据库。
但我仍在试验中。
我很想听听你是如何处理这个问题的。在下面留下评论。
即使有检查清单和交接文档,AI也会犯错误。这就是提交的用处。
7. 经常检查
进行小的提交。小的提交让你可以恢复到已知的良好状态。我发现有时AI会走进兔子洞,没有恢复的可能。
只需重置。
8. 重置上下文
无情地重置上下文。
有时AI会走上错误的道路或犯错误,弹出并重新开始。当你的所有文档都井井有条时,开始一个新上下文是轻而易举的。这就是交接文档的妙处。
但老实说,当与AI合作时——我将AI人性化,因为感觉就像我在与另一个人合作,按下重置按钮有时会触及我的人性。
限制兔子洞的一种方法是通过测试。
9. 测试
当我是软件工程师时,测试很糟糕。编写测试代码是软件工程师最单调的工作之一。
有了AI,就没有理由不测试你的代码。AI会为你编写所有测试。实际上,你可以在agent.md中指定80%的测试覆盖率,编码代理会神奇地添加测试。
我发现测试很有益;除了质量组件外,它给AI一个结构来验证其工作。这导致更高质量的代码和更好的AI使用。
一个警告,我经常让AI进行代码更改而不更新测试。代码工作后,我要求AI更新测试。有时AI过于认真对待测试,改变生产代码以匹配测试,撤销我们刚刚所做的所有更改。
我发现改进质量的另一种方法是通过自动化。
10. 自动化、自动化、自动化
让事情尽可能简单。
在AI之前,我经常听到:“一键部署,那就太好了,但我们没有时间。“现在没有借口,AI会为你自动化一切。
我的目标是让每个操作都是一个命令。例如:
- 如果我想启动应用程序?./start.sh。
- 我想运行测试。./test.sh。
- 部署应用程序?你猜对了./deploy.sh
自动化有两个目的:
- 首先,它为你节省时间。
- 其次,它从过程中消除了人为错误。
任何有摩擦和多个步骤的地方,我都想自动化它。但要解决更复杂的问题,我有时需要更强大的LLM。
11. 使用最佳LLM
不要在模型性能上吝啬。最新的模型很昂贵,但为了省钱,它们最终可能会花费你更多。
偶尔,Cursor建议使用自动模式来节省令牌。好吧,这听起来不错,会出什么问题呢?我总是乐于省钱。所以我打开它并实现了一个功能。它变成了一场灾难。我花了接下来的3小时使用最新的模型来解开这个烂摊子,花费的成本是我如果没有使用自动模式本应支付的两倍。我的观点不是自动模式不好;而是处理复杂问题需要最好的模型。
但有时,即使是最好的模型也不够;你需要合适的工具。
12. 工具
把AI想象成大脑;它思考,但它不能做任何事情。这就是工具的力量。它给AI行动的能力。
我将编码代理工具分为两类:
增强AI编码代理的两类工具
首先是设计用来增强软件开发的工具。想想GitHub的MCP或Anthropic的Sequential Thinking MCP;这些工具通常使编码代理更有能力。
其次是与项目交互的工具。例如,数据库MCP或命令行工具。这些工具给编码代理编写代码、运行代码和测试结果的能力,完成完整的反馈循环。
AI的妙处在于,如果你需要一个工具而没有,AI可以为你创建它。
以下是我与Cursor一起使用的工具:
第一个工具叫做Serena。Serena试图卸载诸如读取文件和将数据保存到内存之类的任务,这些任务通常会让AI生成命令来执行操作。这个项目的目标是减少使用的令牌数量并保持常见操作本地化。
我使用的下一个工具叫做Sequential Thinking,由Anthropic开发。如果它来自Anthropic,它几乎肯定是好的。这个工具的作用是将复杂问题分解为可管理的步骤。它通过结构化思维过程添加动态和反思性问题解决。
试试看,我在描述中放了链接。
我使用的最后一个工具是特定于项目的;它叫做Neo4j MCP,由AI创建。在使用Neo4j时它一直很宝贵。以前,AI会要求我运行查询,然后将结果粘贴到聊天中。这很快变得很麻烦。有了这个工具,AI运行自己的查询,不需要人工干预。
这很美妙,而且更快。如果你在开发过程中发现摩擦,要求AI帮助;你可能会惊讶于会出现什么。
总结
让我们诚实地说,与编码代理合作感觉很像与一个聪慧的初级程序员配对,他偶尔会忘记我们刚刚告诉他们的一切。这12个策略是我如何管理这种关系的。它们可能不适合每个人或你,这没关系。找到适合你的东西。所以我的问题是:什么对你有效?在下面留下评论,让我知道。
作者:Chuck Conway 是一位 AI 工程师,拥有近 30 年的软件工程经验。他构建实用的 AI 系统——内容管道、基础设施代理和解决实际问题的工具——并分享他沿途的学习成果。在社交媒体上与他联系:X (@chuckconway) 或访问他的 YouTube 和 SubStack。