« 主页

探云月刊 2023-05 当提词工程师的体会

发布于

版权声明:眯眼探云原创,可随意转载,请保留该版权声明及链接:https://tyun.fun/post/83.tanyun-monthly-2023-05/

去年的新冠第一波有幸没阳,这次新冠第二波,老婆孩子都阳过了我也还没阳。本以为自己不会再阳了,结果在第二波尾巴上还是没躲过。整体症状没有太猛烈,也就是发烧、头痛,难受了好几天。

阳了,就得停止锻炼。前不久做近视手术,也停止了锻炼。再往前是得了甲流。再往前是跑步跑伤了小腿前侧(夹胫炎)……

坚持锻炼,真不是一件容易的事。但好在现在,锻炼已经成为了我生活的一部分。即使频繁地中断,我也能在康复之后毫不费力地重新开始运动。

当提词工程师的体会

最近的主要工作内容是将大语言模型集成到我们现有的功能中,于是有幸当了一回提词工程师。

我们现在使用的大语言模型(主要是 OpenAI 的 ChatGPT)是预训练模型。也就是预先训练完成后投入使用,使用过程中模型是不会变化的。但在商业上,各家的场景会有所不同,怎么用同一个模型来解决不同的问题呢?主要的方式就是提词工程(Prompt Engineering)。

打个比方,预训练的大语言模型就好像是一个能力比较强,什么事情都会干的人来到了公司。这个人非常服从安排,但不知道该干吗。所以你得详细的告诉他干什么,怎么干。然后他就可以根据你的说明,完成你安排的任务。给他说明任务,就是提词工程。

比如你可以让他当一个翻译,将你说的所有内容翻译成英文。那么 GPT 就可以按照你的指示,翻译你讲的内容。你还可以给复杂一点的指示,把所有语言翻译为英文,但如果遇到了中文,就翻译为英文,它也能完成的很好。翻译是 GPT 最擅长的事情之一,GPT4 的翻译水准已经超过了当前的所有翻译软件。

要把 GPT 和公司的业务结合,事情就会变得困难起来。因为实际工作中的需求涉及到许多规则和流程,而 GPT 能解决的问题其实是非常有限的,所以只能让它参与到其中的某些环节,并且通过提词工程,让它把自己那部分工作完成好。

那么 GPT 擅长什么呢?GPT 是大语言模型,主要擅长的还是和自然语言相关的事儿,比如翻译、总结等等。编程语言的事儿它也很擅长。但很显然,它通常不会擅长公司里某个特定的业务,而且你也不会希望他擅长你们公司的业务,不然你们公司的业务可能就被它直接替代了。

GPT 有许多限制,比如他没有2021年9月以后的知识,并且他当前并没有真正的“记忆”能力,当前我们体会到的多轮聊天,都是将聊天内容完整的提供给 GPT,从而模拟出了多轮聊天的感觉。另外一个关键限制是,GPT 能够接受的输入和提供的输出是有限的,这也就意味着,如果是在它的知识体系以外,我们只能提供非常有限的上下文信息,也就无法让它完成非常复杂的工作。

也就是说,当你需要让 GPT 参与到你的业务中时,它能够参与的部分其实是非常有限的。所以在将 GPT 集成到传统应用中时,除了直接文字处理类的工作,其他场景下,主要还是利用 GPT 能够理解自然语言的能力:让 GPT 理解用户的意图,然后转换为程序可以处理的输入。这点改变虽小,但实现了以前的软件很难实现的一个目标:用户通过自然语言来操作程序。

通过提词工程将 GPT 集成到应用中,整体的处理流程大概分几步:

  1. 首先是让 GPT 判断用户的意图(从预设好的意图中进行挑选)。
  2. 然后根据对应的意图,再让 GPT 将用户的描述转化为传统程序可以处理的数据。
  3. 在传统程序处理完成以后,可以直接将结果呈现给用户,也可以让 GPT 再润色一下,描述给用户。

而其中关键的部分,就是通过提词工程,让 GPT 配合完成相关的工作。而这并不容易。提词工程最难的地方在于,大语言模型是个黑盒,我们只知道他大概工作的原理,但并不知道具体的处理规则。现在的一些提词工程教程,也只是提供了一些大致的规律,而不是真正的规则。所以真要搞 Prompt 的时候,需要大量的测试工作,但一开始的时候,我甚至连测试数据应该长什么样也不知道。

对付黑盒的办法,就是多试。尝试不同的 Prompt 结构,不同的描述,不同的参数,不同的关键字。通过反复的尝试,并且结合一些开源的示例,我逐渐找到了一些感觉,开始能够比较有效指挥 GPT 了。大部分感觉可能是属于无法言传的默会知识,但也有部分是可以总结成规律的,比如:

  1. 充分利用 GPT 自有的知识。GPT 拥有2021年9月份之前的知识,如果你要处理的问题 GPT 都知道,那么很简单的描述,它也能够做的比较好。
  2. 在 GPT 自有的知识以外,你能提供的信息量是非常有限的,这种情况下,尽可能把任务拆的更小更简单,然后再让 GPT 处理。
  3. 尝试理解 GPT 的思路。在希望 GPT 处理问题的时候,多问问 GPT 的看法。当你理解 GPT 的思考思路的时候,你也能够更好的指挥它完成工作。
  4. 让 Prompt 易于测试,至少要能够很方便的完成几十个 Case 的测试。(除了测试,也需要做一些小工具来帮助快速完成一些特定的小任务。)
  5. 使用英文描述 Prompt。虽然 GPT 理解中文和英文的能力想差无几,但要准确的描述复杂的规则,英文更好用。而且同样含义的中文和英文,英文所需的 token 数会更少,也就是更便宜。
  6. 如果提供的是聊天的形式,一定要注意处理好聊天历史记录,用户通常不容易在一句话中表达出完整的需求,需要进行多次的补充。合理的使用聊天记录,才能让 GPT 更加准确的判断用户的意图。

刚开始开发 Prompt 时,面对太多的为知会让人感觉非常难受,当反复尝试得不到想要结果的时候,也十分令人沮丧。但随着时间的推移,我开始逐渐掌握了一些规律,并且找到了一些窍门儿,并开发出了一些小工具来提升自己的 Prompt 设计效率。整个过程就开始变的顺利起来,虽然我依然不能解决所有的问题,但我逐渐感知到整个事情的边界在哪里。

当最终通过 Prompt 成功指挥 GPT 完成任务时,我真的是开心极啦!