作者 Ben 是 AI 自动化公司 Ben AI 的创始人,《MASTER Prompt Engineering in 50 min》这个视频 (Bilibili 源) 发布于 2024 年 9 月。
视频中使用的提示词均为英语,本文保留了这部分原文。不过就笔者过去的经验而言,换成中文也未尝不可。
虽然本文(视频)提供了一些提示词技巧,实际任务中对最终效果的评价还是较为主观的。如何工程化地衡量不同提示词的好坏,甚至进行相应的 debug 和 profile,笔者目前只找到了 Arize Prompt Playground 和 Microsoft Semantic Kernel,这方面的内容之后另有机会再深入探讨。
最后,因为 Ben AI 总是要推广一下他们自己的平台产品(Flow Builder 之类的),感兴趣的可以自行观看原视频,这部分就不介绍了。
提示词工程的必要性
英语是新的编程语言 English is the new programming language —— Andrei Karpathy
在构建 AI 自动化系统时,掌握与 LLM 交流的方式将是最重要的技能。
结构化提示词
「结构化提示词」是相较于「对话式提示词」这个概念提出的:
这是「对话式提示词」:

这是「结构化提示词」:

结构化提示词通常面向单一任务优化,其结构分为:
- 角色(Role)
- 目标(Objective)
- 上下文(Context)
- 指令(Instructions)
- 示例(Example)
- 备注(Notes)
提示词链则是:
- 将复杂任务拆解成多个独立的任务
- 将上个任务的输出添加到下个任务的输入
- 可以提高可靠性和稳定性
一般用于:
- 数据提取
- 内容生成
- 分类
- 求值
- 数据转换
- 决策
短提示、长提示
这是「短提示」:

这是「长提示」:

使用 Markdown 语法可以方便人类和 LLM(没错)阅读和理解。
长提示词框架
设置角色 / 个性 / 特质(Role)
- 赋予角色特性
- 使用一些正向的表达强烈的赞美
- 「你是一个世界级的……(You are World-class…)」
- 「尤其擅长……(with particular expertise in ….)」
- 添加到 System Prompt
给出目标 / 任务(Objective)
- 描述要做什么
- 「你的任务是……(Your goal is to…)」
- 「一步步思考……(Think step by step…)」
给出上下文(Context)
- 为什么需要完成这个任务
- 「搞定这个对我的饭碗很重要(It is vital to my career)」
也可以是画饼
发出指令(Instructions)
- 给予详细的指令
- 描述所有规则
- 指定输出格式,例如要求以 JSON 格式输出等
- 尽可能指出应该避免的错误
- 常见句子
- 「重要!!!(IMPORTANT)」
提供示例(Example)
- 非常重要
- 至少要提供一个输入 / 输出示例
插入变量(The Variable)
- 每个任务中不一样的地方
添加备注(Notes)
- LLM 似乎对提示词的头尾部分有更多的关注
- 可以再次强调重要规则
- 可以再次强调输出格式
- 可以再次强调最佳实践
- 如果哪里出了问题,在这里补充修正
短提示词框架
- 目标 + 指令
- 例子
- 变量
代理提示,Agent Prompting
解决 AI 问题的方法是使用更多 AI

AI Agent 的唯二职责应该是 决策(调用工具 / 子代理(Subagent)) 和 (与子代理 / 人类)沟通。所有其他工作都应当转移给工具和子代理。
与长提示词框架类似:
- 角色(Role)
- 目标(Objective)
- 上下文(Context)
- 操作流程(SOP,Standard Operating Procedure,标准作业程序)
- 指令(Instructions)
- 工具 & 子代理(Tools & Subagents)
- 示例(Examples)
- 备注(Notes)
为推理模型编写提示词
- 使用简洁的提示词
- 避免使用思维链提示(Chain of Thought Prompting)
- 思维链技术已经是模型推理的一部分,在提示词中加入你自己的推理可能没什么用,也可能会起到反效果
- 继续使用 Markdown 编写提示词