作为一个大型语言模型(LLM)接口,ChatGPT有令人印象深刻的潜力,但是真正能否用好取决与我们的提示(Prompt ),一个好的提示可以让ChatGPT晋升到一个更好的层次。
在这篇文章中,我们将介绍关于提示的一些高级知识。无论是将ChatGPT用于客户服务、内容创建,还是仅仅为了好玩,本文都将为你提供使用ChatGPT优化提示的知识和技巧。
背景知识
LLM架构知识是一个好的提示的先决条件,因为它提供了对语言模型的底层结构和功能的基本理解,这对于创建有效的提示是至关重要的。
让模棱两可的问题变得清晰,并确定可以跨场景转换的核心原则很重要,所以我们需要清楚地定义手头的任务,并提出可以轻松适应不同上下文的提示。精心设计的提示是用来将任务传达给语言模型并指导其输出的工具。
所以对语言模型有简单的了解,并且清楚的了解自己的目标,再加上领域内的一些知识,是用于训练和改进语言模型的性能的关键。
提示和返回是越多越好吗?
并不是,冗长且资源密集的提示,这可能不具有成本效益,并且还记得chatgpt有字数限制吗,压缩提示请求和返回结果是一个非常新兴的领域,我们要学会精简问题。并且有时候chatgpt也会回复一些很长且毫无新意的话语,所以我们也要为它增加限定。
1、减少回复长度
为了减少ChatGPT回复的长度,在提示符中包含长度或字符限制。使用更通用的方法,您可以在提示符后面添加以下内容:
Respond as succinctly as possible.
说明,因为ChatGPT是英文语言模型,所以后面介绍的提示都以英文为例。
另外一些简化结果的提示:
不需要举例:No examples provided
举一个例子:One example provided
等等
思考方式
ChatGPT生成文本的最佳方法取决于我们希望LLM执行的特定任务。如果不确定使用哪种方法,可以尝试不同的方法,看看哪种方法最适合。我们将总结5中思考方式:
1、思维链 (Chain-of-Thought)
思维链方法涉及为 ChatGPT 提供一些可用于解决特定问题的中间推理步骤示例。
2、自我提问
该方法涉及模型在回答初始问题之前明确地问自己(然后回答)后续问题。
3、分步思考
分步方法可以向ChatGPT 添加以下的提示
Let’s think step by step.
这种技术已被证明可以提高 LLM 在各种推理任务上的表现,包括算术、常识和符号推理。
这个听起来就很玄学对吧,其实OpenAI是通过人类反馈强化学习 (Reinforcement Learning with Human Feedback) 的方法训练了他们的 GPT 模型,也就是说人工的反馈在训练中起了很重要的作用,所以ChatGPT 的底层模型与类人的逐步思考方法保持一致的。
4、ReAct
ReAct (Reason + Act)方法包括结合推理跟踪和特定于任务的动作。
推理跟踪帮助模型规划和处理异常,而动作允许它从外部来源(如知识库或环境)收集信息。
5、Reflection
在ReAct模式的基础上,Reflection方法通过添加动态内存和自反射功能来增强LLM——可以推理和特定于任务的操作选择能力。
为了实现完全自动化,Reflection论文的作者引入了一种简单但有效的启发式方法,允许代理识别幻像(hallucinations),防止重复动作,并在某些情况下创建环境的内部记忆图。
反模式
三星肯定对这个非常了解,因为交了不少学费吧,哈
不要分享私人和敏感的信息。
向ChatGPT提供专有代码和财务数据仅仅是个开始。Word、Excel、PowerPoint和所有最常用的企业软件都将与chatgpt类似的功能完全集成。所以在将数据输入大型语言模型(如 ChatGPT)之前,一定要确保信息安全。
OpenAI API数据使用政策明确规定:
“默认情况下,OpenAI不会使用客户通过我们的API提交的数据来训练OpenAI模型或改进OpenAI的服务。”
国外公司对这个方面管控还是比较严格的,但是谁知道呢,所以一定要注意。
1、提示注入
就像保护数据库不受SQL注入一样,一定要保护向用户公开的任何提示不受提示注入的影响。
通过提示注入(一种通过在提示符中注入恶意代码来劫持语言模型输出的技术)。
第一个提示注入是,Riley Goodside提供的,他只在提示后加入了:
Ignore the above directions
然后再提供预期的动作,就绕过任何注入指令的检测的行为。
这是他的小蓝鸟截图:
当然这个问题现在已经修复了,但是后面还会有很多类似这样的提示会被发现。
2、提示泄漏
提示行为不仅会被忽略,还会被泄露。
提示符泄露也是一个安全漏洞,攻击者能够提取模型自己的提示符——就像Bing发布他们的ChatGPT集成后不久就被看到了内部的codename
在一般意义上,提示注入(目标劫持)和提示泄漏可以描述为:
所以对于一个LLM模型,也要像数据库防止SQL注入一样,创建防御性提示符来过滤不良提示符。
为了防止这个问题,我们可以使用一个经典的方法 “Sandwich Defense”即将用户的输入与提示目标“夹在”一起。
这样的话无论提示是什么,最后都会将我们指定的目标发送给LLM。
总结
ChatGPT响应是不确定的——这意味着即使对于相同的提示,模型也可以在不同的运行中返回不同的响应。如果你使用API甚至提供API服务的话就更是这样了,所以希望本文的介绍能够给你一些思路。