分享

Prompt优化策略(小白版本)

 医学abeycd 2024-04-01 发布于湖北

Prompt对于大部分人而言是一个比较陌生的词汇,随着大模型起来,越来越多人熟悉。

我想,觉大部分人在上学阶段都扮演过Human Intelligence,被考卷Prompt过,最典型的就是写作文,下面是23年北京高考作文题目:

“续航”一词,原指连续航行,今天在使用中被赋予了新的含义,如为青春续航、科技为经济发展续航等。

请以“续航”为题目,写一篇议论文。

要求:论点明确,论据充实,论证合理;语言流畅,书写清晰。

大家品一下,是不是就是你们平时和chatGPT或者文心一言等大模型对话的调调。

好的prompt能让大模型更好的发挥起潜能,另外,通过对prompt的学习和优化,也有助于对大模型的机制了解和认识加深。

prompt的教学文章和视频很多,也有专门的prompt生成和优化工具,如下是基于openAI的公开文档以及结合自己平时的使用体验总结的,希望对大家有帮助。

当然,终归实践出真知,还是得多用,多思考,多尝试。

1、Prompt指令清晰且明确

大模型就像一个知识非常丰富的专家,他不认识你,不预先知道你的想法,为了得到更好的回答,我们首先需要知道自己想要什么,然后主动表达清楚自己的意图和想法。那怎么提高自己指令的清晰程度呢,通常有如下几个手段,不是每个prompt都需要遵循下面的技巧,根据合适的场景选择即可:

  • 给模型设定一个角色,让模型了解他自己的定位:比如你家小孩上小学二年级,你参加家长会并作为代表发言,你要求大模型给你写一篇发言稿,在这个prompt里面,你可以说“假设你是一名小学二年级的家长,你要作为家长代表发表演讲,XXXX”

  • 指令中提供更多细节信息和约束条件还是家长会的例子,相比你直接说“写一篇家长会发言稿”,更好的指令是“写一篇参加小学二年级家长会的发言稿,基调是积极向上,篇幅大概5分钟,分为三段,第一段表达对学校和老师的感谢,第二段表达孩子们在过去一个学期的收获,第三段鼓励小孩子们在接下来的学期要继续努力”
  • 指定完成任务所需的步骤如果涉及较为复杂的需求,或者你对输出结果有自己特定的想法和要求,可以在prompt中指定步骤让大模型遵循。比如你参加了一个会议,记录了比较多的会议内容,你想快速的整理成纪要和老板汇报下。prompt可以这么写“请按照如下步骤来总结纪要,第一步我会提供给你一些会议的内容,你把这些总结成为四句话,第二步把第一步总结的四句话翻译成英文”
  • 提供一个你觉得最理想的回答示例这就是所谓的“few-shot”,让大模型能根据你的要求学习,模仿和超越,通常适用于你想要模型指定模仿,或者很难用文字直接描述清楚你的要求的时候,那比较有效的方式就是给出示例
  • 最后一个小tip就是指令格式规整,用分隔符清楚的断句,降低大模型理解成本


2、给大模型提供参考信息

幻觉是大模型的固有特性(我觉得幻觉是一个中性词,不一定是个问题,看应用在什么场合),可能会在某些场景下一本正经的胡说,而用户浑然不觉,如果你想尽可能的规避这种现象,可以指示模型使用参考文本或者指定引用信息来回答,来约束大模型的发挥,尽量让模型在圈定的范围内做答。

这个应用在目前搜索场景特别普遍,比如Google的SGE,bing或者百度的搜索智能回答,当用户询问一个query,以前是一条一条的信息/站点根据排序呈现给用户,AI搜索下,大模型会基于检索到的内容,在首位生成一段总结回答,在回答中会也会注明引用来源。

这里的智能搜索回答其实就是指定参考信息或者引用来源生成总结答案,这样大模型就不会天马行空

图1:谷歌SGE结果;图2:百度智能搜索结果

3、化繁为简,将复杂任务拆解为简单的子任务

上学的时候或者大家在辅导自己孩子作业的时候,应该都有过类似的经验,在面对一个复杂问题的时候,我们首先会读题,然后把问题进行拆解,最后逐一去攻破。
我们在和大模型沟通的时候,也可以遵循同样的逻辑。本质上,这个是一个系统理论,即复杂的任务通过拆解为更简单子任务后,已解决的子任务的输出可为后续子任务提供输入,从而提高信息的利用率,降低错误的概率。另外,还有一个好处就是可以降低计算成本,复杂任务算力消耗更多。
  • 对于需非常多轮对话的应用,总结或过滤以前的对话

模型的内容窗口现在还难以突破,对于需要多轮对话的任务,模型在后续沟通中,可能已经忘记前面的内容,因此,我们可以在新的对话中,提供前面对话内容的总结或者基于最新的节点提供最新的信息输入,帮助模型提高长期记忆能力,从而更好的输出。

