Prompt炼丹炉——一系列Prompt自动优化的实践记录

这篇具有很好参考价值的文章主要介绍了Prompt炼丹炉——一系列Prompt自动优化的实践记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原由

随着对ChatGPT的使用深入和各种杂七杂八的论文阅读,我得到了一个很强烈的认知:让普通人直接与ChatGPT对话以期得到良好结果是过分乐观到大可不必的。所以,一定会出现足够多的,以openai为基础,以广义prompt为核心竞争力的垂类商业公司,且赚的盆满钵满。
由此继续推出:Prompt炼丹这件事是需要很好的自动化的。当然,各大厂也都在用小模型训练+大模型反馈的方式做了很多自动化的尝试。但是对于个人/小公司来说,这样的方式是承担不起的(主要成本在于自研小模型及其算法)。那openai的贫民赋能就体现出来了,可以直接用openai搞!
免责声明:本文只说思路,因为所有内容都是利用公司的资产实验出来的,所有细节法理上是公司产权。

Take 0,单prompt直接对话

这种有很多,大概思路有两个:

  • 让ChatGPT假装prompt工程师,输入任务描述,ChatGPT给出完整的prompt。
  • 让ChatGPT假装prompt工程师,输入老prompt,ChatGPT根据老prompt给出新的prompt。这时候通常只是改改语法,加一些例子。
    这两者都是严重依赖对话的,且没有prompt泛化能力。是个人用户快速优化prompt的手段,而且第一个方式利用多轮对话和持续的信息补充效果是优于第二种的。

Take 1,利用训练集直接对话

思路很简单,把输入和预期输出给ChatGPT,让他直接根据这两者进行提示词优化,不做迭代过程。
问题很大,因为ChatGPT从原理上并不是语义理解的而是网络激活,预期会把对应网络直接激活,生成的prompt只有在这个对话中产生准确内容(COT的效果,与prompt无关)并不能真的用。

Take 2,利用pseudo-code进行训练

之前搞了一套基底prompt能够在ChatGPT中执行java-like伪代码,prompt 见repo。
在这个基底上,利用极简单的if-else+prompt+for-loop试图跑一套自动化的迭代。分别试了:

  • 无训练数据:完全不能用。自然语言的空间过于复杂,ChatGPT纯粹在盲猜,结果就像无头苍蝇一样,全是垃圾。
  • 有训练数据,不清context:完全不能用。与take 1的问题一样,在COT的魔法下,第一次迭代的生成就会因为相关网络被激活直接返回完全正确的结果,但是prompt并不能用。
  • 有训练数据,清context:完全不能用。由于清context是以子prompt的形式发生在for-loop中,整个运行时激活的网络都会被清掉,伪码执行器直接没了。

以下都开始进入到langchain训练阶段。迭代内容都会加上相似度得分的反馈。整体思路就是用langchain+ChatGPT在文字空间上做梯度下降。

Take 3,langchain 单prompt迭代

单次迭代过程只有一个prompt和单个数据的训练“集”,试过几个思路:

  • 不给训练集内容,给history,直接让ChatGPT盲猜:完全不能用。相较于Take 2,这次给了相似度得分(目标),本以为会好一些,整体仍然是无头苍蝇。
  • 给训练集内容,给history:不能用。一方面是由于单次迭代仍然是一个上下文,还是会有COT问题;另一方面history+训练集的内容很容易在迭代一两次之后就超过token限制了(这里主要是langchain的例子里,history是以HumanMessage内容的形式给过去的,而不是AIMessage)。不过由于明显有问题,未继续迭代。

以下开始进入到多条数据的训练集上。

Take 4, langchain 单prompt迭代

与 Take 3区别只有训练集个数增加,希望用数据打破过拟合。也试了给history和不给history,结果都不理想,突出的问题是单prompt承载的需求太多,明显ChatGPT不能“理解”prompt了。


以下使用新prompt在训练数据上进行生成的工作都使用独立的context执行。

Take 5,langchain 多prompt迭代

