Prompt Engineering(提示工程)已经成为解锁大型语言模型(LLM)潜力的关键技能。本文将深入探讨提示工程的基础知识,揭示其重要性,并提供实用的技巧和策略,帮助你从零开始,成为一名提示工程领域的专家。
在人工智能领域,一个有趣且日益重要的现象正在发生:两个经验水平相当的开发者,面对相同的项目需求,却在使用人工智能工具时表现出截然不同的结果。一个开发者能够持续地从AI那里获得干净、可用的代码,而另一个开发者则苦于应对令人沮丧的输出,不得不不断重写提示。造成这种差异的根本原因是什么?答案就是提示工程的掌握程度。这不仅仅是运气问题,而是一门可以学习和精通的技能,它能够显著提升你与大模型交互的效率和效果。就像文章开篇提到的例子,作者的朋友抱怨“AI从不给我可用的代码!”,而作者本人则依赖于“20-70-10”的工作流程:20%的时间用于计划和系统设计,70%的时间用于通过精确的提示进行AI执行,10%的时间用于审查和测试。最终的秘密不在于AI模型本身,而在于如何与它沟通。
提示工程的重要性:弥合AI性能差距
近期发布的基准测试结果揭示了一个惊人的事实:即使是相同的AI模型,仅仅由于提示质量的不同,其性能也会产生巨大的差异。例如:
- Claude Opus 4: 在SWE-bench测试中得分72.5%
- Claude Sonnet 4: 在SWE-bench测试中得分72.7% (免费版本!)
- GPT-4.1: 在相同基准测试中得分54.6%
- Gemini 2.5 Pro: 在SWE-bench测试中得分63.2%
SWE-bench是一个软件工程基准测试,用来评估AI模型生成代码的能力。从这些数据可以看出,精心设计的提示能够显著提升模型的性能,使你能够获得生产级别的代码,而不是花费大量时间调试无效的AI生成代码。这种差距凸显了提示工程的重要性,它不再是一个可选项,而是成为了高效利用AI的必备技能。
提示工程的局限性:并非万能药
虽然提示工程非常重要,但它并非万能药。我们需要清醒地认识到它的局限性。
- 无法修复根本的逻辑错误:提示工程不能代替你对软件架构和问题本身的理解。如果你对问题理解不透彻,即使是最好的提示也无法生成正确的代码。
- 无法生成你自身不理解的代码:提示工程只能在你理解的范围内提供帮助。如果你要求AI生成你完全不理解的代码,你将无法验证其正确性,也无法进行必要的修改。
- 无法在缺乏足够信息的情况下创造奇迹:AI需要足够的信息才能生成有用的结果。如果你的提示缺乏足够的上下文或提出了不可能的要求,AI将无法满足你的期望。
理解LLM的工作机制:预测下一个Token
要成为一名优秀的提示工程师,你需要理解LLM的工作机制。LLM本质上是一个非常复杂的预测引擎。它接收一段文本作为输入,然后根据训练数据预测下一个Token应该是什么。Token可以是单词、字符或代码片段。每一个词、每一个空格、每一个指令都会影响下一个预测。
例如,比较以下两个提示:
Before (理解不足):
“写一些用户认证的代码”
After (理解Token预测):
“你是一名资深的Full-Stack开发者。使用Node.js和JWT tokens编写一个安全的用户认证系统。包括:
- 带有邮箱验证的注册接口
- 带有速率限制的登录接口
- 使用bcrypt进行密码哈希
- JWT token生成和验证中间件
返回带有注释的工作代码,解释安全措施。”
第二个提示为模型提供了清晰的上下文,使其能够预测出更有用、更安全、更适合生产环境的代码。
配置基础:温度(Temperature)与Top-K/Top-P
除了编写清晰的提示,还需要掌握一些基本的配置参数,例如温度(Temperature)、Top-K和Top-P。
- 温度(Temperature):控制Token选择的随机性。较低的温度会产生更确定性的结果,而较高的温度会产生更多样化和意外的结果。
- 实际应用:
- 生成标准登录函数:温度 0.1 (可预测,可靠)
- 撰写创意营销文案:温度 0.8 (多样化,引人入胜)
- 实际应用:
- Top-K 和 Top-P:微调输出质量。Top-K采样选择模型预测分布中可能性最高的K个Token。Top-P采样选择累积概率不超过特定值的Top Token。
- 实际应用:
- 生产代码:Top-K: 20, Top-P: 0.9 (专注,可靠)
- 头脑风暴:Top-K: 40, Top-P: 0.95 (创意,多样化)
- 数学问题:温度: 0, Top-K: 1 (确定性)
- 实际应用:
核心技巧:你的提示工程工具包
以下是一些核心的提示工程技巧,可以帮助你更有效地利用LLM。
-
零样本 提示(Zero-Shot Prompting):在没有提供任何示例的情况下,直接向模型提出问题或请求。
Before (模糊):
“创建一个数据库Schema”
After (具体的零样本提示):
“为一个电子商务平台设计一个PostgreSQL数据库Schema。包括:
- 带有认证字段的用户表
- 带有库存跟踪的产品表
- 带有支付状态的订单表
- 具有适当外键的关系
- 用于性能优化的索引
返回带有约束的SQL CREATE语句。”
-
少样本 提示(Few-Shot Prompting):通过提供多个示例来“教导”模型。这种方法向模型展示了它需要遵循的模式。
Before (没有示例):
“为这个API端点编写文档”
After (带有示例的少样本提示):
“按照以下格式为以下API端点编写文档:
EXAMPLE:
POST /api/users
Description: 创建一个新的用户账号
Parameters:
- email (string, required): 用户的邮箱地址
- password (string, required): 至少8个字符
Response: 201 Created with user object
EXAMPLE:
GET /api/users/{id}
Description: 根据ID检索用户信息
Parameters:
- id (integer, required): 用户的唯一标识符
Response: 200 OK with user object or 404 Not Found
现在为以下端点编写文档:
PUT /api/products/{id}/inventory“
-
系统 提示(System Prompt) vs 用户 提示(User Prompt):
- 系统提示(System Prompt):用于设置上下文和角色,例如:”你是一位拥有10年经验、专注于安全的后端开发人员。始终优先考虑数据保护并遵循OWASP指南。回复包含错误处理的生产就绪代码。”
- 用户提示(User Prompt):用于提出具体的任务,例如:”为我们的用户管理系统创建一个密码重置流程。”
将系统提示和用户提示结合使用,可以产生比将所有内容混合在一起更好的结果。
20-70-10 工作流程:提升效率的秘诀
作者分享了他个人使用的一个系统方法,这个方法极大的改变了他使用AI进行开发的过程,这就是 20-70-10 工作流程。
-
20% — 计划 & 系统设计
- 清晰地定义问题
- 分解为逻辑组件
- 识别集成点
- 选择适当的AI配置
-
70% — 通过精确 提示 进行 AI 执行
- 编写角色特定的提示
- 提供全面的上下文
- 在需要时使用少样本示例
- 指定确切的输出要求
-
10% — 审查和测试
- 验证AI输出
- 测试集成点
- 根据结果改进提示
- 记录成功的模式
案例研究:作者需要构建一个实时聊天系统。 使用 20-70-10 工作流程:
- 3小时计划:架构设计、数据库Schema、安全要求、WebSocket考虑
- 4小时 提示 & 迭代:生成服务器代码、客户端实现、数据库设置。当初始提示遗漏了边缘情况时,需要3轮改进。
- 2小时测试 & 集成:发现身份验证中间件Bug,需要手动调试。
结果:在 9 小时内完成了一个可用的聊天系统,而从头开始编码估计需要 16-20 小时。
关键在于 AI 处理了样板代码和标准模式,而作者则专注于架构和集成挑战。
避免常见的提示错误:提升输出质量
以下是一些常见的提示错误,以及如何避免它们:
-
模糊性陷阱
- 错误:“让这段代码更好”
- 正确:“通过减少数据库查询和实现缓存来优化这段代码的性能”
-
上下文真空
- 错误:“修复这个Bug” [提供代码片段]
- 正确:“这个Express.js身份验证中间件抛出 ‘Cannot read property of undefined’ 错误。当用户访问受保护的路由时会发生这个Bug。这是相关的代码和错误堆栈跟踪……”
-
输出格式盲区
- 错误:“生成单元测试”
- 正确:“生成遵循以下确切结构的Jest单元测试:用于组件的describe块,用于单个函数的test块,带有清晰描述的expect断言,以及模拟外部依赖项”
快速提升技巧:立即改善提示效果
-
推理语言(谨慎使用)
研究表明,某些短语可以改善复杂任务中的推理:“深吸一口气,逐步解决这个问题” 或 “仔细思考这个问题”。 但是,不要依赖这些作为灵丹妙药 – 清晰的上下文和示例更重要。
-
结构化模板
- 角色(Role):[AI应该扮演什么角色?]
- 任务(Task):[你到底想要什么?]
- 上下文(Context):[哪些背景信息很重要?]
- 格式(Format):[输出应该是什么样子?]
- 约束(Constraints):[存在哪些限制?]
-
迭代策略
- 从宽泛开始,然后缩小:
- 让基本结构工作起来
- 改进特定组件
- 优化边缘情况
- 润色和记录
- 从宽泛开始,然后缩小:
何时不应该使用 AI:关键的局限性
避免在以下情况下使用AI:
- 安全关键的逻辑:身份验证流程、加密实现
- 你不理解的复杂算法:如果你无法验证正确性,不要让 AI 编写排序算法
- 数据库迁移:需要仔细手动审查的高风险操作
- 性能关键的代码:AI 通常优先考虑可读性而不是优化
失败案例:作者曾经要求 AI 优化一个数据库查询。 AI 建议了一个看起来合理的索引,但实际上由于特定数据模式而降低了性能。 教训? AI 不了解你的数据特征 – 你了解。
展望未来:你的提示工程之旅
提示工程既是一门语言和沟通的艺术,也是一门技术专长。 你在这里学到的基础知识 – 理解模型机制、使用适当的配置、应用核心技术 – 为未来的所有内容奠定了基础。
你的任务
选择一个你本周难以完成的编码任务。 应用 20-70-10 工作流程:
- 花费 20% 的时间计划和分解问题
- 使用 70% 的时间为 AI 辅助创建精确的、上下文丰富的提示
- 花费 10% 的时间审查和测试输出
- 记录什么有效,什么无效 – 你会惊讶地发现,系统的提示工程可以多么快速地改善你的结果。
提示工程是一项不断发展的技能,需要持续学习和实践。通过理解LLM的工作机制,掌握核心技巧,并不断迭代和改进你的提示,你将能够解锁AI的潜力,提高你的开发效率,并成为一名真正的提示工程专家。持续学习,持续实践,你将在提示工程的道路上越走越远!