在大模型领域,输入通常被称为“提示词”(prompt),它们是引导LLM(大语言模型)生成相应输出的关键。对于那些能处理多样化任务的LLM来说,一个合理设计的prompt会极大地影响模型的表现。
提示工程(prompt engineering)正是关于如何为特定任务构建能够充分发挥大模型能力的prompt技巧。本文将深入探讨提示工程,内容涵盖基本原理、一些重要概念以及常用的辅助工具。
1. 基本原理
设计高效的 prompt 有两个关键原则:编写清晰具体的指令和给予模型充足的思考时间。
01 编写清晰具体的指令
模型无法读懂你的想法,因此你需要在 prompt 中清晰明确地表达自己的需求。如果你觉得输出过长,可以在 prompt 中要求简短回复;如果输出太简单,可以要求详细回复。减少模型对你需求的猜测,你就越有可能得到满意的结果。
实现指令清晰具体的 4 个技巧:
- 使用分隔符清楚地表示输入的不同部分
在编写 prompt 时,可以使用各种标点符号(如 “”", ```, <>, —)将不同的文本部分区分开来。
import openai
import os
openai.api_key = os.environ.get("OPENAI_API_KEY", "your-api-key")
# 定义调用opanai api函数
def get_completion(prompt,model="gpt-3.5-turbo"):
messages = [{"role":"user","content":prompt}]
response = openai.chat.completions.create(
model = model,
messages = messages,
temperature = 0,
)
return response.choices[0].message.content
text = f"""
端午节,又称端阳节、龙舟节,是中国传统节日之一,每年农历五月初五举行。端午节源于中国古代,起源于楚国,最初是为了纪念爱国诗人屈原而设立的。端午节有着悠久的历史和丰富的文化内涵,在中国民间流传着许多丰富多彩的习俗和传统活动。\n
端午节的主要习俗之一是赛龙舟。人们会组织龙舟竞赛,以纪念屈原投江自尽、渔民划船救他的故事。龙舟竞赛是端午节最具特色和魅力的活动之一,吸引着无数人观看和参与。此外,端午节还有吃粽子、挂艾草、饮雄黄酒、穿香囊等传统习俗,每个习俗都有其独特的寓意和象征意义。\n
粽子是端午节必不可少的传统食品,其形状象征着包裹屈原的荷叶,内含糯米和各种馅料,味道鲜美。挂艾草则是为了驱邪避疫,保佑家人健康平安。饮雄黄酒和穿香囊也都是为了驱邪求吉,祈福平安。\n
端午节是中华民族传统文化的重要组成部分,也是中华民族的节日之一。随着时代的变迁,端午节的庆祝方式和形式也在不断发展和变化,但人们对于这个节日的热爱和传统习俗的传承始终如一。
"""
#输入内容
prompt = f"""
把用三个反引号括起来的文本总结成一句话。
```{text}```
"""
#指令输出
response = get_completion(prompt)
print(response)
输出:
端午节是中国传统节日之一,源于古代楚国,纪念爱国诗人屈原,有赛龙舟、吃粽子、挂艾草等丰富多彩的习俗和传统活动,体现着中华民族的传统文化和节日热爱。
- 要求模型结构化输出
例如 JSON 或 HTML 格式,这不仅能让模型稳定输出你想要的格式,还便于后续处理。
prompt = f"""请生成包括书名、作者和类别的三本虚构的、非真实存在的中文书籍清单。
要求以JSON格式输出,其中包含以下键:book_id、title、author、genre。
"""
response = get_completion(prompt)
print(response)
输出:
[
{
"book_id": 1,
"title": "幻境之门",
"author": "王小明",
"genre": "奇幻"
},
{
"book_id": 2,
"title": "星际迷航",
"author": "张小红",
"genre": "科幻"
},
{
"book_id": 3,
"title": "时间漩涡",
"author": "李大山",
"genre": "冒险"
}
]
- 要求模型检查是否满足条件
如果任务包含一些假设或条件,可以在 prompt 中告诉模型先检查这些假设。如果不满足,则直接输出检查结果并停止后续流程。考虑边缘情况及模型的应对,可以避免意外结果或错误。
text = f"""
泡一杯茶很容易。首先,需要把水烧开。在等待期间,拿一个杯子并把茶包放进去。一旦水足够热,就把它倒在茶包上。等待一会儿,让茶叶浸泡。几分钟后,取出茶包。如果您愿意,可以加一些糖或牛奶调味。就这样,您可以享受一杯美味的茶了。
"""
prompt = f"""
您将得到由三个引号括起来的文本。
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:
第一步 - ...
第二步 - ...
...
第N步 - ...
如果文本中不包含一系列的指令,则直接写"未提供步骤"
\"\"\"{text}\"\"\"
"""
response = get_completion(prompt)
print(response)
输出:
第一步 - 把水烧开。
第二步 - 拿一个杯子并把茶包放进去。
第三步 - 把烧开的水倒在茶包上。
第四步 - 等待几分钟,让茶叶浸泡。
第五步 - 取出茶包。
第六步 - 如果愿意,可以加糖或牛奶调味。
第七步 - 尽情享受您的茶。
- 少样本提示 (Few-shot prompting)
在要求模型执行任务前,提供一些成功执行任务的示例,然后再要求模型执行任务。
prompt = f"""
您的任务是以一致的风格回答问题。
<孩子>: 请教我何为耐心。
<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。
<孩子>: 请教我何为韧性。
"""
response = get_completion(prompt)
print(response)
输出:
<祖父母>: 韧性就像是一棵顽强的树,能够经受风雨的洗礼而不倒;就像是一块坚硬的石头,能够经受岁月的磨砺而不碎;就像是一条强壮的绳索,能够承受重压而不断裂。韧性是一种坚韧不拔的品质,让人在逆境中坚持不懈,永不放弃。
其他策略:
- 在查询中包含详细信息以获得更相关的答案
- 要求模型采用某种角色
- 指定输出的期望长度(用单词数、句子数、段落数、项目符号等指定)
- 将复杂任务拆分为简单子任务
02 给予模型充足时间思考
当你被问到“17 乘以 28 等于多少”时,你可能不会立刻知道答案,但可以通过时间推算出来。同样,模型如果试图立即回答,会犯更多的推理错误。因此,prompt 应该加入逐步推理的要求,给模型留出充分思考时间,这样生成的结果才更准确可靠。
- 指定任务完成需要的步骤
text = f"""
在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
他们一边唱着欢乐的歌,一边往上爬,\
然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
虽然略有些摔伤,但他们还是回到了温馨的家中。\
尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""
prompt = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个人名。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。
请使用以下格式:
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名字列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>
Text: <{text}>
"""
response = get_completion(prompt)
print(response)
输出:
摘要: 在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水,不幸中途发生意外,但他们的冒险精神依然坚定。
翻译: In a charming village, siblings Jack and Jill set out to fetch water from a well on top of a hill, unfortunately encountering an accident along the way, but their adventurous spirit remains strong.
名称: Jack, Jill
输出 JSON: {"English_summary": "In a charming village, siblings Jack and Jill set out to fetch water from a well on top of a hill, unfortunately encountering an accident along the way, but their adventurous spirit remains strong.", "num_names": 2}
- 指示模型在匆忙下结论之前思考解决方案
prompt = f"""
请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:
步骤:
首先,自己解决问题。
然后将您的解决方案与学生的解决方案进行比较,对比计算得到的总费用与学生计算的总费用是否一致,并评估学生的解决方案是否正确。
在自己完成问题之前,请勿决定学生的解决方案是否正确。
使用以下格式:
问题:问题文本
学生的解决方案:学生的解决方案文本
实际解决方案和步骤:实际解决方案和步骤文本
学生计算的总费用:学生计算得到的总费用
实际计算的总费用:实际计算出的总费用
学生计算的费用和实际计算的费用是否相同:是或否
学生的解决方案和实际解决方案是否相同:是或否
学生的成绩:正确或不正确
问题:
我正在建造一个太阳能发电站,需要帮助计算财务。
- 土地费用为每平方英尺100美元
- 我可以以每平方英尺250美元的价格购买太阳能电池板
- 我已经谈判好了维护合同,每年需要支付固定的10万美元,并额外支付每平方英尺10美元;
作为平方英尺数的函数,首年运营的总费用是多少。
学生的解决方案:
设x为发电站的大小,单位为平方英尺。
费用:
1. 土地费用:100x美元
2. 太阳能电池板费用:250x美元
3. 维护费用:100,000+100x=10万美元+10x美元
总费用:100x美元+250x美元+10万美元+100x美元=450x+10万美元
实际解决方案和步骤:
"""
response = get_completion(prompt)
print(response)
输出:
实际解决方案和步骤:
1. 土地费用:100美元/平方英尺
2. 太阳能电池板费用:250美元/平方英尺
3. 维护费用:10万美元固定费用 + 10美元/平方英尺
总费用 = 土地费用 + 太阳能电池板费用 + 维护费用
总费用 = 100x + 250x + 10万 + 10x
总费用 = 360x + 10万
学生计算的总费用:450x + 10万美元
实际计算的总费用:360x + 10万美元
学生计算的费用和实际计算的费用是否相同:否
学生的解决方案和实际解决方案是否相同:否
学生的成绩:不正确
需要注意的是,掌握这些技巧可以帮助我们编写好的 prompt,但在实际项目中,一个完美的 prompt 需要根据输出与需求之间的差异不断迭代优化。作为 Prompt 工程师,关键不是一开始就要求完美的 Prompt,而是掌握有效的 Prompt 开发流程。
另外,在使用 LLM 应用时,还需要注意大模型的幻觉问题,即模型偶尔会生成一些看似真实但实则编造的内容。
2. 一些概念
01.零样本提示 (Zero-Shot Prompting) vs. 少样本提示 (Few-Shot Prompting)
在大规模语言模型(LLM)的使用中,零样本提示和少样本提示是两种常见的提示技术,分别在为模型提供背景信息和指令方面有不同的应用和效果。
- 零样本提示:在没有提供具体示例的情况下,仅通过描述任务或问题本身,让模型进行生成和推理。模型需要根据对问题的理解直接生成答案,适用于任务相对简单或模型已经有较多相关知识的情况。
- 少样本提示:在提供少量示例的情况下,让模型学习任务的具体模式和要求。这些示例帮助模型更好地理解任务,并提高其生成答案的准确性,适用于任务较为复杂或需要特定格式输出的情况。
02. 思维链 (Chain of Thought, CoT) vs. 自洽性 (Self-Consistency) vs. 思维树 (Tree of Thoughts, ToT)
在大规模语言模型(LLM)的开发和应用中,思维链、自洽性以及思维树等概念被用来提升模型的推理能力和生成内容的质量。
- 思维链 (CoT):通过分步推理来解决复杂问题的方法。模型不仅生成最终答案,还生成一系列中间推理步骤,使问题的解决过程变得透明和可追溯。通常在 prompt 中增加 `Think step-by-step` 实现。
- 自洽性:通过生成多个可能的答案和对应的推理路径,然后选择最一致或最常见的答案,以提高模型的可靠性。例如,`请列出所有可能的原因,解释为什么最近几年全球变暖的速度加快了,并选择那些在不同原因解释中保持一致的答案。`
- 思维树 (ToT):扩展思维链的方法,通过探索多条可能的推理路径(树状结构)来找到解决问题的最佳路径,特别适用于复杂的、多步骤的问题。例如,`请为每个可能导致最近几年全球变暖速度加快的原因生成一个思维树,包括支持该假设的直接和间接证据,以及可能的反对观点。`
3. 辅助工具
以上技巧针对开发者,也可以用于 web 应用中。以下介绍一些辅助工具,帮助 ChatGPT 更高效地完成日常工作。具体操作是先使用 ChatGPT 生成对应网站指定格式(比如 Markdown 等)的内容,然后把内容粘贴到对应网站上一键生成。
1. PPT制作:MINDSHOW
2. 思维导图制作:MARKMAP
3. 流程图制作:Mermaid
4. 图片制作:Midjourney
5. PDF阅读:ChatPDF
通过掌握提示工程,我们能够更精确地控制和引导大语言模型的输出,使其能够在不同的应用场景中发挥更大的作用和价值。这门技术不仅可以提高模型的准确性和效率,还能够使人机交互更加智能和自然。
一、大模型风口已至:月薪30K+的AI岗正在批量诞生
2025年大模型应用呈现爆发式增长,根据工信部最新数据:
国内大模型相关岗位缺口达47万
初级工程师平均薪资28K(数据来源:BOSS直聘报告)
70%企业存在"能用模型不会调优"的痛点
真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!
二、如何学习大模型 AI ?
🔥AI取代的不是人类,而是不会用AI的人!麦肯锡最新报告显示:掌握AI工具的从业者生产效率提升47%,薪资溢价达34%!🚀
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工
📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。