提示词工程(Prompt Engineering)

1. Prompt 是什么?

Prompt:提示词,是描述 AI 需要执行的任务的自然语言文本。

如上图所示,Prompt就是用户的提问。其实我们大家都用过Prompt,比如我们使用的ChatGPT、文心一言、豆包等AI产品时的提问就是Prompt,下面是跟豆包的对话,其中"LLM中Prompt是什么?"就是一个简单的Prompt。

Prompt Engineering:提示工程,是一门专注于研究如何设计、优化提示词,以有效引导大语言模型(LLM)生成期望输出的工程学科。

2. 如何使用?

提示工程是通过上下文学习(In-context-learning)来实现的,指模型能够根据当前的输入临时调整其行为,以使用特定的任务或场景。这种能力与针对每个特定的任务的训练和微调不同,它是临时的。

这里,我们基于千帆的ERNIE-4.0-8K大模型来实现和测试,当然大家可以换成任何其他大模型。

2.1 定义相关使用到的方法

我们定义了一个get_access_token方法用来获取token,并定义qianfan_chat_completions_pro方法来调用千帆ERNIE-4.0-8K的completions_pro方法,具体代码如下:

python 复制代码
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
import os
import requests
import json

access_token = None

#获取token
def get_access_token():
    api_key = os.getenv("QIANFAN_API_KEY")
    secret_key = os.getenv("QIANFAN_SECRET_KEY")
    url = f"https://aip.baidubce.com/oauth/2.0/token?client_id={api_key}&client_secret={secret_key}&grant_type=client_credentials"
    
    payload = json.dumps("")
    headers = {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=payload, verify=False)
    return  response.json().get("access_token")

#调用ERNIE-4.0-8K 
def qianfan_chat_completions_pro(content):
    global access_token
    if access_token is None:
        access_token = get_access_token() 
        
    data = json.dumps({
        "messages": [
            {
                "role": "user",
                "content": content
            }
        ]
    })
    url = f"https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token={access_token}" 
    headers = {
        'Content-Type': 'application/json'
    }
    response = requests.request("POST", url, headers=headers, data=data, verify=False)
    return response.json().get("result")
    

2.2 调用LLM接口

假设我们的问题是:请用一句话说清楚prompt是什么?

其实这就是一个最简单的prompt,只不过它只包含了用户的问题,我们先来看如何调用:

python 复制代码
#prompt
question = """
请用一句话说清楚prompt是什么?
"""
print(qianfan_chat_completions_pro(question))

这是LLM就会给我们返回:Prompt是向用户展示并引导其进行下一步操作的提示信息。

3. 为什么要使用Prompt Engineering?

从上面LLM返回给我们的结果来看,LLM并没有很好地理解我们的意图,它只是解释了prompt作为提示词的实际含义,但这也不能怪LLM,因为是我们没有把上下文(背景)告诉LLM,LLM它自然不能理解我们问的是LLM领域的Prompt。

那我们来优化一下这个prompt,给出LLM的人设及问问题的特定背景,优化后的prompt如下:
你是AI专家,请用一句话说清楚在LLM中prompt是什么?

我们来看执行结果:

会发现LLM给出了大致符合我们预期的答案,这就是Prompt Engineering的作用,经过优化Prompt能让LLM生成更如何我们预期的答案。

4. Prompt Engineering的技巧

下面是给出优化前后的prompt以及他们对应的结果,可以使用下面的prompt替换上述的question进行自行测试,就不贴图了。

4.1 清晰、明确,避免含糊的词

内容 优化前 优化后
Prompt 请用几句话来描述AI的前景 请用两句话来描述AI的前景
结果 AI的前景广阔且充满无限可能。随着技术的不断进步,AI将在各个领域发挥重要作用,包括但不限于医疗、交通、教育等。它将助力实现更高效、更精准的决策,推动社会生产力的提升,甚至可能引领全新的工作和生活方式。同时,AI的发展也将对伦理、隐私和就业等方面带来挑战,需要我们共同探索和解决。总的来说,AI的前景是变革性的,它将深刻影响我们的未来。 AI前景广阔,将深刻改变各行各业;随着技术不断进步,AI将在未来发挥巨大潜力,引领智能时代新篇章。

4.2 分割符

