想了解Prompt 技术?看这篇就够了!
最近看了 Meta-Prompt,发现 Prompt 的技术已经发展了几代了。真的要好好梳理一下了。首先是官方有 一个自己的 Prompt engineer , 这个是一定要认真学习的。
https://platform.openai.com/docs/guides/prompt-engineering
官方建议:
- 写作清晰的指令
- 要在查询里提供足够的相关信息
- 要求模型有一个角色
- 用截止符清晰的区分输入的不同部分
- 指定不同的步骤来完成任务
- 提供样例
- 指定的输出长度
- 提供参考资料
- 指导模型用参考资料回答问题
- 指导模型用参考资料的条件回答问题
- 分割复杂任务到简单子任务
- 在查询里用意图来分类相关的指令
- 如果对话太长,就总结或者过滤一下以前的对话
- 分段总结长文本,并通过递归得到结果
- 让模型有时间去“思考”
- 指导模型得到一个解决方案,优先于得到个结果。
- 通过内部或者一系列的查询来隐藏模型的推理过程
- 重新问一下,如果它忘记了之前的事
- 使用外部工具
- 通过嵌入查询得到更有效的知识获取
- 通过执行外部 API 的代码得到更精确的结果
- 让这个模型访问 特定的功能
- 系统的测试变化 -通过金标准来评估输出的结果
举些例子吧:
坏的:怎么在 Excel 中加和数字。
好的:怎么在 Excel 中做一行数字的和的自动加法,所有的和的结果都自动显示在 S 列。
指定角色(通常要用 API)
系统Prompt:当我请求帮助写一些东西时,你会回复一份文档,其中每个段落至少包含一个笑话或有趣的评论。
用户Prompt:给我的文具供应商写一封感谢信,感谢他们在短时间内准时交货。这使我们能够交付一份重要的订单。
指定例子
系统:以一致的风格回答。
用户:教我耐心。
助手:河流冲刷出最深的山谷,发源于温和的泉水;最伟大的交响乐源自一个音符;最复杂的挂毯都是从一根单独的线开始的。
用户:教我有关海洋的知识。
真的 Prompt 技术与研究
前面的是官方的实践指南,但是接下来的可都是真实的论文总结出来有用的技术。
不过所有的技术都会过时!
Zero-Shot-Prompt
从我看到的资料来讲,Zero-Shot-Prompt 技术大概发展是这样的
- CoT:Chain of Thought Prompting
- Tree of Thoughts Prompt
- Graph Prompt
- Meta-Prompt
Chain of Thought Prompting
这个东西的定义很好玩儿,通过 CoT的 Prompt 来指导 LLM 通过有逻辑的,一步步的推理过程来完成复杂任务。
但是怎么搞呢?想办法让模型输出一系列的步骤或者思考结点,再最后得出结论的输出。
参考:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(https://arxiv.org/abs/2201.11903)
怎么完成这样的 Prompt 呢?通常是在你的 Prompt 前面加上下面的这样一句话:Let's think step by step./让我们一步步思考!
Tree of Thoughts Prompting
参考:Tree of Thoughts: Deliberate Problem Solving with Large Language Models(https://arxiv.org/abs/2305.10601)
这个图表达的特别好:可以简单的认为:如果一个复杂的问题,可以分解成多步,而每一步都有多个选择,那把它们都列出来,在每个步骤里选择最好的就是 ToT 的核心思想!
但是要使用 ToT,可能麻烦一些,它要把每一个中间步骤都存下来,用于接下一来的分析 ,所以是要会一些写代码的技巧的。
GitHub - princeton-nlp/tree-of-thought-llm: [NeurIPS 2023] Tree of Thoughts: Deliberate Problem Solving with Large Language Models。(https://github.com/princeton-nlp/tree-of-thought-llm)
Graph Prompt
参考:GraphPrompt: Unifying Pre-Training and Downstream Tasks for Graph Neural Networks (https://arxiv.org/abs/2302.08043)
在神经网络中,Graph 一直是一类比较特殊的存在,因为它们在真实世界中广泛存在,但是以神经网络的处理中又永远不是一份规范数据。所以怎么处理它就要一直用 Graph 来解释、处理它,甚至于简单的 Prompt 也不得不发展出了 Graph Prompt 这样一个概念。
但是你说它真的日常中能用吗?有点麻烦,通常是要定义好 点、边的关系,再搞 Prompt 。大部分都不会用,不过你有兴趣,可以看看代码 :
GitHub - Starlien95/GraphPrompt: GraphPrompt: Unifying Pre-Training and Downstream Tasks for Graph Neural Networks。(https://github.com/Starlien95/GraphPrompt)
Meta Prompt
参考:https://zhuanlan.zhihu.com/p/680981189 &Meta-Prompting: Enhancing Language Models with Task-Agnostic Scaffolding(https://arxiv.org/abs/2401.12954)
这是一个导入了 Agent 概念的 Prompt 技术。
论文中举的例子如下:
首先设置一个系统级的 Meta-Prompt 再输入正常的 Prompt 会输出 一个 Prompt 的交互结果,这个结果做为 Prompt 输入到 LLM 中 基于这个Prompt 的结果再次检查 Meta-Prompt 会输出检查对应的 Prompt,这个结果结果做为 Prompt 输入到 LLM 中 基于这个 Prompt 的结果再次检查,得到最终的输出
流程上就是 系统级的 Meta-Prompt,
- 输入 Prompt,得到一个校准过的 Prompt,得到输出
- 输入确认 Prompt,得到一个校准过的 Prompt,得到输出
- 输入最终确认 Prompt,得到输出
实际上在我看来这样的结果就是像最早说的,构建两级专家,一级专家用于校准特定领域专家,然后对输出做了两次校准后得到最后的结果。
Few-Shot-Prompt
这个与 Zero-Shot-Prompt 不同的就是你要在你的 Prompt 里提供几个示例,这样能更容易得到与示例类似的结果。
通常 Few-Shot-Prompt 会得到更好的结果,因为很简单,照猫画虎肯定是能得到一个类似的东西的。你提供了什么,一定能得到自己想要的什么。
这个是一个典型的 Few-Shot-Prompt 的方法
- Self-consistency with CoT (CoT-SC)
- Generated Knowledge Prompting for Commonsense Reasoning
Self-consistency with CoT (CoT-SC)
这是完全在 CoT 上面发展出来的技巧,但是更好用一些。
Self-Consistency Improves Chain of Thought Reasoning in Language Models(https://arxiv.org/abs/2203.11171)
设我们有一个简单的数学问题:一个农场有鸡和兔子,总共有35个头和94只脚,问鸡和兔子各有多少只?
使用"Chain of Thought"方法,我们可以这样推理:
- 问题分解:首先,我们知道每只鸡有2只脚,每只兔子有4只脚。
- 建立方程:设鸡的数量为C,兔子的数量为R,则有C + R = 35(头的总数)和2C + 4R = 94(脚的总数)。
- 求解方程:我们可以从第一个方程中解出C = 35 - R,然后将其代入第二个方程中,求得R的值,再求得C的值。
在这个过程中,"Self-consistency"确保了我们在每一步的逻辑推理都是基于前一步的结果,并且所有的假设(如每只鸡有2只脚,每只兔子有4只脚)都是一致的。
所以它是分成三部分的:
(1) 使用 (CoT) prompt;
(2) 把一次生成的结果,用 CoT生成多个可以多个不同的路径。
(3) 合并一致性最好的路径,得到结果。
Generated Knowledge Prompting for Commonsense Reasoning
参考:Self-Consistency Improves Chain of Thought Reasoning in Language Models(https://arxiv.org/pdf/2110.08387)
这个方法也是,通过几个示例,让推理更有事实依据。
好像可以用这个例子解释一下:
"考虑到冬天的低温环境,描述呼出气体时会发生什么。基于你对前面的气体的解释,请解释为什么在冬天人们会看到他们的呼吸在空气中变成白色。"
总结
如果用现在的最好的 LLM 的原理解释,信息压缩来看,Prompt 有两方面的作用。一:圈定高维信息的空间范围,你能用的最好的圈定方式就决定了你获得的信息有多精确,或者多具有想象力。二:圈定了高维信息到低维空间的表达能力,你指定的道路越准确,它表达得越好。
本文转自 AI生成未来 ,作者:亚东