锦上添花:Prompt技巧

锦上添花:Prompt技巧

一、什么是prompt

我们直接来问问gpt3.5

055b22dc-df2c-4e17-8f74-57dd00263552.png

很明显,理解错了我的意思,加一下限定范围重新提问

什么是prompt.png

gpt3.5给出的prompt定义:

在LLM(大语言模型)中,“prompt(提示)”通常指的是用户输入的文本片段或问题,用来引导模型生成相应的回复或完成特定的任务。在使用LLM时,用户会提供一个简短的提示或问题,模型会基于这个提示来生成文本回复。prompt的质量和清晰度直接影响到模型生成的结果。

二、常用技巧

1.清晰以及更多的上下文

在介绍prompt的定义时,我先后对gpt3.5提问了两次,第二次提问的质量明显高于第一次。因为相比于第一次提问,我加了一个限定条件 '在LLM' 中。为什么会有这样的效果?因为在自然语言中,同样的一个词或是一句话,在不同的上下文、不同的语境、不同的领域中,表达的意思很可能是不同的。

所以当你在进行提问时,首先要保证指令的清晰,不要模棱两可,尽可能提供更多的上下文,这将有助于模型清晰的了解你的意图,从而输出更为精准的回复。

2.结构化的提示词

首先看一个例子。

prompt:

翻译下以下句子。 
尽量用华丽的语言

gpt执行翻译任务1.png

prompt:

翻译下以下句子。 
```尽量用华丽的语言```

gpt执行翻译任务2.png

第二次提问我将要处理的文本使用```框起来了。

也就是说,你的输入中不仅包括指令还有待处理的文本

那么你需要用一些符号,将指令和待处理的文本进行区分,来明确告诉大模型哪些文本理解并执行,哪些文本仅加工处理。

对于待处理的文本可以用```或者###框选起来(其实任意的分隔符都可以),但是我建议使用markdown的语法。因为大模型的输出通常都是markdown格式的,所以使用markdown格式能够更加便于大模型理解。

我们在实际写prompt时,不止待处理的文本可以加符号区分,只要能够提升可读性一些单词都是可以加符号处理的,比如专有名词、变量名、人名、地点等等。

举一些我在平常使用的例子:

通过大模型实现python爬虫的部分prompt:

进入到这个```https://www.sscha.com/```网站后,在id值为'searchInputHomeRef'的input标签中输入要查询的关键字,然后点击class值为'search-img'的div标签进行查询,在进入搜索结果页后,等待页面加载完成,即class值为'info'的div标签不为空,接着创建该html的beautifulsoup对象。然后获取这个div下class值为'title'的div标签下的a标签,打印a标签的title。然后获取class值为'info-descriptions'的div标签,接着获取这个div下class为'text-often-font-color'的span标签,获取第二个span,打印这个span的值。

通过大模型进行ppt大纲扩写的prompt(markdown格式):

我会给你一份ppt的大纲,请稍后根据我的要求进行内容扩写,以下是大纲:
```
制作关于《中国共产党纪律处分条例》的党课PPT时,可以遵循以下结构和要点来组织内容,确保既全面又易于理解:

### 封面页
- 标题:《中国共产党纪律处分条例》学习讲座
- 副标题(可选):严明纪律,筑牢底线
- 时间、地点
- 制作者/讲师姓名

### 目录页
1. 引言与重要性
2. 《条例》概览
3. 主要内容与修订亮点
4. 党纪处分种类
5. 违纪行为典型案例分析
6. 如何遵守与执行
7. 结语与自我反思
8. Q&A

### 引言与重要性
- 简述《中国共产党纪律处分条例》的历史沿革与修订背景。
- 强调纪律建设在党的建设中的地位和作用。
- 解释学习《条例》对于保持党的先进性和纯洁性的重要性。

### 《条例》概览
- 发布机构与发布时间。
- 《条例》的基本框架(如总则、分则、附则等)。
- 适用范围和基本原则。

### 主要内容与修订亮点
- 详细阐述六大纪律(政治纪律、组织纪律、廉洁纪律、群众纪律、工作纪律、生活纪律)的核心内容。
- 指出最新修订中增加或调整的重要条款及其意义。

### 党纪处分种类
- 列举并解释警告、严重警告、撤销党内职务、留党察看、开除党籍等处分形式。
- 处分的期限及影响。

### 违纪行为典型案例分析
- 选取几起典型违纪案例,分析其违反的具体条款、造成的后果以及处理结果。
- 强调案例的警示意义。

### 如何遵守与执行
- 强化纪律意识,自觉遵守党纪。
- 组织生活会的作用与实践。
- 鼓励自我监督与相互监督机制的建立。

### 结语与自我反思
- 总结《条例》学习的要点,强调个人在日常工作和生活中如何践行。
- 提倡自我反思,鼓励党员主动查找自身可能存在的纪律问题并及时改正。

### Q&A
- 邀请听众提问,进行互动交流,解答疑惑。

### 设计与呈现建议
- 使用官方色彩(如红色、金色)作为PPT的主色调,体现严肃性。
- 适当插入图表、流程图来辅助说明复杂概念。
- 确保文字简洁明了,避免长段落,多用条目式列举。
- 注意版权,使用合法图片和素材。

通过这样的结构安排,可以使党课内容既系统全面又易于听众理解和吸收。
```

