让大模型返回更准确的结果 提示词工程 Prompt Engineering

一、常常遇到的场景

当我们与大模型(LLM)对话时,可能我们想要的仅仅是它回答内容的一部分,而其他内容例如固定的开头或结尾:

  1. 根据xxxxx,可以给出xxxx内容,具体如下
  2. 综上所述,可以得出结论xxxxx
  3. 虽然xxxxx,但是可以通过xxxxxx来解决
  4. 等等

二、LLM超参配置

LLM提供了一些参数可以影响输出结果的创造力和确定性。

在每个步骤中LLM 会生成一个最有可能出现的token列表以及其对应的概率列表。
根据 top_p 的值,概率较低的 token 将被排除在概率列表之外,并且从剩余候选项中随机选择一个token(使用 temperature 来调整)。

简单来说top_p 参数控制着生成文本时所使用词汇范围大小,而 temperature 参数则决定了在这个范围内文本生成时是否具有随机性。当temperature接近 0 时,则会得到几乎是确定性结果。

三、提示词工程(Prompt Engineering)

简单来说大模型的运行机制是预测下一个字词,而我们输入的提问也就是 prompt 就是大模型唯一能感知的上下文,所以我们输入的 prompt 的内容决定了返回的结果,这与人对话是一样的,如果对方不能完整描述他的问题或要求我们也不能完整解答。

总的原则是“用户表达的需求越清晰,模型更有可能返回更高质量的结果”

通常情况下,每条信息都会有一个角色(role)和内容(content)
系统角色(system) 向语言模型传达开发者定义好的核心指令。
用户角色(user) 代表用户自己输入或者产生出来的信息。
助手角色(assistant) 由语言模型自动生成并回复出来。

3.1 System message系统指令:

大部分LLM模型的系统指令 System message 的权重强化高于人工输入的prompt 并在多轮对话中保持稳定,你可以使用系统消息来描述助手的个性,定义模型应该回答和不应该回答的内容,以及定义模型响应的格式

默认System message:You are a helpful assistant.

同样的我们也可以按照我们自己的场景自定义模型的角色,例如:
我想要他回答我烹饪方面的知识,那么我可以定义他是一名厨师

System message:你是一名厨师,熟悉所有菜系的制作方法并熟悉全部流程,在给出某道菜的具体制作过程时要同时给出制作成本和营养价值的参考,回答要严谨。

System message可以被广泛应用在:
角色扮演:在系统指令中告诉大模型需要它扮演的角色,即可沉浸式和该角色对话交流
语言风格:简单调整LLM的语言风格
任务设定:比如旅行规划,文案助手这样的专项任务处理
System message也可以被用于规定LLM的答复范围,并设定具体的行为。可以指定回答什么范围的问题,什么不允许回答。或当无法给出确定答案时返回某些固定句式的回答。

注意:即使在system message里面规范了模型回答也不能完全保证让模型按照我们规定的内容完全输出,只是尽可能提高了模型的回答准确性。

3.2 用户提示词(user prompt)

可以从以下几个方面尝试让返回的结果更精确:

  1. 提更多精准的需求
    例如:简单介绍一下番茄炒蛋这道菜
    可以变为:简单介绍一下番茄炒蛋这道菜,包括这道菜的做法,大致制作时长,营养价值,制作成本等

  2. 基于主要内容改动
    例如:今天天气怎么样?将这句话翻译成英语。

  3. 少样本学习(给示例,然后让大模型模仿)
    例如:请从xxxx中xxxx ,并按如下示例返回:
    示例
    xxxxx
    xxxxx
    xxxxx
    通过这种方式能够更准确的获得预期的结果

  4. 要求按照某种格式返回
    例如:xxxxxxxxxx,请从中总结xx的特点,并按如下格式返回
    格式:
    1.xxxxx
    2.xxxxx
    3.xxxxx

当然也可以要求使用 JSON 格式返回,同时添加返回的示例,可以进一步保证返回的结果保证正确

  1. 使用分隔符来达到划分的效果
    例如:请从以下内容中总结出xxx:

    内容内容内容内容
    内容内容内容内容

6.思维链提示
这是任务分解(step by step)技术的一种展现,在这种方法中,模型逐步进行思考,并呈现出涉及的步骤,这样做可以降低结果的不准确的可能性,并对模型响应的可解释性有很大的帮助

例如提问的最后可以加:xxxxxxxxx(提问内容),(在给出最终答案之前)请在回复中采用step by step的方式

7.任务拆分
与上面类似,可以将一个复杂任务进一步拆分,然后让大模型从单一简单的问题回答,最终汇总

四、写 Prompt 的原则总结

最核心的写一条好prompt的原则就是尽可能清晰、明确地表达你的需求(类比组长向组员提工作要求)。

细分下来,具体原则包括:
清晰的指令:足够清晰明确地说明你希望模型为你返回什么,最后更加细致地说明需求,避免模糊表达。
提供上下文和例子:给出较为充分的上下文信息,让模型更好地理解相关背景。如果能够提供示例,模型能表现更好(类似传统LLM中的in-context learning)。
善用符号和语法:使用清晰的标点符号,标题,标记有助于转达意图,并使输出更加容易被解析
让模型一步一步地思考:在这种方法中,模型逐步进行思考,并呈现出涉及的步骤,这样做可以降低结果的不准确的可能性,并对模型响应的可解释性有很大的帮助。
激励模型反思和给出思路:可以在prompt中用一些措辞激励模型给出理由,这样有助于我们更好地分析模型生成结果,同时,思维过程的生成,也有助于其生成更高质量的结果。
给容错空间:如模型无法完成指定的任务,给模型提供一个备用路径,比如针对文本提问,可以加入如果答案不存在,则回复“无答案”
让模型给出信息来源:在模型结合搜索或者外部知识库时,要求模型提供他的答案的信息来源,可以帮助LLM的答案减少捏造,并获取到最新的信息。

优质的提示词典型框架
使用LLM时,建议包含如下内容:
system message:你希望大模型扮演什么角色,来解决你当前的问题。大模型具有较强的角色扮演能力,相比直接回答往往表现更好。system message中也可以规定大模型的回答范围。
prompt
指令:明确说明你希望大模型做什么事情,不要含糊其辞。
例子:如果可能,提供尽可能丰富的例子信息。
原因:详细解释你希望模型做这件事情的原因、动机、希望的结果等,这样大模型能更好地理解你的想法,执行需求。
step by step:对于复杂任务,让大模型一步一步地思考,可以给出更加合理的答案。
对于输出格式的形容:对于部分场景,明确大模型输出格式的要求,可以更好地获取到更加结构化,适合系统调用的答案。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值