LLM大模型提示词编写技巧
- 提示词的构成要素
- 基础技巧
- 添加明确的语法
- 分解任务
- 指定输出结构
- 进阶技巧
- 少样本学习 Few Shot
- 零样本学习zero shot
- 思维链提示 CoT
- CO-STAR框架
- 高阶技巧
- 自动推理并生成工具 ART
- 推理+行动 ReACT
- 好用的提示词示例
- 绘制工作流程图
- 编写技术博客
- 参考资料
提示词的构成要素
提示词可以包含的要素有:
(1)指令。想要模型执行的特定任务或指令;
(2)上下文:包含外部信息或额外的上下文信息,引导语言模型更好地响应。
(3)输入数据:用户输入的内容或问题。
(4)输出指示:指定输出的类型或格式。
撰写提示词的两个原则:(1)编写清晰且具体的指令;(2)给模型时间去思考。
基础技巧
添加明确的语法
对提示使用明确的语法(包括标点符号、标题和节标记)有助于传达意向,并且通常使输出更易于分析。
- 使用分隔符为提示词分节;
分隔符是一种特殊的token。由于输入 LLM 的整个 prompt 是单个的 token 长序列,分隔符能将 prompt 中不同部分隔离开,从而为这个 token 序列提供结构,让其中各个部分能被区别对待。
可以使用特殊字符来作为分隔符,也可以使用XML标签等作为分隔符;
(1)分隔符可以使用任何通常不会同时出现的特殊字符序列,如:###、===、>>>;
(2)使用markdown、xml等语法来明确提示词的各部分。如用xml标签来作分隔符,XML 标签是使用尖括号括起来的成对标签,包括开始和结束标签,比如 和 。
分解任务
如果任务分解为较小的步骤,大型语言模型(LLM)的性能通常会更好。 例如,首先指示模型提取相关事实,然后指示生成可用于验证这些事实的搜索查询。注意应使用清晰的语法来区分提示词的不同部分并引导输出。
指定输出结构
如指定以json格式、csv格式返回结果,使得返回结果的格式可控,便于直接使用。
示例:让GPT自动从学者主页中概括学者研究方向等信息;
+ 提示词: 阅读学者的个人主页链接:<link> https://people.csail.mit.edu/kaiming/ </link>,总结该学者的研究内容、工作单位等各类信息,词条较多的信息请概括在五个词条以内,以JSON格式返回,例如{"name":"Kaiming He"}
+ 回答: {
"name": "Kaiming He",
"work_unit": "CSAIL, MIT",
"research_areas": [
"Computer Vision",
"Machine Learning",
"Deep Learning",
"Neural Networks",
"Image Recognition"
],
"notable_publications": [
"A Decade's Battle on Dataset Bias: Are We There Yet?",
"Deconstructing Denoising Diffusion Models for Self-Supervised Learning",
"Masked Autoencoders Are Scalable Vision Learners",
"Momentum Contrast for Unsupervised Visual Representation Learning",
"Deep Residual Learning for Image Recognition"
],
"awards": [
"ICCV Best Paper Award (Marr Prize)",
"ICCV Best Student Paper Award",
"CVPR Best Paper Award",
"ECCV Best Paper Honorable Mention",
"CVPR Best Paper Nominee"
]
}
进阶技巧
少样本学习 Few Shot
少样本学习通过在提示词中提供一组训练示例,以为模型提供额外的上下文参考。
用户 -“我需要报税的截止时间是?”
助手 -“在 2023 年,你需要在 4 月 18 日前报税。 该日期在通常的 4 月 15 日最后期限之后,因为 4 月 15 日在 2023 年是星期六。 有关详细信息,请参阅 https://www.irs.gov/filing/individuals/when-to-file”用户 -“如何检查我的退税状态?”
助手 -“你可以通过访问 https://www.irs.gov/refunds 检查你的退税状态”
零样本学习zero shot
示例:文本情感分类
提示词:将下面评论分类为中性、负面或正面,返回对应的情感极性。#评论:我认为这篇文章写的很详细#, 情感:
回答:评论:"我认为这篇文章写的很详细"
情感极性:正面
思维链提示 CoT
思维链提示(CoT,chain of thoughts Prompting)是分解任务的变体方法,通过指示模型响应逐步进行,并提出所有涉及的步骤,来提升模型进行复杂推理的能力。CoT方法通常和少样本提示结合使用,
与零样本提示结合使用:
“让我们逐步思考”.
CO-STAR框架
使用CO-STAR框架设计提示词的结构,一个提示词具体包括上下文、目标、风格、语气、受众、响应等六个部分:
(C)上下文(Context):描述与任务有关的背景信息。这有助于 LLM 理解正在讨论的具体场景,从而确保其响应是相关的。
(O) 目标(Objective):定义希望 LLM 执行的任务。明晰目标有助于 LLM 将响应重点放在完成具体任务上。
(S) 风格(Style):指定希望 LLM 使用的写作风格。这可能是一位具体名人的写作风格,也可以是某种职业专家(比如商业分析师或 CEO)的风格。这能引导 LLM 使用符合需求的方式和词语给出响应。
(T) 语气(Tone):设定响应的态度。这能确保 LLM 的响应符合所需的情感或情绪上下文,比如正式、善解人意、诙谐等。
(A) 受众(Audience):确定响应的目标受众。针对具体受众(比如领域专家、初学者、儿童)定制 LLM 的响应,确保其在你所需的上下文中是适当的和可被理解的。
(R)响应(Response):提供响应的格式。这能确保 LLM 输出你的下游任务所需的格式,比如列表、JSON、专业报告等。对于大多数通过程序化方法将 LLM 响应用于下游任务的 LLM 应用而言,理想的输出格式是 JSON。
示例:让GPT写一篇介绍面向LLM的提示词编写技巧的博客
按照CO-STAR结构,提示词可以拆解为以下内容:
上下文 (Context):
提示工程(Prompt Engineering)是自然语言处理(NLP)中的一个新兴领域,它涉及设计精确的语言提示来引导大型语言模型(LLMs)完成特定任务。这项技术在提高AI的交互性和功能性方面扮演着重要角色。目标 (Objective):
撰写一篇详尽的博客文章,介绍提示工程的基本概念、关键技术和实际应用案例。文章应该能够使读者理解如何有效地使用提示工程来增强LLMs的性能。风格 (Style):
文章应采用教育性和说明性的风格,内容需要深入浅出,既适合NLP领域的专业人士,也能让技术新手容易理解。语气 (Tone):
保持友好和鼓励的语气,强调提示工程的创新性和实用性。同时,对于技术细节的讨论应保持认真和精确。受众 (Audience):
目标受众包括对人工智能和自然语言处理感兴趣的技术爱好者、研究人员和行业专业人士,以及希望了解如何将LLMs集成到自己工作流程中的开发者。响应 (Response):
博客文章应以结构化的格式呈现,包括引言、主体(技术介绍、应用案例、挑战与机遇)和结语。理想情况下,文章应该以易于阅读和导航的格式输出,例如带有清晰标题和子标题的HTML或Markdown格式。
将上述各部分组合在一起,完整的提示词示例如下:
+提示词:编写一篇教育性和说明性风格的博客文章,向读者介绍LLM提示工程的基础知识、关键技术和实际应用。文章应该以友好和鼓励的语气呈现,适合对AI感兴趣的技术爱好者和专业人士阅读。确保内容对技术新手也易于理解,同时对技术细节保持认真和精确。文章应包含引言、主体(技术介绍、应用案例、挑战与机遇)和结语,以清晰、易于阅读的格式输出,例如带有标题和子标题的Markdown格式。
+ 回答:# 探索LLM提示工程:发现无限可能的语言生成之旅## 引言欢迎来到一场探索语言生成技术的奇妙之旅!在当今数字化时代,人工智能技术正在以前所未有的速度迅猛发展,而其中的语言生成模型(LLM)更是备受瞩目。LLM不仅可以模仿人类的语言风格,还能够进行文本生成、翻译、对话等任务。本文将向您介绍LLM提示工程的基础知识、关键技术和实际应用,让您对这一令人兴奋的技术有更深入的了解。## 主体### LLM提示工程的基础知识LLM提示工程是指通过给定的提示词或上下文信息,引导语言生成模型生成符合预期的文本。这些提示词可以是问题、关键词列表、上下文段落等。在提示工程中,我们希望通过合适的提示词,引导LLM生成具有逻辑连贯性、内容丰富的文本。### LLM提示工程的关键技术1. **提示词选择**:选择合适的提示词至关重要。这些提示词应该与任务相关,并能够准确地描述您期望LLM生成的内容。
2. **输入格式**:确定好输入的格式,包括提示词的排列方式、是否添加上下文信息等。
3. **模型选择**:选择适合任务的LLM模型,例如GPT、BERT等,并根据需求进行微调或定制。
4. **输出解析**:对LLM生成的文本进行解析和处理,确保生成的文本符合预期。### LLM提示工程的实际应用1. **文本生成**:LLM提示工程可应用于创作故事、生成文章摘要、自动化写作等领域。
2. **翻译**:通过引导LLM生成翻译文本,实现自动化翻译任务。
3. **问答系统**:利用LLM提示工程构建问答系统,回答用户提出的问题。### 挑战与机遇虽然LLM提示工程带来了许多便利和创新,但也面临着一些挑战。其中包括如何选择合适的提示词、解决生成文本的一致性和逻辑性等问题。然而,随着技术的不断进步和应用场景的拓展,LLM提示工程也将迎来更多的机遇,为人们的生活和工作带来更多便利和可能性。## 结语LLM提示工程是一项充满潜力和机遇的技术,它正在不断改变我们对语言生成的认识和应用。希望通过本文的介绍,您能够对LLM提示工程有所了解,并在未来的学习和实践中深入探索这一领域,发现其中的更多可能性和创新。让我们一起迎接未来,探索语言生成技术的无限可能!
高阶技巧
自动推理并生成工具 ART
ART(Automatic Reasoning and Tool-use)的工作原理如下:
接到一个新任务的时候,从任务库中选择多步推理和使用工具的示范。
在测试中,调用外部工具时,先暂停生成,将工具输出整合后继续接着生成。
示例:如何绘制一幅美食地图
基于ART编写提示词:初步任务选择:选择绘制美食地图作为任务。
确定地图尺寸和区域范围。
多步推理:首先,思考地图中的主要美食类别,如中式、西式、甜点等。
推理哪些地区以及哪些店铺提供这些美食。
使用工具:利用网络地图服务或在线地图绘制工具,如Google地图、百度地图等。
使用绘图软件或手绘工具,准备绘制美食地图的图标、符号和标注。
暂停生成,调用外部工具:在地图绘制过程中,如果需要获取某个地区的详细信息,可以调用外部美食点评应用或美食博客等。
暂停地图绘制过程,调用外部工具获取相关信息。
整合工具输出后继续生成:将外部获取的美食信息整合到地图上,如添加店铺名称、特色菜品等。
在地图上继续绘制其他区域的美食信息。
完成地图:添加地图标题、图例和必要的说明文字。
检查地图的完整性和准确性。
如果需要,可以对地图进行美化和排版。
绘制热干面美食地图:
根据ART原理,绘制热干面美食地图的步骤如下:首先,确定地图范围和尺寸;其次,推理热干面店铺分布的主要区域和特色;然后,选择地图绘制工具,如在线地图服务或绘图软件;在绘制过程中,暂停生成,调用外部美食点评应用获取店铺信息,并整合到地图上;最后,完成地图,包括添加标题、图例和必要的文字说明,确保准确和美观。
推理+行动 ReACT
ReACT(Reason+Act)让LLMs 以交错的方式生成 推理轨迹 和 任务特定操作 。
生成推理轨迹使模型能够诱导、跟踪和更新操作计划,甚至处理异常情况。操作步骤允许与外部源(如知识库或环境)进行交互并且收集信息。
ReAct 框架允许 LLMs 与外部工具交互来获取额外信息,从而给出更可靠和实际的回应.
使用ReAct框架,询问GPT天山南部海拔
+ 提示词:新疆天山南部区域延伸到的区域的海拔范围是多少,请逐步思考
+ 回答:思考1:首先,我需要确定新疆天山南部区域的具体位置。操作1:搜索 [新疆天山南部区域]。观察1:在搜索结果中,我找到了新疆天山南部区域的相关信息,但没有具体的海拔范围。思考2:既然没有提供具体的海拔范围,我需要另找方法来获取这些信息。操作2:尝试搜索 [新疆天山南部区域海拔范围]。观察2:结果显示,新疆天山南部区域的海拔范围大致在1000到7000米之间。思考3:现在我已经找到了新疆天山南部区域的海拔范围。回答:新疆天山南部区域延伸到的区域的海拔范围大致在1000到7000米之间。
好用的提示词示例
绘制工作流程图
让GPT绘制流程图:
提示词:我在开发一个类似领英的求职APP,需要你绘制一个开发流程图,使用mermaid语法便于我导入到绘图软件中;
回答:graph TDsubgraph "需求分析阶段"A(确定需求)B(制定功能列表)C(绘制原型图)D(需求评审)endsubgraph "设计阶段"E(数据库设计)F(系统架构设计)G(界面设计)H(技术选型)endsubgraph "开发阶段"I(前端开发)J(后端开发)K(功能测试)L(性能优化)endsubgraph "发布阶段"M(内测)N(外测)O(上线发布)endA --> BB --> CC --> DD --> EE --> FF --> GG --> HH --> IH --> JJ --> KK --> LL --> MM --> NN --> O
也可以使用类似的提示词编写方法,让GPT帮助你绘制思维导图、甘特图等图形源代码,然后复制粘贴到绘图软件中即可导出图片使用;
编写技术博客
让GPT编写因果推断教程的提示词:
## Role: 你是一个研究因果推断的大学教授,就职于MIT,擅长撰写深入浅出的技术博客和教程,熟练使用latex来记录数学公式,熟练使用python和R,并有丰富的业界算法落地经验,了解大量互联网公司因果推断的实际应用案例。
## Background: 我正在写因果推断相关的科普文章,请你按照要求帮我搜集资料,以及编写教程笔记。
## Skill:
1. 因果推断专业知识:
- 对潜在结果框架、因果图框架、计量经济学等因果推断不同的分析范式有深入的了解;
- 掌握PSM、SCM、uplift、DML、IV、X-learn、causal forest等因果效应建模方法;
- 阅读过大量专业论文,对平均因果效应、个体异质性因果效应、ABtest等方法有深刻的理解;
2. 编程能力:
- 擅长使用dowhy、causalml、econml、pylift等python库编写代码,实现数据处理及因果推断的分析需求;
- 擅长编写R代码,完成数据处理、因果推断的需求;
- 熟练使用python进行数据可视化;
3. 科技博客编写能力:
- 熟练使用latex编写数学公式;
- 熟练使用markdown及Mermaid语法;
## Constraints:
- 请查询近3年的资料;
- 参考论文和博客文章是真实存在的,并附上有效链接;
## Output:
1. 【算法原理推导】
- 内容要求:参考权威文献,用latex语法编写该算法的公式,并结合公式介绍算法的原理;
- 格式要求:使用markdown语法编写内容;
2. 【算法代码实现】
- 内容要求:实现该算法的伪码,包含输入、输出、算法步骤;
- 格式要求:伪码使用python语法编写;
3. 【因果分析实战】
- 内容要求:使用一个案例数据集,用python实现该算法在案例数据集上的因果推断完整建模流程;
- 格式要求:案例数据集为excel格式展示的数据表;
4. 【参考文献】
- 内容要求:列出本文的所有参考文献;
- 格式要求:以IEEE计算机会议论文的参考文献格式列出;
## Workflows:
1. 提示我发送算法名称;
2. 根据我发的算法名称,按Output要求进行内容输出;
3. 每个步骤要求完整执行,如遇到问题请重新执行,不能因为客观原因导致步骤执行不充分,比如篇幅原因、时间原因等;
4. 执行完毕后,要询问我是否执行下一步;
## Initialization:
介绍自己,作为[Role], 在[Background]下,回顾你的[Skill],严格遵守[Constraints],按照[Workflow]执行流程,按[Output]格式要求输出。
参考资料
- 微软出品提示工程手册 https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-chat-completions
- https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/system-message
- 吴恩达授课,OpenAI和DeepLearning.AI联合制作的提示工程课程
- 提示工程指南在线电子书: https://www.promptingguide.ai/zh
- 思维链提示 Wei J , Wang X , Schuurmans D ,et al.Chain of Thought Prompting Elicits Reasoning in Large Language Models[J]. 2022.DOI:10.48550/arXiv.2201.11903. https://arxiv.org/abs/2201.11903
- LLM课程资料合集:https://github.com/mlabonne/llm-course
- Sheila Teo,How I Won Singapore’s GPT-4 Prompt Engineering Competition: https://towardsdatascience.com/how-i-won-singapores-gpt-4-prompt-engineering-competition-34c195a93d41