稀有猿诉

十年磨一剑,历炼出锋芒,说话千百句,不如码二行。

优雅的训服大模型:深入浅出Prompt技巧

ChatGPT以降,彻底引爆了AI,大模型进入了公众视野,每个人都可以享受AI带来的乐趣。大语言模型(Large Language Model LLM)虽然可以达到「类人」的水平,但仍需要以「大模型角度」去思考和对话才能最大限度的利用大模型的威力。这便是Prompt Engineer需要做的事情。今天就让我们学习总结一些Prompt技巧,以能优雅的训服大模型。

说起来挺吓人的,但其实也没那么复杂,只要稍学习一下,厘清LLM的本质,就能掌握到Prompt的精髓,从而就能大大提高使用LLM的效率。

本质是提问的技巧

大模型第一次达到了「类人」水平,用户可以用自然语言与计算机进行交流了。那么为了达到事半功倍的效果,我们就要精进提问的技巧,这便是Prompt Engineering。如何做呢?要把大模型视为精通某一领域的专业顾问,要以与专业顾问(比如导游,咨询师)对话的角度来看待问题。

比如说马上五一假期了,想要去上海玩,你问大模型『五一假期去上海玩,推荐一些行程』,大模型肯定会给你一个中规中矩的万能日程。这不能怪大模型,如果你如此问一个导游,负责的导游会直接反问你一大堆细节问题,因为这是行程所必须的;或者也是随便推荐一些大家都知道的地方。但肯定 是没有参考价值的。

为了达到最好的「沟通」效果,避免「Garbage In, Garbage Out」,就需要:

  • 视为在与专业人士对话,也就是要拟定大模型的角色
  • 一次对话尽可能的专注于一个问题或者一个主题
  • 把问题描述清楚,需要的关键要素都列清楚,比如时间,地点人物,关键事件等等
  • 限定问题,也就是说要尽可能多的补充问题细节,限定问题需要的回答,比如说可以做什么,不可以做什么,需要什么是时间点
  • 恰当的分隔,要多多使用标点符号对提问进行分隔,这样更有利于大模型抓住重点

可以发现,这其实是沟通的技巧,抛开大模型,我们与正常的人沟通时,不也应该这样做吗?平时里的闲聊除外,正式的与人沟通时也应该使用这些技巧以达到最好的沟通效果。所以,最先需要掌握就是沟通技巧中的提问技巧。

继续我们上面的问题,使用上面的方法来优化提示:『五一假期,从南京出发,坐高铁,目的地上海,亲子3日游,不去迪士尼,不去动物园,安排详细行程』。这回得到的回答肯定有更大的参考价值。

及时补充上下文

大语言模型较以往的AI最大的进步在于超长的上下文记忆能力,这是它能达到「类人」水平的最主要的原因。那么在与大模型进行对话的时候,就要及时的补充上下文信息。一方面,你不可能一次性的把提问信息全都写全写对,那么一旦想到新的提示,就要及时的给到大模型;另外一方面,大模型有时候会胡编乱造,甚至胡言乱语(大模型都有一个叫做温度temperature的参数以控制这方面的行为),这并不是bug,而是语言创造力的一个体现。那么,一旦发现大模型跑偏了,就需要及时提供新的提示,补充上下文信息,对大模型进行纠正。

另外,就是如果感觉问题不太好理解,或者对输出有特殊的要求,还有一个补充上下文的办法就是给一个输出的示例,大模型是能够很好的捕获这一点的,并且这个对让大模型输出优质的回答非常有帮助。

不用担心溢出哈(就是输入字数太多,导致大模型理解不了),都4202年了,现在的大模型的上下文能力至少在4096个Token以上,对于大部分的常规问题来说足够了。

掌握常见的命令和特殊标记

大模型的输入是自然语言,但计算机毕竟是程序化的机器,那么就会有一些特殊的命令和标记以代表一些常用的功能。这个其实不是大模型所特有的,凡是接收字符串输入的地方,都会有一些特殊的命令和标记,如搜索引挚,如一些聊天应用。

特殊命令和特殊标记的作用在于简化输入,提升效率,特别是对于一些复杂的问题,比如像专业领域的问题,标准化的标记能大大的加强共识程度。这也跟大模型关系不大,就比如说数学和物理学上的符号,能达到一符号胜千言。

命令就是简洁,清晰和无歧义的动词:如描述,拟定,写出,规划等等。

而特殊标记则像方括号[],三个引号”“”,三个###等等。

理解专业领域知识

前面的几点都是一些通用的提示优化小技巧,适用于常规的通用的小问题。如果是专业领域的问题,光有以上的技巧明显是不够的。这时就需要领域知识了,对领域要有深刻的理解,并熟悉领域的专业术语,把抽象的,泛化的问题或者需求,用专业术语进行描述,甚至对领域进行建模,转化为详细的,具体的提示词。然后输入到大模型,由大模型进行求解或者实现。最为典型的两个领域就是代码生成和图像生成,这是两个专业性比较强的领域,对结果的要求也比较高,因此对提示词的要求也更高。

Code prompts

要想让大模型写出更好的代码,就必须尽可能详细的给出代码要素,例如:编程语言必须指明,输出输出的参数或者格式必须指明,把限制说清楚,比如不能用什么,比如时间空间复杂度的限制,最重要的就是把需求写清楚,也就是要实现什么功能的代码。

扩展阅读:

图像生成

对于像Stable Diffusion的AIGC,更是需要一些特定领域的专业知识,才能写出比较好的提示词,达到预期的效果。比如提示词中要包含艺术风格,尺寸,比例,色彩,线条等等,而且要是关键词式的。所以,已经有一些工具,直接给出各种领域参数的可选择的具体值,以代替文本输入框,只需要在众多的参数的值中选择后,即可生成图片,确实方便很多。

扩展阅读:

优质的资源

Prompting是有固定的套路可循的,就好比写代码,不用重复造轮子,已经有很多优质的prompt模板了。学会坐在现成的轮子上面,不但可以提高效率事半功倍,且能走的更稳更远。

GitHub是个座金矿,每当需要什么资源的时候就去搜索「awesome xxx」就能得到非常优质的相关资源合集,这比自己一个一个的去找要方便太多了。

Prompt Engineer工具

提示工程Prompt Engineering已经成为了一个新的专业,有专职的职位叫做提示工程师Prompt Engineer,它们需要对领域有深刻理解,把抽象的,泛化的需求,描述为具体的提示词以让大模型去求解或者实现。除了提示工程师外,也有专门的提示工具,用以生成提示词,或者帮助做提示优化,当不知道如何提示时,或者想优化提示词时,就可以使用这些工具来帮忙:

参考资料

Comments