3.少样本提示

虽然大模型在进行大量的数据训练后,表现出卓越的零样本能力,但是在复杂任务上表现不佳。当零样本提示效果不佳时,可以尝试少样本提示。所谓少样本提示,即在你的prompt中,可以适当举一些例子,供大模型进行推理学习。

少样本提示.png

对于我来说,这个技巧通常用来处理字符串或是以指定格式造数。

比如我需要批量获取redis的key时:

我将给你一个userId列表,请你遍历列表中的userId,拼成一个全新的字符串wecom:customer:{userId}。比如: 
输入:test1,test2
输出:wecom:customer:test1,wecom:customer:test2

rediskey处理.png

再比如我希望获取一些满足类对象信息的json串时:

```java
@Data
@Schema(title = "客户标签")
public class CustomerTagVO {
    @Schema(title = "客户userId")
    private String externalUserId;
    @Schema(title = "微信昵称")
    private String nickname;
    @Schema(title = "生日")
    private String birthday;
    @Schema(title = "保单周年日")
    private String anniversaries;
    @Schema(title = "当前标签")
    private List<String> tags;
}
```
针对上述代码转换成json对象,并给出10个例子。比如
```
{
  "externalUserId": "wme6acCAAAPzZV4oArNltVsuQVYVZgSw",
  "nickname":"Allen",
  "birthday":"1999-03-30"
  "anniversaries":"07-10,07-11,07-12"
  "tags":[
    "保单周年日当天",
    "保单周年日-1",
    "保单周年日-2"
  ]
}
```
需要注意的是,anniversaries和tags有对应关系,假设今天为07-10号,anniversaries添加的日期应该在这天之后,并且anniversaries中每添加一个日期,都需要减去今天的日期即'07-10',得到差值difference。
如果difference为0,则在tags中加入'保单周年日当天';
如果0<difference<=7,则在tags中加入'保单周年日-{difference}',比如difference为5,则在tags中加入'保单周年日-5'。

json造数.png

总之,当你觉得描述不是很清晰时,那么尝试举一些例子将是一个好的选择。

4.思维链

大模型面对复杂任务效果往往不尽人意,这个时候我们在prompt中加入'请一步一步地思考',往往效果会好很多。

直接回答.png

思考回答.png

效果很明显,进行了链式思考后的gpt3.5回复的质量大幅提升,正确率也提高了。

这样不仅可以观察大模型得到最终结果的过程,也会让大模型进行充分地链式思考,使大模型输出问题的中间结果,而这部分中间结果又反过来作为上下文进行输入,进一步保证了最终问题的正确性。

在进行复杂任务执行时,你也可以自己将复杂任务拆分成多个简单的小任务。一是为了保证输出质量,二是为了更精准的控制输出,让大模型沿着我们的思维链进行思考和输出。

5.角色扮演

先来看一个例子

讲解计算机原理.png

添加角色描述后.png

很显然,对于一个初学者而言,第二次的回复更加通俗易懂。不光语气更加拟人,甚至在回复中加入了比喻和举例。

当你在进行提问时,可以为大模型指定扮演的角色,同时也可以为自己指定角色

通过让大模型扮演某些领域的角色,起到一个让他进行相关领域知识检索的作用,同时回复也会更加的拟人化。

通过为自己指定角色,可以让大模型了解你的知识水平,根据你的知识水平做出更加符合你理解水平的回复。

三、prompt工具

1.LangGPT(结构化提示词优化工具)

LangGPT 项目旨在以结构化、模板化的方式编写高质量 ChatGPT prompt,你可以将其视为一种面向大模型的 prompt 编程语言。重要的是免费

prompt优化.png

优化后回复.png

2.智造喵(基于chatGPT的prompt集成工具)

基于chatGPT的国内中文版智造喵。集成了各种应用场景的prompt,再也不用费力编写prompt。不过使用并不免费。

智造喵场景列表.png

3.PromptPerfect(提示词优化器)

它是专为大型语言模型 (LLM)、大型模型 (LM) 和 LMOps 设计的尖端提示词优化器。但是中文支持并不好(尽管设置中将语言调为简体中文,但是模型的输出以及优化器提示仍是英文),而且需要付费使用。

promptperfect使用.png

基于大模型代码生成python爬虫 2024-05-15
大模型RAG 2025-01-08

评论区