下面是优化的各种维度以及成效,优化是叠加的不是互斥的。

  • target与history合并,不再独立给target和history。降低数据关联需要的“理解”成本,区别不大,优化用的prompt还是太复杂。
  • 去掉target。有些效果,只给history似乎比都给要好一些。不能解释。
  • 分数加上对长度的考虑。有效果,由于(据我所知)长度在embedding上没啥特别强的体现,之前的优化会让ChatGPT试图让生成的内容越来越长,但是这个在很多场景下是负优化。加上长度后,分数会更好的体现这个目标。

整体看,单个prompt还是太过复杂,且梯度下降的导数仍然不明确。

Take 6,langchain 多prompt + diff迭代

下文会有三个prompt:

  • 优化prompt的prompt,简称优化prompt
  • 被优化的prompt,简称目标prompt
  • 计算差异的prompt,简称差异prompt

抽象来看,语言空间上的导数,其实就是语义化的差异解释。本文除了排除各种尝试的死胡同之外最有价值的一句话。下面是优化的各种维度以及成效,优化是叠加的不是互斥的。

  • 再加一次调用,使用差异prompt让ChatGPT给出本次迭代中target和result的差异点。把差异点作为优化prompt的输入。非常有效果,明显可以看到优化开始有方向感了,给了一个模糊的导数,从这里开始有质变。
  • 去掉history。非常有效果,干扰信息大幅减少,优化的理由更加聚焦了,又一次质变。而且由于优化prompt的长度与迭代轮次无关了,迭代轮次可以无限继续,也是工程角度的质变。
  • 优化差异prompt,让diff更关注表达方式而不是表达内容。非常有效果,明显把过拟合的现象打掉了,结果会相对更general。
  • 优化优化prompt,明确说让优化增强什么削弱什么。有效果,方向感更强了,类似于梯度下降的梯度函数的权重。

这次尝试的代码是基本可用的。两个训练数据的训练集的,简单输入输出的,相对简单目标prompt的情况下,9轮迭代可以得到语义上与目标prompt一致的结果。相似度+长度得分从0.59 涨到0.85。整个训练只需要5分钟左右时间。

Take 7, 去掉分数计算

在6的基础上,把分数去掉了,梯度的目标从最大化分数变成了语义化的减少差异。效果没有本质差异,但是减少了每次迭代的embedding调用,速度和成本上有比较大的提升。文章来源地址https://www.toymoban.com/news/detail-428452.html

其他观察

  • Prompt优化用小数量的语言空间的梯度下降过拟合风险不大。因为最后的产出是prompt,且一定是多句、多约束类型的组合,人可以非常简单的判断出过拟合部分,进而直接删掉。不存在有过拟合而不自知的情况。
  • 大模型做垂类任务的可解释性可能可以利用类似的方式解决掉一部分。不可解释的从完整流程变成prompt+模型中的模型部分。
  • 上下文比臆想中的重要性还高很多,操纵上下文会是很多优化的重点。
  • 控制输入量比很多优化都有价值,要做好O(1)的输入量,任何O(n)的输入量对迭代来讲都是毁灭性的。
  • ChatGPT的prompt一定要是单任务的,多任务一定出幺蛾子。
  • 各种不同模型的兼容最核心的是尽量把prompt拆碎,大的模型就多个prompt拼一起做复杂任务,小的模型就一个一个执行靠外部代码串联起来。

