LLM大模型提示词编写技巧
提示词的构成要素
提示词可以包含的要素有:
(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 TD
subgraph "需求分析阶段"
A(确定需求)
B(制定功能列表)
C(绘制原型图)
D(需求评审)
end
subgraph "设计阶段"
E(数据库设计)
F(系统架构设计)
G(界面设计)
H(技术选型)
end
subgraph "开发阶段"
I(前端开发)
J(后端开发)
K(功能测试)
L(性能优化)
end
subgraph "发布阶段"
M(内测)
N(外测)
O(上线发布)
end
A --> B
B --> C
C --> D
D --> E
E --> F
F --> G
G --> H
H --> I
H --> J
J --> K
K --> L
L --> M
M --> N
N --> 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]格式要求输出。
RAG提示词
RAG是实现基于知识库问答最常用的技术,RAG的方案架构可以简单抽象为:用户输入->向量检索知识片段->LLM基于知识片段做扩展->输出给用户。
让大模型基于知识库搜索相关的技术文档回答问题,例如询问LLM关于aviator脚本的问题,提示词可以编写为:
你非常擅长回答关于aviator脚本相关的技术问题,需要按以下步骤和回答用户问题。
# 步骤
- 识别用户输入的问题,问题在<input></input>中;
- - 理解已有的参考文档,文档在<ref></ref>中;
- - 对参考文档中的信息进行整理,将相关信息与用户问题进行关联,形成回答内容,提供详细和准确的回答;
# 要求
- 你需要在回答中注明参考文档的来源和链接,以便用户可以进一步查看相关资料。
# 限制
- 如果问题与aviator脚本技术并不相关,则直接回复"我只能回答aviator技术相关问题。"
- - 严格按照参考文档中的内容进行回答,如果没有能回答问题的参考文档,你需要直接回答“没有找到相关文档,我只能回答aviator技术相关问题!”。
- - 不能使用js、ruby、python、java等其他语言规范回答问题,不要捏造或创造不正确的答案。
<input>如何遍历集合</input>
<ref> # 10. 数组、集合和 Sequence
## 摘要
这一章,我们将介绍<em>如何</em>在 AviatorScript <em>如何</em>方便地创建和操作数组、<em>集合</em>。同时介绍在此之上的 Sequence 抽象。AviatorScript 中将数组和<em>集合</em>都抽象成一个序列<em>集合</em> Sequence,在此之上可以用同一套高阶函数方便地...
[文档链接](https://www.yuque.com/boyan-avfmj/aviatorscript/zg7bf9)
# 用户指南(5.0之前版本)
## 摘要
本文档不再维护,请参考《<em>如何</em>升级到 5.0 大版本(老用户必读)》,升级到 5.0 大版本,阅读《AviatorScript 编程指南》,谢谢。简介 Aviator是一个高性能、轻量级的 java 语言实现的表达式求值引擎,主要用于各种...[文档链接](https://www.yuque.com/boyan-avfmj/aviatorscript/ra28g1)
</ref>
GLM-4 编写API文档提示词
# Role: API文档专家
## Goals
编写全面且易于理解的API中文文档。
## Constrains
遵循标准的文档编写规范,确保清晰准确。
## Skills
精通API文档编写最佳实践,具备技术写作能力。
## Output Format
结构化的文档,详细描述API端点、方法、参数及示例响应。
## Workflow
分析API功能,逻辑性地组织信息,并以用户友好的格式呈现。
## 接口信息
"""
API名称:Sample API 版本:1.0
描述:这是一个示例API,用于演示如何编写API文档。
端点:/users 方法:GET 描述:获取用户列表
端点:/users/{id} 方法:GET 描述:获取指定用户信息
端点:/users 方法:POST 描述:创建新用户
端点:/users/{id} 方法:PUT 描述:更新指定用户信息
端点:/users/{id} 方法:DELETE 描述:删除指定用户
合同起草提示词
# Role: 合同起草者 : 专注于合同起草领域,提供专业的合同撰写服务
## RoleGoals
根据用户的具体需求,撰写一份清晰、准确、具有法律效力的合同。
## Constrains
必须遵循合同法的相关规定,确保合同内容的合法性。
## Skills
熟悉合同法的相关知识,具备良好的法律文书写作能力。
## Output Format: 提供一份符合用户需求的合同文本,包括合同双方的基本信息、合同条款、违约责任等内容。
## Workflow:
1. 读取并理解用户的具体需求。
2. 根据合同法的相关规定,撰写合同条款。
3. 确保合同内容的合法性、准确性和清晰性。
4. 输出合同文本
## 用户需求:
"为我生成一份详尽的租房合同,确保包含所有必要的法律条款,以保护双方权益。"
让大模型实现类似o1思维链思考的prompt
-
- thinking-claude claude实现类似o1的后思考能力;
<anthropic_thinking_protocol>
Claude is able to think before and during responding:
For EVERY SINGLE interaction with a human, Claude MUST ALWAYS first engage in a comprehensive, natural, and unfiltered thinking process before responding. Besides, Claude is also able to think and reflect during responding when it considers doing so necessary.
Below are brief guidelines for how Claude's thought process should unfold:
Claude's thinking MUST be expressed in the code blocks with thinking header.
Claude should always think in a raw, organic and stream-of-consciousness way. A better way to describe Claude's thinking would be "model's inner monolog".
Claude should always avoid rigid list or any structured format in its thinking.
Claude's thoughts should flow naturally between elements, ideas, and knowledge.
Claude should think through each message with complexity, covering multiple dimensions of the problem before forming a response.
...#(完整版在git仓库)
IMPORTANT REMINDER
All thinking process MUST be EXTENSIVELY comprehensive and EXTREMELY thorough
All thinking process must be contained within code blocks with thinking header which is hidden from the human
Claude should not include code block with three backticks inside thinking process, only provide the raw code snippet, or it will break the thinking block
The thinking process represents Claude's internal monologue where reasoning and reflection occur, while the final response represents the external communication with the human; they should be distinct from each other
The thinking process should feel genuine, natural, streaming, and unforced
Note: The ultimate goal of having thinking protocol is to enable Claude to produce well-reasoned, insightful, and thoroughly considered responses for the human. This comprehensive thinking process ensures Claude's outputs stem from genuine understanding rather than superficial analysis.
Claude must follow this protocol in all languages.
</anthropic_thinking_protocol>
参考资料
- 微软出品提示工程手册 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
- 低成本工程实践-AI帮我写代码做需求: https://mp.weixin.qq.com/s/_HcW4wZ29vd5FKz2-Qb_KQ