这有点类似,每次上课前,老师花点时间和大家回忆下上堂课讲了什么,唤醒大家的记忆,为本节课的新内容做好铺垫承接

  • 使用意图分类来识别与用户查询最相关的指令

对于需要大量独立指令集来处理不同情况的任务,如果直接使用单个查询来执行整个任务,错误率和成本均更高,更好的方法是,先对查询类型进行分类,并使用该分类来确定需要哪些指令,这种方法的每个查询仅包含执行任务下一阶段所需的指令,更高效且算力消耗更低。

在OpenAI的示例教程里面有个比较经典的case,即关于微调chatGPT成为一个“客服助手”来解答用户的疑问。

一个用户问一个问题,客服会基于问题给出答案,但因为客户的问题千奇百怪,怎么能针对不同问题高效地给出恰到好处的回复?  

首先,先对用户问题进行分类,一级分类有哪些,哪些情形或者包含哪些关键词的询问分别归属哪些一级行业。

然后,针对不同一级类别和情形,分别给出什么样的引导和回复。整个过程其实就把一个复杂的问题,通过鱼骨图的逻辑进行拆解归类,让整个过程更有逻辑和层次。

4、给模型时间“思考”

大模型在尝试立即回答而不是花时间找出答案时会犯更多推理错误。在给出答案之前询问“思维链”(chain of thought)可以帮助模型更可靠地推理出正确答案。
  • 引导模型在急于得出结论之前找出自己的解决方法:

这里仍然引用OpenAI的案例,你是一个老师,你在出题测试学生,你想让大模型帮你判断学生的解决方案是否正确。
测试题目是“我正在建造一个太阳能发电装置,我需要知道第一年要花多少钱与土地面积的函数。其中, 土地成本为 100 美元/平方英尺, 太阳能电池板价格是250 美元/平方英尺,每年维护费10 万美元且第一年还要额外花费 10 美元/平方英尺”

学生的解决方案:设 x 为装置的尺寸(以平方英尺为单位),总成本:100x + 250x + 100,000 + 100x = 450x + 100,000

大模型的判断:该学生的解决方案是正确的。

但这位同学的解法其实并不正确。因此,我们可以修改prompt,让模型"首先生成自己的解决方案来让模型成功注意到这一点,然后让模型把自己的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确"

大模型的判断:设 x 为安装尺寸(以平方英尺为单位)。土地成本100x ,太阳能电池板成本250x , 维护成本100,000 + 10x ,总成本100x + 250x + 100,000 + 10x = 360x + 100,000,得出学生的解决方案不正确,因为他们在维护成本计算中犯了一个错误,使用了 100x 而不是 10x。

  • 询问模型在之前的过程中是否遗漏了任何内容

假设我们使用一个模型来列出与特定问题相关的来源的摘录,列出每个摘录后,模型需要确定是否应该开始编写另一个摘录或者是否应该停止。
如果源文档很大,模型通常会过早停止并且无法列出所有相关摘录。在这种情况下,通过使用后续查询提示模型查找之前传递中错过的任何摘录,通常可以获得更好的性能。

5、使用外部工具

对于某些特定的任务,如果通用大模型的能力不够强大,可以通过向模型提供其他工具的输出来弥补模型的弱点。
例如,搜索增强(RAG)可以让模型的回复更有时效性、相关性更强;类似OpenAI的代码解释器可以帮助大模型进行更准确的数学运算和代码执行;当然还有其他很多工具,可以基于实际应用场景选择不同工具

6、系统地测试prompt优化的效果

在某些情况下,对Prompt的修改将在一些单点的示例上实现更好的性能,但由于样本量较小,很难判断整个系统变得更好还是更差,因为,一种变化有助于某些输入的性能改善,但会损害其他输入的性能。
如果可以很好地衡量表现,那么提高表现就会更容易。因此,为了确保更改对性能整体产生全面积极影响,需要定义一个全面的评估标准。

评估程序(或“evals”)对于优化系统设计非常有用,好的评估需要满足:

  • 评估样本有效,即要代表/接近实际使用情况

  • 95%统计置信度下,不同程度差异检测水平,需要的样本数量如下截图

  • 易于自动化或复现

评估执行可以由计算机、人类或两者混合来完成,计算机可以使用客观标准(例如,具有单个正确答案的问题)以及一些主观或模糊标准自动进行评估,其中模型输出由其他模型查询进行评估。例如OpenAI Evals,他是一个开源软件框架,提供用于创建自动化评估的工具。

具体评估执行上,可以参考黄金标准答案来评估模型输出即假设已知问题的正确答案应参考一组特定的已知事实,然后我们可以使用模型查询来计算答案中包含多少必需的事实。具体示例,大家可以看OpenAI的网站,链接如下参考文档。

参考信息

https://platform./docs/guides/prompt-engineering/strategy-use-external-tools

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多