共计 13351 个字符,预计需要花费 34 分钟才能阅读完成。
简介
我们与计算机交互和为其编写代码的方式正在发生变化。这是一个深刻的变化:涉及我们使用的工具、编程方式以及对软件产品和系统的思考方式。
而且变化超级快!每周都有新的 LLM 模型发布。新工具、新编辑器、新的 "氛围编程" 实践、新协议、MCP、A2A、SLOP……真的很难跟上这一切。所有东西都分散在不同的地方、网站、代码仓库、YouTube 视频等。
这就是我们决定写这份指南的原因。这是我们谦卑的尝试,将所有内容整合在一起,在一个地方以通俗易懂的形式,向你展示围绕 AI 编程 或AI 辅助代码生成 的实践和工具,没有废话。
- 如果你是程序员但还没有使用 AI 代码助手,这份指南适合你:它介绍了最新的工具和良好实践,帮助你在日常工作中充分利用它们。无论是让 AI 作为你的副驾驶,还是你作为 AI 代理的副驾驶。
- 如果你从未编程过,但对这个新的 "氛围编程" 概念感兴趣,想构建自己的 SaaS 和其他软件产品,这份指南绝对适合你:我们会尽力消除障碍,为你提供开始旅程所需的内容,同时对什么是真正重要的、什么只是 "炒作" 保持超级批判性。
好的,让我们开始吧!
📚 资源:
- 编程的终结(正如我们所知) by Tim O'Reilly
- 如何为开发和 AI 的未来做准备 by Santiago
- 初级开发者的复仇 by Steve Yegge
- 亲爱的学生:是的,AI 来了,除非你采取行动,否则你完了... by Geoffrey Huntley
- 如何构建代理 by Thorsten Ball
- 使用 LLM 编程 by Simon Willison
- 70% 问题:关于 AI 辅助编程的残酷真相 by Addy Osmani
- 成为 AI 增强工程师 by Mary Rose Cook
- 培养代理播客 by Amp 团队
- 软件正在改变(再次) by Andrej Karpathy
AI 编程?氛围编程?
所有这些术语都非常相似。但基本上 AI 编程是指使用 AI 模型(特别是现在的 LLM)及其周边工具来帮助你编写软件。它也被称为 "AI 代码生成" 或简称 "codegen",这是一个完整而迷人的研究和工程领域,可以追溯到 1950 年代我们使用 Lisp 生成代码的时候。现在我们有 LLM 作为驱动代码生成的主要引擎,还有一些神经符号混合方法的线索开始显现。AI 编程也是一种实践:如果你使用 Cursor 并通过 tab-tab-tab 获取补全,你就是在 "AI 编程";如果你完全使用 Cursor 的代理模式,你也是在 "AI 编程"。总之:这是使用 AI 模型帮助你生成代码的任何方式。通常这个群体中的人已经知道如何编程。
氛围编程是 AI 编程的升级版 :-) 在这里,你不太关心生成的代码,你只是给出提示并期望 AI 为你编写所有代码。这个术语是Karpathy 在 2025 年创造的,现在变得非常流行。在我看来,它正在帮助让编程对每个从未想过编程的人来说变得民主化!
所以,总之,无论你是使用 AI 讨论你的软件想法,还是只帮助编写现有代码库的部分代码,或者你完全在进行氛围编程,你都在使用 AI 帮助你生成代码。让我们称之为 AI 编程并继续前进。
我如何使用它?
你可以以许多不同的方式使用 AI 编程,但总结起来:
- AI 是你的副驾驶:你使用 AI 模型来增强自己,提高你的生产力。无论是启动 ChatGPT 帮助你为 SaaS 集思广益;还是使用 Cursor 自动完成你的文档字符串。这里有很多好处,特别是对于创意探索和自动化工作中无聊的部分。
- AI 是驾驶员:这里你是副驾驶。这就是 "氛围编程" 发生的地方。你打开 Cursor Agent 的 YOLO 模式,完全信任代理生成你的代码所做的一切。这是自动化自己的非常强大的方式,但需要一些关于如何设计系统、驯服代理和跳入你实际上不了解的代码意大利面的良好实践,特别是解决错误时。
你应该学习和实践两者!
但随着项目复杂性的增加,更倾向于副驾驶模式,远离纯粹的 YOLO 氛围编程。另一个人(或六个月后的你自己)越有可能必须维护代码,这就越重要。
🗺️ 路线图
如何开始?
- 如果你不知道如何编程并想尝试,我们建议从一些基于 Web 的工具开始,如 Bolt、Replit、v0 或Lovable。
- 如果你已经知道如何编程,安装 Cursor 或Windsurf。你可以从免费计划开始,然后升级到每月 20 美元的计划。考虑到你将获得大量 token 来使用最新的 LLM 模型,Cursor 非常好且便宜。VSCode 最近也推出了自己的Agent Mode。它与 Github Copilot 配对,使用代理工作流进行更改和编辑文件。其他编辑器也在快速添加代理功能,所以请查看你最喜欢的编辑器的网站了解更多信息。这些代理功能通常只在 Beta 或 Insider 版本中启用。
- 如果你想要更开源的替代方案,试试 OpenHands。你可以将它作为 Docker 容器运行,它会暴露一个 Web 应用。你需要创建一个Anthropic API 账户 来获取 API 密钥,或使用 OpenRouter 中可用的某个 LLM。
- 如果你已经知道如何编程并且像我们一样是终端狂热者,查看 aider、Claude Code 或OpenAI Codex。对于这些工具,你需要为 Anthropic Claude、OpenAI GPT 或 OpenRouter 设置 API 密钥。
- 如果你已经知道如何编程,既喜欢终端又喜欢某些 VSCode 风格,并且真的想体验为你并行运行子代理的力量,不在乎成本但在乎把事情做好,试试Amp。
建议:我们真的建议在 OpenRouter 创建一个账户。它非常简单,你将获得最新 LLM 模型的访问权限,甚至是它的免费版本。例如,我们现在最常用的 LLM 模型是 Gemini 2.5 Pro,可以通过 OpenRouter 免费运行(有每日信用额度,但对于使用 aider 和 OpenHands 等进行实验仍然是一个有趣的选择)。
重要提示:Claude Code 现在超级贵!你可以轻松地每天花费 50 美元。所以要小心,监控你的使用情况。这就是为什么建议从 Cursor 开始,这样你就不必担心它。
📚 资源:
如何为编程编写提示?又名如何进行氛围编程?
在你安装并稍微使用了这些工具之后,你会注意到它们会产生幻觉,进入无休止的循环试图修复可能的错误等。了解如何很好地提示很重要。一些提示:
- 不要在一个提示中要求所有东西。只提示 "嘿,为我的宠物店构建一个应用程序" 对软件工程师没有帮助,对 AI 更没有帮助 :-) 了解你的项目,先用 LLM 进行头脑风暴,创建 PRD(产品需求文档),制定计划并将其分解为任务。你会在下面找到如何使用 ChatGPT 为你创建一个的配方。
- 给它细节。如果你知道你想要什么,说出来。如果你知道你想要哪种编程语言、哪种技术栈、什么类型的受众,将其添加到你的提示中。
- Markdown 或任何其他轻量级的基于文本的格式(如 asciidoc)对 LLM 来说应该都可以解释。最后,文本将被编码为 token。但是,为了强调提示的特定部分,建议使用一些符号,如XML 标签。
- 将你的项目分解为任务和子任务。
- 针对不同的目标尝试不同的模型。
- 尝试不同的模型来确认和验证其他模型的输出。
- LLM 是 "是的机器",所以应用批判性思维。
在我们其余的示例中,我们将使用与 Markdown 关联的.md 文件扩展名。如果你更喜欢 asciidoc(它对结构化文档有更好的支持),使用它并在这些说明中替换 ".adoc"。LLM 不在乎,它们会处理 Markdown、asciidoc 或你抛给它们的任何其他纯文本格式。
这是一个通常效果很好的方法 / 程序 / 策略 / 工作流:
- 使用
ChatGPT 4.5、4o或o3,使用以下提示:
你是一名高级软件工程师。我们将一起构建一个项目的 PRD。非常重要:- 一次问一个问题
- 每个问题都应该基于之前的答案
- 深入了解所需的每一个重要细节
想法:< 在此粘贴你的想法 >
- 你将进入几分钟的问答循环。尽可能详细地回答。完成后(或当你决定足够时),发送此提示以指导模型将其编译为 PRD:
将这些发现编译成 PRD。使用 markdown 格式。它应包含以下部分:- 项目概述
- 核心要求
- 核心功能
- 核心组件
- 应用 / 用户流程
- 技术栈
- 实施计划
- 复制并将此文件保存到项目文件夹内的
docs/specs.md - 现在让我们为你的项目创建任务列表。询问以下内容:
基于生成的 PRD,创建一个详细的分步计划来构建这个项目。然后将其分解为相互构建的小任务。基于这些任务,将它们分解为更小的子任务。确保步骤足够小以便在一步中实施,但足够大以成功完成项目。使用软件开发和项目管理的最佳实践,没有大的复杂性跳跃。将任务连接到其他任务,创建依赖关系列表。不应该有孤立的任务。
非常重要:
- 使用 markdown 或 asciidoc
- 每个任务和子任务都应该是一个清单项
- 为每个任务提供足够的上下文,以便开发人员能够实施它
- 每个任务都应该有一个数字 id
- 每个任务都应该列出依赖的任务 id
5. 将其保存为项目文件夹内的 `docs/todo.md`
这是一个示例,使用 ChatGPT 4o 为一个简单的 CLI 工具进行的头脑风暴 / 规划会话,将其用作你的灵感。
现在为你的项目创建一个本地文件夹,记得在文件夹内安装并运行 git init 以保持版本控制。
这应该给你 PRD 和构建项目的任务列表!有了这些,你可以打开 Cursor(或其他 AI 代码编辑器),将其指向这些文件并询问:
你是一名高级软件工程师。研究 @docs/specs.md 并实施 @docs/todo.md 中仍然缺少的内容。每次实施每个任务并尊重任务和子任务的依赖关系。完成任务后,在列表中勾选它并继续下一个。
第一次 Cursor Agent 执行命令时启用 YOLO 模式,然后继续接受或在提示中询问 继续。
在 Cursor 的情况下,有时 LLM 会达到某些限制并要求重试。只需这样做并继续。是的,你正在进行氛围编程 :-)
这里你会找到基于此工作流在 10 分钟内构建的 CLI 工具的 Git 仓库:https://github.com/automata/localbiz
重要:虽然 "氛围编程" 超级酷,但了解你在做什么也真的很有趣 :-) 审查代理正在生成的代码也会在错误发生时(它们会发生!)帮助你很多,并提高你的代码审查技能(不仅是 AI 制作的,还有你自己和其他开发人员制作的)。
📚 资源:
- 你使用 Cursor AI 的方式不正确... by Geoffrey Huntley:这里 Geoff 介绍了他使用 Cursor 规则库的想法
- 从设计文档到代码:Groundhog AI 编程助手(和新的 Cursor 氛围编程元) by Geoffrey Huntley:前一篇文章的第 2 部分,Geoff 建议使用 LLM 自动构建规范(PRD)和 Cursor 规则
- 我目前的 LLM 代码生成工作流 by Harper Reed
- LLM 代码生成英雄之旅 by Harper Reed
- Claude Code:代理编程的最佳实践 by Anthropic:它针对他们的 Claude Code 工具,但有基于任何 LLM 模型的 AI 编程工作流的有趣提示
- 提示工程 by Lee Boonstra from Google:这是一份 70 页的文档,包含关于如何进行提示工程的有趣提示,其中有一节关于代码生成
- 提示工程指南 by Anthropic
- GPT 4.1 提示指南 by OpenAI
- RepoPrompt是一个帮助从项目中组装上下文的工具。值得观看 RepoPrompt 工作流 的概述视频,以了解如何轻松利用这些工具在氛围编程提示中提供更多上下文。
- 并非所有 AI 辅助编程都是氛围编程(但氛围编程很酷) by Simon Willison
我应该使用哪个 LLM 模型?
LLM 使用不同的目标进行训练和微调,这是一个关于你可能有的目标 / 用途以及应该使用哪个模型的综合列表:
| 目标 | 模型 |
|---|---|
| 头脑风暴 | GPT 5, 4o, o3, Grok |
| 编程 | Claude Sonnet 4, Gemini 2.5 Pro, Grok, GPT 5, o3, o4-mini |
鉴于 LLM 每天都在变化,此表很快就会过时。请查看以下排行榜以获得更准确的比较:
- OpenRouter 的模型 :将类别设置为
programming,并且仅过滤支持tools的模型通常是选择 AI 辅助编程模型的好方法 - Models.dev:AI 模型的开源数据库
- 代理排行榜
当可怕的 "速率限制" 消息出现时该怎么办
切换到不同的模型。
这可能发生的原因至少有两个。你可能发出了一个超过模型输入 / 输出 token 限制的繁重请求。或者,如果它运行的服务器集群遇到糟糕的一天,你可能会被限制以减少负载。你收到的错误消息通常对此不透明。你可以在 这里 找到更详细的解释。
不同的模型有非常不同的 token 限制。例如,在我 2025 年 4 月底写这篇文章时,gpt-4.1-mini 比 gpt-4.1 慷慨得多。在你的口袋里准备几个 API 密钥(这很便宜,因为你按使用付费)并访问描述速率限制的页面。这是 Anthropic 的 作为示例。
如何设置项目范围的规则?
你可以通过将规则或约定 "注入" 到 LLM 的上下文中来定义将应用于项目的规则或约定。每个编辑器都有一些方法来做到这一点:
- 在 Cursor 中,只需在
.cursor/rules/文件夹内创建 markdown 文件。Cursor 将确保在与 LLM 的所有通信中应用这些。 - 在 Aider 中,创建包含你想要使用的 规则 / 约定 的 markdown 文件(如
rules.md),并在你的.aider.conf.yml文件中添加以下内容:read: rules.md。
此外,许多工具支持在主目录中配置规则 / 约定文件以应用于所有项目。例如,在 Aider 中,你基本上可以在名为 ~/.global_conventions.md 的文件中添加全局约定,然后使用 read: [~/.global_conventions.md, rules.md] 将其添加到.aider.conf.yml。
你可以将 PRD 的一部分添加为规则,例如,如技术栈或代码格式和样式的一些指南。
规则非常强大,你甚至可以使用 AI 本身为你创建规则!查看 Geoff 的方法。
📚 资源:
- Cursor 规则文档
- Windsurf 规则文档
- Aider 约定文档
- Aider 约定集合:用于 Aider 的社区贡献约定文件集合。
- Awesome Cursor 规则:增强 Cursor AI 体验的.cursorrules 文件精选列表。
如何避免幻觉?什么是 PRD?
PRD。什么?!他们说解决工程问题的最佳方法是创建一个新的首字母缩写词,这里也不例外 :-) 开玩笑的...PRD 是产品需求文档的缩写。基本上,它只是一堆文档(或只有一个文档)描述你的软件项目的需求和其他细节。
事实证明,如果你让你心爱的 LLM 自由发挥,没有太多关于要做什么的上下文,它会产生相当狂野和快速的幻觉。你需要驯服这头野兽,PRD 是做到这一点的好方法。
我最喜欢 PRD 的是它们对任何人都非常有帮助,从从未编程过的人到高级 SWE 或产品经理。
你不需要任何背景就可以开始 PRD,你只需要你的应用想法,就这样。
查看 这里 如何使用 LLM 为你创建一个。
保持提示日志
记录你发送的每个提示,以及(这很重要)你对你在想什么和你得到的任何惊喜的穿插评论。这个提示日志是你的设计意图记录;对于没有参与项目的任何人(包括六个月后忘记你在想什么的你)来说,它将是无价的。
还没有这个文件名称的约定,你可以使用类似 vibecode.adoc 或history.md的东西。
有像 aider 这样的工具可以保留你与 LLM 进行的所有来回聊天的日志。所以一个选择是设置以下环境变量并将所有这些历史文件保持在版本控制下:
# 历史文件:## 指定聊天输入历史文件(默认:.aider.input.history)#AIDER_INPUT_HISTORY_FILE=.aider.input.history
## 指定聊天历史文件(默认:.aider.chat.history.md)#AIDER_CHAT_HISTORY_FILE=.aider.chat.history.md
## 将与 LLM 的对话记录到此文件(例如,.aider.llm.history)#AIDER_LLM_HISTORY_FILE=.aider.llm.history
有了这些文件,你可以在进行时用你自己的想法对它们进行评论。当你(和其他人)将来重新访问项目时,你可以学到很多关于你的项目的东西,你可能会开始注意到你可以在下一次会话中使用的模式和提示。
如何开始我的项目?
Web 应用(前端)
现代 Web 开发非常令人不知所措。有大量的 JavaScript/TypeScript 框架、CSS 框架等,所以真的很难开始并思考使用哪一个。在过去几周构建前端之后,这是我最终使用的:
- Next.js,这样你可以部署到 Vercel 并拥抱他们的生态系统(可能很快就会变得昂贵)
- Vanilla React 并使用 React Router,这样你可以部署到任何地方
- Remix,这样你可以获得良好的路由支持,仍然可以部署到任何地方
- FastHTML,如果你喜欢 Python 并且更关心暴露核心后端功能(例如一些数据分析或 AI/ML 模型管道)而不是超级漂亮的 UI
像 Lovable 这样的基于 Web 的 AI 编程平台使用 React,而 v0 使用 Next.js。
一个技巧是在 Lovable 开始你的项目(你可以在他们的免费计划中每天获得最多 5 条消息),将其设置为输出你的项目到 GitHub,然后只需在本地机器上克隆它并使用 Cursor 继续 AI 编程。然后你可以将其部署到 Render、Fly.io、CloudFlare 等地方。没有附加条件。特别是如果你在后端有特定 / 更复杂的例程,这会很有趣。
如果你也在编码后端,确保在 Git 仓库的根文件夹中为后端和前端分别有一个文件夹;或者为后端和前端有不同的仓库,然后将它们添加到 Cursor 中的同一工作区(这样你就可以在前端代理中引用后端的文件,反之亦然)。
为了避免过早地将前端集成到后端,指示 AI 代理使用模拟 / 虚拟数据,这样你可以在实现后端后稍后更新它。
另一个有趣的提示是使用好的 MCP 工具将你的编程代理集成到 playwright 或 browser-use。这样你可以避免从 Web 浏览器到你的 AI 代理的错误复制粘贴循环,因为 AI 将控制浏览器并自己抓取截图和错误消息。
如果你想在 Web 应用中使用 3D 内容并且你正在使用 React,使用 React Three Fiber 而不是尝试直接使用 three.js 库会很有趣。R3F 使处理状态更容易,因为它将所有 three.js 对象包装为 React 组件。
后端
后端在像 Lovable 这样的基于 Web 的工具中做得不好。所以你可能需要动手使用 Cursor/Windsurf/aider 或任何其他非基于 Web 的工具。
使用 Python 和 FastAPI 是一个很好的选择。如果你更喜欢使用与前端相同的语言(猜测大多数时候是 JavaScript 或 TypeScript),你可以使用 Nodejs 和 Express。
后端是端到端测试的绝佳目标,所以考虑指导代理为每个新功能及其子任务编写测试并运行它们。
完成后端后,你可以使用其文档(特别是关于 HTTP 端点的文档)作为在前端工作的代理的输入。这样你就能够将前端从使用模拟 / 虚拟数据移动到来自后端的真实数据。
游戏
对于小型游戏,在单个.js 文件中使用 vanilla JS,并为 3D 游戏使用 threejs 或为 2D 游戏使用 pixijs。
游戏全都是关于好的资产,所以考虑使用 Tripo AI 和 Anything World 等服务来生成 3D 资产并对它们进行绑定 / 动画。
如何处理错误和 bug?
关于编程和软件,你必须知道的一件事:它们会失败。无论你尝试什么来防止这种情况,它都会发生。所以让我们首先接受这一点,并与错误和 bug 成为朋友。
这里的第一个策略是模仿 SWE 所做的:查看解释器 / 编译器给你的错误消息并尝试理解它。将错误复制并粘贴回 LLM 并要求它修复它。另一个好主意是添加非常适合调试的 MCP 工具,如BrowserTools。
MCP、SLOP 和 A2A 是什么,我如何从中受益?
MCP 是模型上下文协议的缩写。它由 Anthropic 开发,但其他 LLM(如 OpenAI 的 GPT 和 Google 的 Gemini)也开始考虑它。这是一个强大的概念,它与另一个概念密切相关:函数 / 工具调用。
工具调用是 LLM 调用工具或函数来执行某些操作的一种方式。这是一种用新信息更新 LLM 的知识窗口(在过去的数据上训练)的方式,同时将其与外部工具和端点集成。例如,如果你想在 Web 上搜索一些信息,你可以指示 LLM 使用执行此操作的工具(例如 嘿,如果你需要在 Web 上搜索某些内容,请使用此工具:search(term))。然后,LLM 将调用工具,获取输出并在为你生成新预测时使用它,而不是花费许多 token、迭代步骤和解析工作负载。
MCP 通过为其创建标准来扩展这个想法。这样我们可以创建一个 MCP 服务器,它将向 LLM 暴露一些资源(例如数据库)或工具(例如将计算某些内容并返回结果的特定软件)。
等等,但它不只是一个 API 吗?我不能只是用 REST API 服务器 / 客户端和 LLM 提示中的一些解析来模仿相同的东西吗?有点,这就是 SLOP(简单语言开放协议)提出的。但是,拥有像 MCP 这样的标准使得确保 LLM 将本地支持它而无需在客户端进行额外的解析和技巧变得更容易。
A2A(代理到代理协议)在游戏中相当新。它由 Google 创建以 "补充"MCP,专注于多代理通信,而 MCP 专注于 LLM- 工具通信。
重要:有很多好的 MCP 服务器,像 Cursor 这样的编辑器支持它们。现在,只有 Anthropic Claude LLM 支持它们,所以当你想使用 MCP 工具时,确保使用 Claude。
Anthropic 在此处保留 MCP 服务器的更新列表:
https://github.com/modelcontextprotocol/servers
📚 资源:
从头开始还是使用样板?
通常 LLM 从头开始做得更好。但你也可以从样板开始(基本上是一个入门工具包:一个包含初始源文件骨架和配置的文件夹,用于使特定技术栈的工作项目运行所需的最小源文件和配置),并在上下文窗口中添加规则以确保它将尊重你的入门工具包。
另一个好主意是使用 Cursor 自己的索引功能对你的项目(你刚刚用入门工具包创建的)进行索引,或者使用像 repomix 或files-to-prompt这样的工具。
绿地 / 干净状态 / 新项目与现有代码库
如果你有一个现有的代码库,一个好主意是使用 repomix 或files-to-prompt将其打包到上下文窗口中。
另一个很好的提示是在任务级别而不是项目级别提示更改。例如,专注于你想要实现的一个功能并要求 Cursor Agent 实现它。为特定功能提供一个迷你 PRD。想象一下你正在指导一个初级开发人员在特定的 GH ticket 上工作 :-)
📚 资源:
结构良好的提示用于结构良好的设计
目前(2025 年 4 月),LLM 已经擅长生成工作代码,但它们不太擅长生成结构良好的代码 - 也就是说,具有适当的分层和关注点分离。良好的结构对于可读性和可维护性很重要,并降低了你的缺陷率。
思考你的设计,然后在产生良好结构的序列中进行提示工程。例如,在以数据库为中心的应用程序中,首先指定你的记录类型是一个好主意,然后引导你的 LLM 构建一个封装对它们访问的管理器类或模块。只有在那之后,你才应该开始提示业务逻辑。
更一般地说,当你提示时,考虑将引擎代码与策略代码分开,并以引导 LLM 这样做的序列发出提示。
你应该在项目规则中包含一个告诉 LLM 不要违反分层的规则 - 如果它需要一个新的引擎方法,它应该向干净的封装层添加一些东西,而不是将低级实现细节与业务逻辑纠缠在一起。
另一个有趣的做法是从项目的核心开始,花时间确保以你想要的方式实现和组织主要功能。你甚至可以编写类和函数骨架,然后让 LLM 填补空白。只有在你有了良好的基础并进行了良好的测试之后,你才能转向这个核心库的消费者,例如将其作为 CLI 或 REST API 暴露给未来的 Web 应用。
我应该使用 TDD 或任何其他类型的测试吗?
是的,测试比以往任何时候都更重要。在 2025 年的当前技术水平下,LLM 擅长生成干净和正确的代码,但它们有时会产生幻觉 - 更重要的是,它们可能无法理解规范并生成正确的代码来做错误的事情。
即使我们获得完全的人类等效的通用人工智能,这种情况也不太可能改变 - 毕竟,人类也会误解规范!语言的模糊性就是为什么即使在未来测试也将继续很重要。
使用 TDD 创建你想要的结果的骨架可以真正帮助指导 LLM 实现你正在测试的目标代码片段。指示你的 LLM 创建测试并运行它们也是一个很好的做法:它将能够将破坏给定测试的可能错误添加到其上下文中并对其采取行动,尝试使测试通过。
测试对于与 LLM 一起增长你的代码库至关重要,只有在所有当前测试通过时才向前移动。
基于属性的测试在与 LLM 一起工作时真的很有趣。测试整个值的域 / 范围而不是你指出的特定值将有助于确保代理生成的代码即使在以后的更改最终遇到你事先没有想到的边缘情况时仍然有效。每种语言都有很好的基于属性的测试库,如 Python 的 hypothesis 或 JavaScript/TypeScript 的fast-check。
在尝试编写或修复测试时,始终检查 LLM 生成的代码也很重要:有时它们甚至会尝试生成一些硬编码的输出只是为了使测试通过 :-)
如何使其安全?
非 AI 辅助编程建议的完全相同的规则和最佳实践在这里也有效。研究更多关于它们并应用到你的代码中。这是一个初始安全检查列表:
- 不要信任 AI 生成的代码。始终验证。记住,AI 不会对你在外面运行的代码负责,你会!
- 不要将任何 API 密钥或其他秘密存储为硬编码字符串,特别是在前端代码中。在后端作为受保护的环境变量存储(例如 Vercel 等平台提供此选项)
- 查询 API 端点时,始终使用 HTTPS
- 创建 HTML 表单时,始终进行输入验证和清理
- 不要在
localStorage、sessionStorage或 cookies 中存储敏感数据 - 在包需求中运行验证器和安全漏洞扫描器
如何在 Claude Code 中使用任何 LLM?
你只想在 Claude Code CLI 中尝试 Kimi K2 或其他 LLM?你可以使用 claude-code-router 使 Claude Code CLI 使用在你的机器本地运行的 "代理" 将其路由到 OpenRouter 提供的任何模型!下面的说明适用于 Kimi K2,但你可以将其调整为你想要的任何其他 LLM。
首先在 OpenRouter 创建一个账户并获取你的 API 密钥。
确保你已安装 Claude Code CLI:
npm install -g @anthropic-ai/claude-code
然后安装 claude-code-router:
npm install -g @musistudio/claude-code-router
将以下行添加到你的 ~/.claude-code-router/config.json 文件中,将 OPENROUTER_API_KEY 替换为你从 OpenRouter 获取的 API 密钥:
{
"Providers": [
{
"name": "kimi-k2",
"api_base_url": "https://openrouter.ai/api/v1/chat/completions",
"api_key": "OPENROUTER_API_KEY",
"models": ["moonshotai/kimi-k2"],
"transformer": {"use": ["openrouter"]
}
}
],
"Router": {"default": "kimi-k2,moonshotai/kimi-k2"}
}
现在只需通过路由器运行 Claude Code:
ccr code
你应该看到 Claude Code API Base URL: http://127.0.0.1:3456,这意味着它正在使用 claude-code-router 创建的本地代理。就是这样!
如果你只对 Kimi K2 或 Moonshot 的其他模型感兴趣,另一种选择是使用 Moonshot 本身提供的模型:
https://github.com/LLM-Red-Team/kimi-cc/blob/main/README_EN.md
如何创建我自己的 AI 编程代理?
我们正在研究一些关于如何在构建我们自己的工具时做到这一点的教程,所以请继续关注。最好的介绍是 Thorsten 的 这个实用教程,你可以在其中使用 Go 逐步构建一个使用最少工具量(list_files、read_file、edit_file)的简单代理。
如果你想更深入,Gerred 的 这系列开源书籍 绝对是一个很好的开始。
✨ 特定工具和代理的提示和技巧
Claude Code
- Claude Code 指南:涵盖每个可发现的 Claude Code 命令,包括许多在基础教程中不广为人知或没有记录的功能
🛠️ 工具
这里我们保留围绕使用 AI 编程的主要工具的更新列表。我们测试了其中的大部分,你会发现我们在测试它们期间的诚实意见。
编辑器 / IDE
CLI
Web 应用
后台 / 远程代理
实用工具
- Specstory
- Claude Task master
- CodeGuide
- repomix
- files-to-prompt
- repo2txt
- stakgraph
- Repo Prompt
- Uzi
- Claudia
🤗 值得关注的人
一些非常有趣的人正在实施 AI 编程模型 / 工具或在他们自己的项目中使用它。
- Addy Osmani
- Andrej Karpathy
- Beyang Liu (Amp)
- Cat Wu (Claude Code)
- Eric S. Raymond
- Eyal Toledano (TaskMaster)
- Geoffrey Huntley
- Gerred Dillon
- Harper Reed
- Nathan Wilbanks (agnt, SLOP)
- Pietro Schirano
- Quinn Slack (Amp)
- Sandeep Pani (Aider, AgentFarm)
- Simon Willison
- Vilson Vieira
- Thorsten Ball (Amp)
- Xingyao Wang (OpenHands, AllHands)
💖 致谢
本指南受到 Maxime Labonne 的优秀 llm-course 的启发。
特别感谢:
- Gabriela Thumé为一切 ❤️
- Albert Espín提供深思熟虑的反馈和第一次错误更正
- Geoffrey Huntley向我介绍基于属性的测试以及他所有关于自主代理的精彩教程和实验
- ChatGPT 4o 生成你在顶部看到的横幅,灵感来自令人难以置信的艺术家Deathburger
⭐ 贡献
如果你想贡献更正、反馈或一些缺失的工具或参考资料,请随时打开新的 PR、新 issue 或与 Eric 或Vilson联系。
如果你喜欢这份指南,请考虑给它一个星标⭐并关注它以获取新的更新!
⚖️ 许可证
MIT
译者注
这份指南是一份非常全面的 AI 辅助编程入门和进阶资料。主要内容包括:
核心概念
- AI 编程 vs 氛围编程:AI 编程是广义概念,氛围编程更强调完全依赖 AI 生成代码
- 两种模式:AI 作为副驾驶(辅助你)vs AI 作为驾驶员(你辅助 AI)
工具推荐
- 初学者:Bolt、Replit、v0、Lovable 等 Web 工具
- 已会编程:Cursor、Windsurf、VSCode Agent Mode
- 命令行爱好者:aider、Claude Code、OpenAI Codex
- 高级用户:Amp(支持并行子代理)
最佳实践
- 使用 PRD:产品需求文档帮助避免 AI 幻觉
- 分解任务:将项目分解为小任务和子任务
- 保持提示日志:记录设计意图和思考过程
- 编写测试:TDD 和基于属性的测试特别重要
- 设置项目规则:使用.cursor/rules 或类似机制
提示工程技巧
- 不要一次性要求所有功能
- 提供详细的上下文和技术栈信息
- 使用 XML 标签强调重点
- 一次专注一个任务
技术选型
- 前端:Next.js(Vercel)、React + React Router、Remix、FastHTML
- 后端:Python + FastAPI、Node.js + Express
- LLM 模型:Claude Sonnet 4、Gemini 2.5 Pro、GPT- 5 等
重要协议
- MCP(模型上下文协议):标准化 LLM 与工具的交互
- SLOP(简单语言开放协议):MCP 的简化替代
- A2A(代理到代理协议):多代理通信
安全建议
- 不要盲目信任 AI 生成的代码
- 妥善保管 API 密钥
- 进行输入验证和清理
- 运行安全扫描
这份指南强调的核心思想是:在提高效率的同时保持对代码的理解和控制,不要完全依赖 AI,而是将其作为强大的辅助工具。