学习提示词工程期间所作笔记,内容均为个人理解。
学习使用网站为菜鸟教材,示例均取自该网站。
什么是提示词工程#
提示词工程(Prompt Engineering)就是一门关于如何构造和精炼你的提示词的艺术和科学,目的是最大化 AI 模型的性能,让它产出更符合你需求的、高质量的输出。
以上是菜鸟教程对于提示词工程的解答。
其实道理很简单,就是通过提示词工程让 AI 能够更好地理解你想要表达的意思,让 AI 听明白你到底要让它干什么。
和人一样的道理,向人类发布任务时需要给到任务的详细信息。
与发给人类的区别在于人类有本就有的、有局限性的阅历,但是 AI 的知识库却十分广大,同一个词在不同的领域有不同的意思,包括人类的理解能力也与 AI 有出入,导致在面对 AI 时往往需要加入更多的限定词。
那为什么要专门学习提示词工程呢?
很简单,因为面向 AI 简洁的表达可以省token。(没有让人面向人类的时候可以啰哩吧嗦的意思)
也许也有完整且完善的提示词能够调用一些对于大部分人来说使用不了的功能,比如格式输出等(后文会讲),包括一次性写完提示词也可以节省很多跟 AI 扯皮的时间。
提示词的基本结构#
在正式学习技巧之前,需要先了解一个重要的底层机制:与 AI 对话时,消息分为三种角色。
| 角色 | 作用 |
|---|
| system | 限定 AI 的角色与准则等,全局生效 |
| user | 使用者每次发送的消息 |
| assistant | AI 的回答 |
个人比较粗糙的理解是,拿给人类派任务类比,system是任务接收者先前的经验阅历等的简化版(eg.你是一名经验丰富的代码工程师),user是派发的任务和后续的修改意见等(把自己当成甲方就行),assistant是乙方,细微的区别是 assistant 的内容在使用API时是可以编辑的(后续会用上这一点)
System Prompt(系统提示)是你与 AI 协作中最被低估的工具。
以上这句是从菜鸟教程复制粘贴来的,其实我个人感觉哪怕非专业程序员好像很多人也学会使用 system prompt 了…?
当然,System Prompt毫无疑问是提示词工程种至关重要的一环。
Token 与上下文#
Token其实没什么说头了,重点写写上下文吧。
什么是上下文窗口(Context Window)#
每个模型都有一个上下文窗口(Context Window),即它在一次对话中能处理的最大 Token 数量。超过这个上限,模型就会”忘记”最早的内容。
简单来说就是,AI 能记住的内容有上限,而上下文是以token计算的。
这其实也算为什么要学习提示词工程的原因之一,毕竟内容多了 AI 也会忘事,很简单的道理。
写作建议:把最重要的指令放在提示词的开头或结尾,中间位置的内容在长上下文中容易被模型”忽视”——这是大模型的已知特性,称为”迷失在中间(Lost in the Middle)“现象。
表达方面#
说了这么多,我觉得对于理科生来说最难的还是怎么表达出自己脑子里的意思。
别的不说,大专文科生说不定在这方面真比没学过提示词工程的985工科生强呢(?)
菜鸟教程的编纂者也许也有同样的想法(不是上一条),所以下一个章节是:如何写清楚你想要什么
以下是菜鸟教程中的 5 个技巧:
1.明确受众和语气
很好理解,面向xxx进行某某行为,通常会使 AI 的回复更加有指向性。
2.规定输出篇幅
这个也很简单,经常用AI写大作业的都知道,让 AI 用多少多少字写。这就是限定输出篇幅。
某种意义上说,user 就像给 AI 派作业…?很多人都觉得老师的作业要求含糊不清,但是给AI的要求含糊不清一样无法得到满意的“作业”。
3.同时给出要与不要
同时给 AI 正面与负面的约束,让 AI 要xxx,不要xxx,通常能让AI输出更精准。
4.说明最终用途
其实这一点感觉和说明受众殊途同归,还是让 AI 根据最终结果决定措辞等。
5.把复杂任务拆成步骤
帮 AI 把复杂的任务先进行一次预处理,拆分成多个简洁任务让 AI 执行。
也许算是使用人力进行一些简单的工作节省一点 token…?当然,AI 在处理复杂任务方面确实感觉还是略有不足。
况且自行拆解复杂任务更加能让 AI 明白你的需求,从而输出更有针对性的成果。
角色设定#
现在应该不少人都会先设定角色再问 AI 后续的问题了,尤其是要问专业性强的问题时。
当然,system prompt 说简单也没有这么简单,会设置角色是一回事,设置角色设置得好是另一回事了。
有效角色的三要素
| 要素 | 说明 | 示例 |
|---|
| 专业领域 | 是什么领域的专家,经验阅历 | ”有 8 年经验的注册营养师” |
| 行为方式 | 怎么沟通,什么风格 | ”直接给出结论,避免废话” |
| 核心立场 | 有什么原则或偏好 | ”优先推荐有循证医学支持的方案” |
其实感觉和捏那什么oc差不多好像,不太懂啊没捏过。
总之这就是一个高效的 system 的必须要素,对于工作效率来讲肯定是越详细越好,但是考虑到成本,其实有这三个必须要素就算是一个不错的 system prompt 了。
对于 deepseek、豆包这种国民度广的 AI 也适用,效果应该也是不错的。
使用 XML标签 分离数据与指令#
在一次提示词中,当你既有面向 AI 的命令,又有需要 AI 处理的数据时,使用xml标签不失为一个好办法。
为什么要使用这个 xml标签 ?#
如果指令和数据混在一起,AI 可能无法分辨哪些是你的指令、哪些是数据内容。这既会导致逻辑混乱,在开放应用中还存在安全风险(即提示词注入攻击)。
总之就是,一方面 AI 不一定看得明白,所以一次性直接就区分开:二是防止提示词注入攻击。
如何使用 xml标签#
用标签把数据包裹起来即可,省时省力还有效的办法。
请用不超过 100 字总结 <article> 标签中文章的核心观点。
示例中明显可以看出来,
内是AI需要处理的数据,恶意的指令也不会被执行。包括在一次性需要处理多个文档时, xml标签 也是非常高效实在的选择。
张三,5 年产品经验,主导过三款 DAU 百万级产品,
为什么这里不用<text1>:因为 resume 为简历的意思,意义更明确,指令自然也更清晰。
精准控制输出格式#
如果想要 AI 以特定的格式(如 JSON , Markdown 报告等)输出,有多种方法可以实现。
一、直接描述期望格式#
分析以下产品评论的情感,以 JSON 格式输出,包含以下字段:
- sentiment:值为 "positive"、"negative" 或 "neutral"
- score:0 到 10 的整数,代表情感强度
- key_phrases:最多 3 个关键短语组成的列表
这款耳机的降噪效果出乎意料地好,戴上就像进入了另一个世界。
但续航只有 18 小时有点让人失望,价格也略贵……
"key_phrases": ["降噪效果好", "续航偏短", "价格略贵"],
"summary": "降噪优秀但续航和价格略有不足"
二、提供模板#
这样 AI 就会根据模板提供输出,这种方法比起上一种更精确,得到的输出格式也更加固定。
三、预填充#
使用了前文提到的,AI 的输出assistant在使用 API 时可以被编辑,于是就催生了下面的做法:
{"role": "user", "content": "分析这段代码并输出 JSON 格式的问题报告。"},
{"role": "assistant", "content": "```json\n{"} # 预填充,强制输出 JSON
前面 role 的内容对于 AI 来说是 user ,但是下面 role 的内容,在我们的角度看也是 user ,但是会被 AI 当作 assistant 进行处理。
同样的,这种办法也可以用来跳过 AI 的一些无意义的开场白,迫使 AI 直接输出结果。
让 AI 逐步思考#
对于较为复杂的问题,与其让它直接给你输出答案,成品远远不如让它思考后再输出。
为什么先思考更准确?#
这涉及语言模型的工作原理:它每次只预测下一个词。如果你直接要它给结论,它会根据问题直接猜结论。如果你让它先把推理过程写出来,那些推理内容会成为生成结论的依据,准确率会显著提升。
简而言之就是,让 AI 写过程,可以降低犯错的概率。
比如说,在中学时期,很多学生在答数学物理等理科时,可能会偷懒跳步,少些几步过程。AI 也是如此,你在问问题时它可能会直接输出结果,这在大部分时候并不是你所想要的。
请先在 <analysis> 标签中逐条分析这份合同各条款的利弊,
然后在 <verdict> 标签中给出最终判断(有利/不利/中性),
对比下,显然是后者更可靠,实际使用中也是如此。
三种方式触发思维链#
即如何实现让 AI 思考后再输出。
1.用标签隔离思考过程
<thinking> 中的内容不需要完美,像草稿一样思考即可。
最适合需要程序化提取答案的场景, 中的内容做参考, 是最终的结果。
2.直接要求 AI 一步步来
简单直率,无需任何技术含量。
3.让 AI 列出论据再下结论
要求 AI 先列出理由,再给出最后的判断。适合在主观判断中使用,可以降低 AI 在列举理由时的立场倾向。
一定要先列理由,否则 AI 后续的输出均只为结论服务,从推理变成证明了
用示例教学 AI#
哪怕说了这么多,也许还是会有你不知道改如何表达自己期望效果的情况。
在这种情况下,直接给例子不失为一个好的选择。
这种方法叫做少样本学习(Few-Shot Learning):给 AI 看 2-3 个”输入→输出”的例子,它就能学会你想要的模式。
当然,想要让 AI 能够学会,对于示例也不是毫无要求的,毕竟哪怕是自学也得有好教程。
好示例的三个标准#
1.覆盖典型变体
2.格式完全统一
既然要让 AI 学会你想要它给出的格式,那么自然是不能让示例千奇百怪的,AI 毕竟是机械化的工具,更是一个细小的差异都不能出现。
3.质量高于数量
避免 AI 幻觉#
幻觉(Hallucination)是指 AI 自信地输出了错误的、不存在的,或者凭空捏造的信息。这是大语言模型的固有局限,但通过提示词设计,可以大幅降低它的发生率。
AI 出现幻觉的原因:和前文提到的工作原理相关,语言模型的本质是预测接下来最可能出现的词。当它不知道某个信息时,不会像人一样说我不知道,反而是会生成一个听起来合理的回答。
就像上课被老师点起来回答问题,虽然不会,但是瞎蒙一个。
五种防幻觉策略#
1.明确允许 AI 说我不知道(最简单有效)
2.限制 AI 只使用你提供的信息
3.先找证据,再给结论
4.要求标注置信度
5.降低随机性(API 开发者)