到了这里,关于Prompt炼丹炉——一系列Prompt自动优化的实践记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 真实记录阿里云实践成本优化,成本直接降低一半

    真实记录阿里云实践成本优化,成本直接降低一半

    本文真实记录3个月阿里云成本降低案例,先说结论,核心服务性能更佳,成本优化超一半,运维管理更自动化。 前言:本文不一定适合所有的阿里云使用者,其中优化的手段大部分可以借鉴参考,同时不涉及到包年包月购买方式的省钱方案,纯粹为技术方面的优化,比较合

    2024年02月10日
    浏览(4)
  • 【随手记录】Llama Tutorial 大语言模型实践 手把手系列带实践源码

    【随手记录】Llama Tutorial 大语言模型实践 手把手系列带实践源码

    这个tutorial的契机是yy突然看到了一个workshop 所以类似于一周大作业的形式,输入command输出使用了自动驾驶哪些模块,代码在这里 所以就干一干,顺便写一个tutorial给大家参考和教程 引申更多的应用 参考资料: https://github.com/facebookresearch/codellama, https://github.com/facebookresear

    2024年02月03日
    浏览(20)
  • OpenAI开发系列(十五):AI敏捷开发的新范式:利用大模型优化和自动化应用开发流程(上)

    OpenAI开发系列(十五):AI敏捷开发的新范式:利用大模型优化和自动化应用开发流程(上)

    授权声明: 本文基于九天Hector的原创课程资料创作,已获得其正式授权。 原课程出处:九天Hector的B站主页,感谢九天Hector为学习者带来的宝贵知识。 请尊重原创,转载或引用时,请标明来源。 全文共5000余字,预计阅读时间约30~50分钟 | 满满干货(附代码),建议收藏! 本文

    2024年02月03日
    浏览(12)
  • ChatGPT高效提问—prompt实践(白领助手)

    ChatGPT高效提问—prompt实践(白领助手)

    ​ 随着社会的不断发展,白领的比例越来越高。白领的工作通常较为繁忙,需要管理复杂的项目。工作量大、要求高、任务紧急,时间分配不当部分可能导致工作效率低下,任务延误等问题。如果能够为每位白领配备一名得力助手,帮助白领记录当天的工作内容,制定明日的

    2024年02月20日
    浏览(7)
  • Midjouney prompt优化

    Midjouney prompt优化

    Midjouney 主要有文字描述、图片+文字描述和图片+图片的三种出图方式,生成图片可以调整质量、版本、比例,与原图的相似程度以及权重等参数。 可以从主题内容、环境背景、构图镜头、参考方向和图像设定等方向进行描述,使用少而精、英文描述和指定风格

    2024年02月03日
    浏览(8)
  • Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法

    Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法

    生产环境Kafka集群压力大,Topic读写压力大,消费的lag比较大,因此通过扩容Topic的分区,增大Topic的读写性能 理论上下游消费者应该能够自动消费到新的分区,例如flume消费到了新的分区,但是实际情况是存在flink消费者没有消费到新的分区 出现无法消费topic新的分区这种情况

    2024年02月14日
    浏览(18)
  • 人工智能prompt的优化技巧

    了解prompt的构成有助于我们能够更好的编写prompt,prompt的构成类似于自然语言的成分。 prompt主要包括以下部分: 指令:你想让人工智能执行的命令 上下文:可以涉及外部信息或附加上下文,可以引导模型产生更好的响应,不是必须的 输入数据:我们感兴趣的输入或问题(以

    2024年02月16日
    浏览(9)
  • NLP实践——Llama-2 多轮对话prompt构建

    最近,META开源了Llama-2模型,受到了广泛的关注和好评,然而,在官方给的使用说明中,并没有对使用方法进行特别细节的介绍,尤其是对于对话任务,这就给我们在使用时带来了很多困扰。 以ChatGLM为例,在执行多轮对话时,需要将历史信息拼接到输入中,以供模型在生成时

    2024年02月15日
    浏览(9)
  • Prompt Engineering优化原则 - 以Webshell代码解释为例

    Prompt Engineering优化原则 - 以Webshell代码解释为例

    本文围绕“PHP代码解释”这一任务,讨论LLM prompt优化原则。 代码样例如下: 我们会根据不同的原则,修改对应的prompt提示词,并观察、分析GPT-3.5 Turbo得到的回应。 总体来说,iterative prompt development的循环如下图所示, prompt guidelines Be clear and specific Analyze why result does not giv

    2024年02月06日
    浏览(11)
  • ChatGPT基础知识系列之Prompt

    在 ChatGPT 中,用户可以输入任何问题或者话题,如天气、体育、新闻等等。系统将这个输入作为一个“提示”(prompt)输入到 GPT 模型中进行处理。GPT 模型会基于其学习到的语言规律和上下文知识,生成一个自然语言回答,并返回给用户。 例如,当用户输入“明天天气怎么样

    2024年02月14日
    浏览(7)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包