氛围编码:对话式软件开发 — 第三部分:提示词纪律
据推测,氛围编码可能会从根本上改变我们构建软件的方式。我们不再编写代码行,而是用简单的英语描述我们的目标,然后生成可运行的软件。
在我的上一篇文章中,我尝试了一些氛围编码工具并分享了实践经验。如果你密切关注,可能会注意到一些微妙但重要的细节:我正在使用自然语言作为接口。我选择的词语塑造了AI如何解释和构建软件。而在这个过程中,隐藏着一个关键但常被忽视的层:系统提示词。
那么,提示词到底是什么?
将氛围编码视为一个聊天驱动的工程环境。你发送的每条消息,或者说提示词,不仅仅是随意的对话。它更像是为你的AI助手编写操作手册。提示词设定了基本规则。它可以定义你偏好的技术栈、编码风格、命名约定,或者AI是否应该在做出假设之前请求澄清。换句话说,它是你用来对齐AI与你的意图的接口。
为什么提示词很重要?
根据我的经验,如果提示词不清晰或不一致,事情很快就会偏离轨道。以下是我在提示词模糊时遇到的一些问题:
- AI选择了错误的编程语言。
- 它引入了陌生且有时不必要的库。
- 它忽略了先前的上下文并给出了矛盾的结果。
即使使用像ChatGPT、Claude或Cursor这样的先进工具,指令的模糊性也可能导致不可预测的行为。这不是模型质量的问题,而是我们给出的指令的清晰度问题。
配置系统提示词
使用大多数现代AI平台的一个好处是,它们允许用户定义系统级提示词。你可以全局(在整个工作区)或本地(针对每个项目)定义提示词。这有助于保持一致性,避免重复上下文。
我现在养成了在每个编码会话开始时明确设置系统提示词的习惯。这就像配置你的开发环境,但以对话形式进行。
设计有效的提示词
我仍在不断学习,但我想分享一个对我很有效的示例提示词。其想法是从一开始就设定明确的约束。这减少了AI误解的空间,并降低了会话期间的摩擦。以下是我经常使用的示例系统提示词:
|
|
这个提示词做了几件重要的事情:
- 它定义了助手的角色(前端开发者)。
- 它设定了技术边界——没有Python、TypeScript或意外的库。
- 它鼓励AI在模糊时提问。
你可以根据项目需求轻松扩展这个提示词。例如:
- 所有UI组件必须具有可访问性。
- 确保移动端响应式设计。
- 后端基于Java API构建。
这种初始对齐通过减少时间消耗和限制AI交互来简化开发。你可以引导AI根据你的开发方法和技术选择进行聚焦。
另一个观察是,AI助手在使用常用框架和工具(如React、Tailwind和Node)时表现出更高的效率。这些模型已经看到了更多这些技术的示例,这意味着你会得到更可靠和相关的响应。
新开发者:不要过度思考
如果你一直关注,到目前为止的讨论可能会让你觉得在开始氛围编码之前需要掌握十几个概念。但这不是真的。如果你刚刚开始,我的建议是设定一些清晰的边界并开始行动。让我们以创建一个交互式仪表板为例。以下是一个有效的提示词示例:
|
|
大多数AI助手(如ChatGPT、Claude和Gemini)会帮助你完成后续步骤。助手会提出澄清你需求的问题,这允许它们开发你的技术栈和系统提示词。
帮助你设计更好提示词的工具
随着我继续实验,我意识到正确的提示词有多重要。好消息是?你不必猜测。像Anthropic Claude Console、Google Gemini和ChatGPT这样的工具可以帮助你实时测试、迭代和优化提示词。以下是我使用Google Gemini优化提示词的一个示例。
我的提示词优化过程
我从这个基础提示词开始,探索伦敦空气质量数据:
|
|
注意:如果伦敦空气质量数据在上述链接不可用,我在撰写本文时已提交了一份CSV副本。
Gemini提出了一些聪明的后续问题,关于:
- 我设想的可视化类型
- 我期望的交互性类型
- 布局偏好
- 我计划如何处理数据源
为了缩小范围,我将焦点引导到仅一个工作表:
|
|
基于此,Gemini帮助我生成了一个优化的系统提示词,我可以用来生成我的仪表板。以下是输出提示词:
|
|
最终想法
系统提示词需要持续优化,因为它们需要匹配项目的不断变化的需求,就像我们重写代码以增强其清晰度和可维护性一样。你的提示词应随着项目的发展而演变,以反映:
- 新工具或技术栈变化
- 更新的编码模式或风格指南
- 架构或设计决策的转变
一个好的提示词不仅仅是给助手的基本指令。你可以将其视为你和AI助手之间的设计合同。在我的下一篇也是最后一篇文章中,我将继续讨论如何进一步微调提示词。
我现在的建议是不要过于担心第一次就完美。从简单开始,迭代,并将你的提示词视为工程过程的一部分,在这里你的意图与实现相遇。