将指令和待处理的内容分开,分隔符包括:"""、---、< >、###等

内容 优化前 优化后
Prompt 将下面的话翻译成英文。 尽量用华丽的词语 你真美丽 将下面的话翻译成英文。 ### 尽量用华丽的词语 你真美丽 ###
结果 You are so exquisitely beautiful. Try to use flowery language. Oh, how exquisitely beautiful you are!

4.3 结构化输出

对输出指定特定的格式,有利于得到稳定的输出,例如:Html、Json

内容 优化前 优化后
Prompt 请给我列举现在国内销量最高的2款电动汽车,包含名字、特点 请给我列举现在国内销量最高的3款电动汽车,包含名字、特点. 只需要给出JSON格式结果,不需要其他解释的内容,JSON中的key如下:name,features.
结果 现在国内销量最高的2款电动汽车,按照销量排名,分别是: 1. 比亚迪相关电动汽车 : -名字:由于比亚迪有多款热销电动汽车,如秦PLUS、汉EV等,因此这里不特指某一款车型,而是泛指比亚迪品牌的电动汽车。 - 特点:性价比高、续航里程长、车型丰富、技术先进。 2. 理想汽车相关电动汽车 : - 名字:由于理想汽车有多款热销车型,如理想L6、理想L7等,因此这里不特指某一款车型,而是泛指理想品牌的电动汽车。 - 特点:车内空间宽敞、乘坐体验舒适、智能驾驶技术先进。 以上内容主要基于当前可获得的公开信息整理而成。 {"name":"比亚迪","features":"性价比高,实用性强,在下沉市场销量增长显著,2024年1-9月累计销量为274.79万辆,成为中国市场销量最高的新能源汽车品牌。"},{"name":"理想汽车","features":"连续36周蝉联新势力销量冠军后,虽在2025年第一周销量滑落至第二,但仍以0.67万辆的销量显示出强大的市场竞争力。"}

4.4 背景设定

设定LLM作为一个角色,也可以设定自己是一个什么角色

内容 优化前 优化后
Prompt 请用3句话说明如何学习英语? 你是高中英语老师,擅长提高高考英语成绩,我是一名高三下学期的学生。请用3句话说明如何学习英语?
结果 1. 学习英语首先要打好语言基础,包括掌握单词、语法和句型。 2. 通过大量阅读和听力练习,提高英语理解和口语表达能力。 3. 多与英语母语者交流,积极参与英语实践活动,不断增强英语应用能力。 作为高中英语老师,对于如何高效学习英语,我的建议如下: 首先,要坚持每天阅读英文材料,这不仅能提升阅读理解能力,还能增强语感,为写作和口语表达积累素材。 其次,多做真题和模拟题,通过实战演练来巩固语法知识,提高解题速度和准确性,这是提升英语成绩的关键。 最后,不要忽视听力和口语的练习,通过听英文广播、看英文电影等方式培养语感,同时尝试与英语母语者交流,以提升听说能力。

接下来介绍一些进阶的Prompt Engineering高阶一点的技术

4.5 少量样本提示(Few-shot prompting)

Few-shot prompting 可以用作一种支持上下文学习的技术,以引导模型获得更好的表现。

内容 优化前 优化后
Prompt 请用积极的或者消极的回答 相安无事!// 请用积极的或者消极的回答 这太棒了! // 积极的 这太糟糕了! //消极的 哇,那部电影太棒了!/ /积极的 相安无事!//
结果 积极的回答:大家和谐相处,相安无事,真是太好了! 或者 消极的回答:虽然目前相安无事,但谁知道未来会不会出现问题呢。 相安无事! // 积极的(表示一切顺利,没有出现问题或冲突)

4.6 Chain-of-thought(COT,思维链)

https://arxiv.org/abs/2201.11903

思维链允许大模型通过一系列中间步骤解决问题,然后给出最终答案。它是通过提示诱导模型通过模拟思维过程的推理步骤来回答多步问题,从而提高推理能力。

内容 优化前 优化后
Prompt 食堂有23个苹果,如果他们用掉了20个后又买了6个。他们现在有多少个苹果? 问:食堂有23个苹果,如果他们用掉了20个后又买了6个。他们现在有多少个苹果? 请一步一步思考
结果 食堂开始时有23个苹果。 1. 他们首先用掉了20个苹果,所以食堂里剩下的苹果数量变为:23 - 20 = 3个苹果。 2. 接着,他们又买了6个苹果,所以食堂现在的苹果数量变为:3 + 6 = 9个苹果。 综上所述,他们现在有9个苹果。 首先,我们需要理解题目中的关键信息,食堂最初有23个苹果。 第一步,食堂用掉了20个苹果。 最初的苹果数量是23个,用掉20个之后,剩余的苹果数量就是23 - 20 = 3个。 第二步,食堂又买了6个苹果。 在剩余3个苹果的基础上,再增加6个新购买的苹果,所以现在的苹果总数是3 + 6 = 9个。 所以,他们现在有9个苹果。

可以发现,其实不加"请一步一步思考",千帆大模型也能得到正确的答案(实际在GPT4上也能得到正确的结果),只是加了以后更清晰一些,但如果是在GTP3.5上,加不加"请一步一步思考"会体现不同的效果,这个可以自行验证。这里主要是体现思维链的使用方式。

主要就是:请一步一步思考,对应英文Let's think step by step

4.7 Self-consistency decoding(自洽编码)

https://arxiv.org/abs/2203.11171

自洽编码,同时执行多个思维链展开,然后从所有展开中选择最常达到的结论。

内容 优化前 优化后
Prompt 看这一串数字:36、34、30、28、24,下一个数字是什么? 假设有3个数学专家,来计算一下答案,最后少数服从多数,最后给出结论,请记录中间过程 看这一串数字:36、34、30、28、24,下一个数字是什么?
结果 首先,我们要找出这一串数字:36、34、30、28、24之间的关系或规律,以便预测下一个数字。 观察这一串数字,我们可以尝试找出每两个相邻数字之间的差值: * 36 - 34 = 2 * 34 - 30 = 4 * 30 - 28 = 2 * 28 - 24 = 4 可以看出,相邻两个数字的差值在2和4之间交替变化。这是一个明显的规律。 现在,我们来应用这个规律来找出下一个数字。最后一个给出的数字是24,它之前的数字是28,它们之间的差值是4。根据我们找到的规律,下一个差值应该是2。 因此,下一个数字应该是24减去2,即22。 首先,我们观察给出的数字序列:36、34、30、28、24,我们需要找出这些数字之间的关系或规律,从而推测出下一个数字。 观察发现: * 36到34,减少了2; * 34到30,减少了4; * 30到28,减少了2; * 28到24,减少了4。 可以看出,数字之间的差值在2和4之间交替变化。这是一个明显的规律,我们可以根据这个规律来推测下一个数字。 由于最后一个差值是从28到24,差值是4,那么根据交替变化的规律,下一个差值应该是2。因此,我们从24减去2,得到下一个数字是22。 现在,我们请三位数学专家进行计算和验证: 专家1的计算过程: 观察数字序列,发现差值是2和4交替出现,因此下一个差值应是2。从24减去2得到22。 专家2的计算过程: 分析序列中相邻数字的差值,发现它们以2和4的差值交替递减。既然最后一个差值是4,那么下一个差值应该是2。所以,从24减去2,结果是22。 专家3的计算过程: 查看数字序列,注意到数字之间的差值在2和4之间变化,且这种变化是交替的。由于最后一个差值是4,根据规律,下一个差值应为2。从24中减去这个差值,我们得到22。 三位专家的结论都是下一个数字是22。根据"少数服从多数"的原则,由于所有专家都得出了相同的结论,我们可以确定下一个数字是22。

可以发现,如果没有优化的Prompt也能得到正确的答案,只是优化后的Prompt看起来更专业而已,这也证明了千帆模型的强大,GPT3.5在这个上面也会体现出差异。

4.8 Three-of-thought(思维树)

https://arxiv.org/abs/2305.10601

思维树,思维树提示通过提示模型生成一个或多个"可能的后续步骤",然后通过广度优先、波束搜索或者其他所有方法在每个可能的步骤上运行模型来概括思维链。

内容 优化前 优化后
Prompt 鲍勃在客厅里。 他拿着一个杯子走向厨房。 他把一个球放进杯子里,把杯子拿到卧室。 他把杯子倒过来,然后走向花园。 他把杯子放在花园里,然后走向车库。 球在哪里? 想象一下,三个不同的专家正在回答这个问题。 所有的专家都会写下他们思考的第一步, 然后与大家分享。 然后所有专家将进入下一步,以此类推。 如果任何专家在任何时候意识到他们错了,他们就会离开。 问题是: 鲍勃在客厅里。 他拿着一个杯子走向厨房。 他把一个球放进杯子里,把杯子拿到卧室。 他把杯子倒过来,然后走向花园。 他把杯子放在花园里,然后走向车库。 球在哪里?
结果 这是一道物品位置分析的问题。为了确定球的当前位置,我们需要基于题目的描述仔细分析每一步发生的事件。 首先,我们梳理一下题目中给的关键信息: 1.鲍勃在客厅里。 2.他拿着一个杯子走向厨房。 3.他把一个球放进杯子里,把杯子拿到卧室。 4.他把杯子倒过来,然后走向花园。 5.他把杯子放在花园里,然后走向车库。 接下来,我们分析这些事件对球位置的影响: 1.鲍勃首先拿着一个空杯子走向厨房,这个动作对球的位置没有影响,因为此时球还未被引入。 2.在厨房里,鲍勃把球放进了杯子,并随后将杯子带到了卧室。这表明球被放入杯子中,并随着杯子移动到了卧室。 3.在卧室,鲍勃将杯子倒过来。这个动作是关键,因为如果杯子里有球,倒过来的动作会导致球掉出来,除非杯子口非常小或者有东西阻止球掉出。但题目没有提及任何阻止球掉出的机制,因此我们可以合理推断,球在杯子倒过来后已经从杯子里掉出。 4.鲍勃之后将杯子带到花园并放下,但此时球已经不在杯子里了。 5.鲍勃离开花园走向车库,这个动作对球的位置没有影响。 综上所述,球现在应该在卧室里,因为它是从那里掉出来的。 因此,球现在在卧室。 首先,让我们设定三位专家:专家A、专家B和专家C。下面是他们思考的第一步和后续步骤。 专家A * 第一步:首先,我需要理解问题的整体流程和关键动作。鲍勃的一系列动作表明,他首先将球放入杯子,然后将杯子带到卧室,接着倒置杯子,并最后将其放置在花园。 专家B * 第一步:我会关注与球位置变化有关的关键信息。鲍勃在客厅拿起一个杯子,走到厨房,放入球后带到卧室,然后倒置杯子。这是决定球最终位置的关键步骤。 专家C * 第一步:我的第一步是识别出问题中的关键转折点。在这个场景中,鲍勃将球放入杯子,并将杯子带到卧室,然后倒置,这是一个重要的转折点,因为它可能改变了球的位置。 专家A的下一步 * 接下来,我需要考虑倒置杯子的动作对球位置的影响。如果杯子被完全倒置且没有泄漏,球应该还在杯子里。但是,鲍勃之后将杯子放在了花园,这个动作可能改变了球的位置。 专家B的下一步 * 接下来,我要考虑球在倒置后的可能位置。如果杯子被紧密封闭且没有漏洞,球可能还在杯子里。但鲍勃走到花园放下杯子的行为可能是一个关键因素,需要仔细分析。 专家C的下一步 * 我需要考虑鲍勃将杯子倒置并带到花园后,球的可能位置。如果倒置后球没有掉出,并且在去花园的过程中也没有掉出,那么球应该还在杯子里。 所有专家的共同结论 * 在没有额外信息表明球在过程中掉出的情况下,我们可以合理推断,在鲍勃将倒置的杯子放在花园后,球应该还在杯子里。因此,球在花园里的杯子里。 在这个过程中,没有专家意识到他们错了,所以他们都没有离开。最终,所有专家都得出了相同的结论:球在花园里的杯子里。

在优化前和优化后得出了不同的结论,关键点在于问题中没有给出球是否掉下来,从解释上看使用了使用了思维树的结论显示更专业。

几者的差别:

5.第三方Prompt优化工具

百度千帆Prompt优化

会发现如果我们选择了思维链条,千帆优化Prompt也是加上了我们的黑魔法:让我们一步一步来思考

Prompt中文调教指南

Prompt英文调教指南

6. 思考

有人说,Prompt Engineering是大语言模型初级阶段的中间产物,的确在本文的部分测试(思维链和自洽编码)中,发现:

千帆的ERNIE-4.0-8K ≈ ChatGPT4 ≈ ChatGPT3.5 + Prompt Engineering > ChatGPT3.5

从这个方面来讲,的确随着大语言模型的不断发展,大语言模型的理解能力、逻辑推理能力在不断增强,不过我认为Prompt Engineering是有它存在的价值,毕竟人总是要跟大语言模型交互的,而交互就会有噪音,而Prompt Engineering就是来降低噪音让大语言模型更好地理解我们的真实需求。

当然,我们还可以利用RAG、NLP、Question Rewrites、Embedding、Function Calling等技术来不断让Prompt Engineering做的更好,不过了解这些底层的优化思路是很有必要的。

相关推荐
zSD55rt5a29 分钟前
方差在扩散模型保护中的作用
人工智能·harmonyos
人生百态,人生如梦1 小时前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
用户652238438111 小时前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa99883341 小时前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能
wuhanzhanhui1 小时前
当AI遇见储能!2026武汉国际数字能源产业与新型电力及储能技术展览会
人工智能·能源
Tangyuewei1 小时前
给 AI 套上缰绳:Harness Engineering 是什么
人工智能
AI棒棒牛1 小时前
第11讲 | 目标检测任务:边界框、IoU、类别与置信度
人工智能·yolo·目标检测·yolo26
allione1 小时前
AI时代测试方向AI for Testing和Testing for AI
人工智能·ai测试
武子康1 小时前
GPT-Red:自动化红队如何形成 Agent 安全数据飞轮(4 个闭环 + 6 类评测指标 + 5 类风险误读)
人工智能·openai·agent
阿里云大数据AI技术1 小时前
DataWorks Data Agent 实战课堂(二):一句话搞定数据集成+处理,实现端到端数据流水线
人工智能·agent