利用ChatGPT做Prompt自动优化

这篇具有很好参考价值的文章主要介绍了利用ChatGPT做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-469355.html

其他观察

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

到了这里,关于利用ChatGPT做Prompt自动优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 创新学术之道:如何充分利用ChatGPT优化论文写作过程

    ChatGPT无限次数: 点击直达 随着人工智能技术的发展,ChatGPT作为一种高效的自然语言处理工具,在学术领域的应用也日渐普及。本文将介绍如何充分利用ChatGPT优化论文写作过程,提高写作效率和质量。 ChatGPT是由OpenAI开发的基于大型预训练模型的对话生成工具,具有强大的文

    2024年04月09日
    浏览(60)
  • 如何利用ChatGPT自动生成SQL语句

    作为一名开发者,你可能已经使用过自然语言处理(NLP)及其可能彻底改变我们与技术互动的方式。由OpenAI提供支持的文本到SQL工具是一种强大的方法,可以从自然语言文本中生成SQL语句。在本博客文章中,我们将探讨七个创造性和不寻常的示例,展示如何使用ChatGPT生成SQ

    2024年02月01日
    浏览(52)
  • 【回眸】又是一年毕业季,怎么利用ChatGPT 4.0 优化毕业论文?

    【回眸】又是一年毕业季,怎么利用ChatGPT 4.0 优化毕业论文? 前言 ChatGPT4.0降重提示词(3.5表现略逊色一些,不过也可以用这个来作为提示词) 举个例子 降重前的原文 构思提示词 确定提问词 选用合适的翻译软件 英文回翻 审阅修改 又到了一年毕业季,作为一个今年毕业的

    2024年02月04日
    浏览(38)
  • 如何利用 ChatGPT 进行自动数据清理和预处理

    推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 ChatGPT 已经成为一把可用于多种应用的瑞士军刀,并且有大量的空间将 ChatGPT 集成到数据科学工作流程中。 如果您曾经在真实数据集上训练过机器学习模型,您就会知道数据清理和预处理的步骤对于构建可靠的

    2024年02月12日
    浏览(47)
  • 利用chatGPT,半小时搞定git自动拉取代码

    果然是工具利用的好,极大的提高了生产力啊。 对我shell这种都没有写过100行代码的人来说,真的是提高了工作效率。按照以往的经验,我一边google,一边写代码,至少也要半天时间。 先来预览下结果: 上面的执行环境,就是我之前的文章写过的开源软件。 脚本update_code.

    2023年04月09日
    浏览(42)
  • chatgpt赋能python:如何利用Python进行自动化办公

    在现代办公环境中,自动化成为了一种趋势。利用计算机程序自动处理重复性劳动,可以提高生产效率和工作质量,同时也能够让工作更加轻松。Python作为一种常用的编程语言,在自动化办公中发挥了重要作用。 自动化办公是指利用计算机程序自动完成办公工作的一种方式。

    2024年02月11日
    浏览(53)
  • 软件测试/测试开发丨利用ChatGPT自动生成架构图

    架构图通过图形化的表达方式,用于呈现系统、软件的结构、组件、关系和交互方式。一个明确的架构图可以更好地辅助业务分析、技术架构分析的工作。架构图的设计是一个有难度的任务,设计者必须要对业务、相关技术栈都非常清晰才能设计出来符合需求的架构图。 1.有

    2024年02月06日
    浏览(55)
  • 5分钟掌握利用pycharm插件BitoAI 实现chatgpt自动编写代码

    最近出现了一款新型编程助手BitoAI。今天的主要内容就是给大家介绍它,号称 IDE 的“瑞士军刀”,可以提升开发 10 倍的效率。 简言之它的强大之处就是可以通过类似于ChatGPT对话的方式来编写代码,分析代码,生成代码等。使用 Bito,你可以轻松完成编码任务,同时还能够享

    2024年02月05日
    浏览(54)
  • 软件测试/测试开发丨利用ChatGPT 生成自动化测试脚本

    自动化测试脚本可以模拟用户与应用程序的交互,例如点击按钮、输入数据、导航到不同的页面等等,以验证应用程序的正确性、性能和稳定性。 自动化测试在回归测试、冒烟测试等测试流程中都可以极大地起到节省时间、节省人力的作用,所以目前自动化测试工程师,也是

    2024年02月05日
    浏览(59)
  • 如何利用EAP系统优化锂电生产线的自动化流程?

    锂电行业是新兴的能源产业,其快速发展和规模化生产对设备自动化系统的需求也越来越高。在生产过程中,设备自动化系统EAP(Equipment Automation Program)可以实现对生产线上的所有机台进行实时管控,从而实现设备运行的自动化,提高生产效率和产品质量。 设备自动化系统

    2024年02月04日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包