Skip to content

AI Coding 方法论:Prompt Engineering

Published:

Prompt Engineering 简介

Prompt Engineering(提示工程)是构建能够可靠、一致地产生高质量输出的提示的过程。在AI编码领域,这是与AI模型有效沟通的关键技能。

核心原则

明确和直接的指令

现代AI模型对清晰、明确的指令反应良好。在指示中要具体,说明你期望的输出格式和内容。

例如,与其说”创建一个分析仪表板”,不如说”创建一个分析仪表板。包括尽可能多的相关功能和交互。超越基础功能,创建一个全功能的实现。“

添加上下文以提高性能

提供上下文或说明指令背后的原因,可以帮助模型更好地理解你的目标并提供更有针对性的响应。

例如:

你的响应将由文本转语音引擎朗读,因此不要使用省略号,因为文本转语音引擎不知道如何发音。

谨慎使用示例和细节

现代AI模型会关注细节和示例作为指令遵循的一部分。确保你的示例与你想要鼓励的行为一致,最小化你想要避免的行为。

关键技术

使用XML标签结构化提示

当提示涉及多个组件(如上下文、指令和示例)时,XML标签可以改变游戏规则。它们帮助模型更准确地解析提示,从而产生更高质量的输出。

推荐的标签使用方法:

链式思考(Chain of Thought)提示

对于需要复杂推理的任务,让模型”思考”可以显著提高性能。这被称为链式思考提示,鼓励模型逐步分解问题,从而产生更准确和细致的输出。

基本方法是在提示中包含”逐步思考”。更高级的方法是使用XML标签将推理过程与最终答案分开:

<thinking>
首先分析问题的各个方面...
然后考虑可能的解决方案...
最后选择最佳方法...
</thinking>
<answer>
最终答案...
</answer>

角色提示

使用系统参数给模型分配角色是提高性能的最强大方法之一。合适的角色可以将模型从通用助手转变为虚拟领域专家。

例如:

你是一位经验丰富的Java架构师,专注于企业级应用开发。

或者:

你是一名高级JavaScript工程师,专长于React和Node.js全栈开发。

高级提示技术

零样本提示

零样本提示是指在没有提供任何示例的情况下,直接向模型提出任务要求。现代经过大规模训练的AI模型具备执行零样本任务的能力。

示例:

将文本分类为中性、负面或正面。

文本:我认为这次假期还可以。
情感:

这种方法适用于简单任务,但对于复杂任务可能效果不佳。

少样本提示

少样本提示通过在提示中提供少量示例来引导模型完成任务,实现上下文学习。这种方法在模型规模足够大时效果显著。

示例:

"whatpu"是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的whatpus。
"farduddle"是指快速跳上跳下。一个使用farduddle这个词的句子的例子是:

通过提供1个或多个示例,可以显著提高模型在复杂任务上的表现。

自我一致性

自我一致性是一种高级提示技术,通过生成多个推理路径并选择最一致的答案来提高准确性。这种方法特别适用于算术和常识推理任务。

过程:

  1. 使用少样本链式思考提示生成多个推理路径
  2. 对每个推理路径得出答案
  3. 选择出现频率最高的答案作为最终结果

生成知识提示

对于需要特定领域知识的任务,可以通过提示模型生成相关知识来提高准确性。

过程:

  1. 首先生成与任务相关的知识
  2. 将生成的知识整合到提示中
  3. 基于整合后的知识得出预测

这种方法可以帮助模型在缺乏特定领域知识时做出更准确的预测。

提示词格式与要素

基本提示词格式

<问题>?

<指令>

零样本提示格式

Q: <问题>?
A:

或更简化的:

What is prompt engineering?

少样本提示格式

<问题>?
<答案>

<问题>?
<答案>

<问题>?

问答格式示例:

Q: <问题>?
A: <答案>

Q: <问题>?
A: <答案>

Q: <问题>?
A:

Prompt Engineering在AI编码中的应用

策略先行,而非直接要代码

在直接要求生成代码之前,先描述你下一步想做什么,让AI提供几种高级方法及其优劣,你选择后再让它生成代码初稿。这种方式有助于确保解决方案的合理性和最优性。

结构化提示提升准确性

通过使用XML标签将需求、上下文、指令和示例结构化,可以显著提高AI生成代码的准确性。例如:

<task_description>
实现一个用户认证系统
</task_description>

<requirements>
1. 支持用户名/密码登录
2. 支持JWT token生成和验证
3. 密码需要加密存储
</requirements>

<example>
参考以下登录接口的实现:

<instructions>
请按照以下步骤实现:
1. 创建用户模型
2. 实现注册接口
3. 实现登录接口
4. 实现JWT token生成和验证中间件
</instructions>

链式思考提升代码质量

在处理复杂编码任务时,引导AI进行链式思考可以提高代码质量。例如,在实现算法时,可以让AI先分析问题,再设计解决方案,最后编写代码:

<thinking>
首先分析算法需求...
然后考虑可能的实现方式...
评估各种方式的时间复杂度和空间复杂度...
选择最优方案...
</thinking>

<implementation>
// 具体实现代码
</implementation>

实际应用建议

  1. 明确期望:在提示中清楚地描述你想要什么
  2. 提供上下文:解释为什么需要这些信息
  3. 使用结构化格式:通过XML标签组织提示内容
  4. 引导思考过程:让模型展示其推理步骤
  5. 分配适当角色:根据任务给模型分配合适的专家角色
  6. 测试和迭代:持续改进提示以获得更好的结果
  7. 格式规范:遵循标准的提示词格式,如零样本或少样本格式

Prompt Engineering 是与AI协作的核心技能,掌握这些技术将大大提高AI编码的效率和准确性。通过系统化的提示设计,我们可以更好地利用AI模型的能力,同时避免其局限性。

评论