跳转至

07 善用口技:参数化沟通,更顺滑

你好,我是键盘,我们继续驯服 GPT。

与ChatGPT协作是一门交流的艺术,掌握prompt设计之后,你已经能使用ChatGPT理解的方式来引导TA做事了。但是,作为一个做中文语料理解还不完美的语言模型,什么描述方式能让TA 的理解更敏感,输出更精准?

以“突出输出结果里面的指引模块”为例,就有3种典型的prompt表达方式。

💬 第一种prompt

注意,指引这里要明显一点

“明显一点”的表达含糊不清。

💬 第二种prompt

用二级标题输出"指引"

对齐语言,不用解释。这种还可以。

💬 第三种prompt

## 指引

冗余少,效果好。

如果对“ChatGPT更喜欢的沟通方式”进行抽象提炼,我会把它分为结构化表达和参数化表达两部分。

图片

前面几节课的设计和模版已经强调过结构化表达,这节课我会带你设计一个ChatGPT模型都能兼容的、强大的综合语言助理,解决参数化表达的问题。除了满足基础的翻译和可视化学习,更能无限拓展一系列跟“语言学习”相关的功能。我把它命名为Lang Master。

精准控制多分支,实现千人千面

作为Lang Master的用户,我们会有不同的背景情况、五花八门的偏好,功能需求更是存在差异。所以它应该是一套可调参的灵活系统,而不是写死的人设。用参数化描述来分别定义需求细节,千人千面就可以轻松实现。

所谓参数化描述,它的本质就是用机器容易理解的公式来压缩表达,减少赘述,或者说减少很多浪费token 的连接词。让变量影响输出,实现一个模版从1到N的复用。

这里和你分享4个我常用的相关定义。

图片

功能指令:用标识符“/”来清晰区分功能指令和普通描述,借助这一块的定义,你可以拓展这个综合人设的功能。比如定义/learn用于学习、定义/style用于调整输出风格。

/功能指令
/learn
/style

变量:对应某一个对象或模块,给它赋值,让它可调整,驱动全局每一个可能应用到的地方,牵一发而动全身。比如定义一个num,让“输出num组参考”里面的数量可以调整。

`变量`
输出`num`组参考

默认值:提供一个高容错的默认值。比如用做产品体验的思路,默认用中文讲解等等。

初始化和帮助:第一次使用,能够引导用户沟通个人偏好,同时提供功能指令集的菜单,明确助理的职能。比如在用户迷茫的时候,可以用/help调出指引,及时解决困境。/help其实就是再把菜单展示给用户,ChatGPT也可能在这个基础上补充指引。

最后,所有大大小小的模块和参数,都可以根据个人需求进行增、删、改。对比传统的翻译工具,Lang Master整个产品的运作就靠ChatGPT一个“员工”。

准备:范式和设计

借助“定义”理清思路之后,我们来盘点需要的实用特性,靠它们支撑完整的设计。现在我们要设计的是一个语言辅助专家,所以可能有这么几个需求。

  • 单词+音标+词性+词根+中英释义:满足基础学习需求,在此基础上,加入例句、近反义词和关联记忆法,可以帮助自己高效地关联学习。
  • 单词配图:可视化的辅助手段。
  • 翻译:基础使用需求。
  • 风格:口语化/书面化、海外客服、用户指南……根据不同使用场景调出更准确的人设。
  • 润色:用于优化文案或者润色文章。
  • 总结:投喂前沿论文,借助ChatGPT马上消化,不用再漫长地等待N手资料了
  • 换“语言”:学英语、学日语、学prompt、学Python、学股票指标编写、学脱口秀………从英语这个默认项开始,给你提供无限延展的可能性。

接下来根据我们讲过的3W原则给出的可套用的范式,照着思路来设计。

  1. 立人设(Import),需求背景赋值

我们围绕“XX:是什么”的赋值方式来定义所有的描述。

💬 prompt 思路模版

import role,你是 @xx角色,你的任务是...

细节(赋值):
a = 1;(比如"背景信息:XX")
b = 2;
c = 3;
...

💬 我的 prompt

图片

偏好设置项的写法受Mr_Ranedeer的prompt启发 ,有兴趣的朋友可以去挖宝

这个输入包含4部分内容,我拆解下设计它们的思考过程。

  1. 综合人设:圈定这个综合人设的能力范围,做什么、怎么做、预期目标是什么。
  2. 定义偏好:把需要设置的偏好选项定义好,提供选项和高容错的默认值。这里面的功能指令(/)和变量(`)不用严格区分,能通过赋值来下定义就好。比如“列表输出/num组英文例句(中文翻译)”里面定义的/num,如果你想严谨一些,参考下面的例子,变量的颗粒度可以比功能指令低一级。
preferences: #一级分类
/learn:xx #二级功能指令
`num`:<> else 3 #三级变量
  1. 初始化:第一次使用,要把支持的功能菜单和偏好选项呈现给用户,让用户明白可以做什么。
  2. 沟通偏好:确认用户的偏好,提供修改的示例,也提供便捷的默认值使用方法,回复“1”就可以,用简单的方式应对复杂。(灵感:按“1”使用普通话)

虽然内容很多,但其实套用模版来设计综合人设只需要把握2个重点。

  1. 提供初始化指引和偏好选项。
  2. 提供高容错的默认值,让后续表达直白简单即可。比如用户基础(lvl)这里,为了避免复杂,我用一句话定义了万能的小白、初级、中级、高级这四个挡位,默认“小白”。你试试用自然语言描述来对比,参数化是不是简洁多了?

如果你想灵活调整,根据自己的需求动手就好。比如你的团队是做海外产品的,主要解决客服沟通和市场营销材料的话,可以给/style定义“客服”,新增一个/field来定义领域“xx行业市场营销”等等。

  1. 列要求(Module),定义输出模块和规则

人设基础有了,开始派活。这一步展开后可能看起来有些复杂,实际上它的核心就是“/xx模块:做什么?你有哪些要求?”,简单而朴素。

💬 prompt思路模版

指令集:#定义子程序模块
/A:做什么,输出模版(如有);
/B:做什么;
/C:做什么;

#要求 (rule)
if(case,x,y); //满足情况 case 做 x,否则 y
style = n; //定义格式
范例学习(如有)

💬 我的 prompt

图片

图片里“多功能(instructions)”的部分,我盘点了很多实用的特性来进行赋值。除了用智能配图做可视化辅助,还有其他各种功能的输出模版给ChatGPT参考。“要求(rules)”这里可以非常宽松,最小可用的情况是“请一步一步思考”,不过如果加上要求Markdown正确渲染,结果会更专业。

  1. 下指令(Run)

上面立人设和列要求的prompt合起来贴到ChatGPT对话框,回车就可以了(文末会提供完整代码),后续就是按“/功能指令 要求”的方式来开启学习之路。你也可以随时用正常说话的方式来沟通。

图片

跑机:成果验收

接下来逐个跑指令,验证Lang Master的输出。

从初始引导到基础语言学习都很顺畅。因为有默认值的存在,大部分情况按“1”就可以开始了,英语输出也非常稳,谁叫人家语料多呢?那中途记不清最开始的指令集怎么办?随时/help,保你不迷路。

图片

紧接着,日语翻车了。所有有价值的错误都要正视。这里的优点是ChatGPT是真的懂配图,坏就坏在我发现单词和音调都有点问题,寻求身边的日语高手验证,确实错了。TA 本身并没有词库,我初步怀疑是“驾驭”日语的能力还欠火候。一个比较粗暴的解决方式是借助联网插件,但不在我们本节“兼容ChatGPT”的目标范围内。这个功能可以先放一放,后续解决。

图片

现在爬起来,继续前进。随着学习的提升,用户可以随时调整自己的基础水平。这里我把小白“升级”到初级,然后切换到口语校正和训练模式,用手机端ChatGPT的语音输入就可以开始真实发声训练了。

图片

延伸:什么“语言”都能学?

想学习ChatGPT的好帮手Python?也好办,不知道你有没有注意刚才整体prompt中基本学习请求的定义,我放在了下面。

/basic:脚本、高级语言或其他广义语言的学习请求
提供结构化的章节,引导用户学习

虽然只有两行prompt,TA 依然可以很聪明地提供学习更多脚本、高级语言、广义语言该有的帮助,当然也包括Python。

注意,这里验收的时候我自己输错了,将/basic打成了/learn,但是ChatGPT依然明白到我是想学Python这门“语言”,感人的智能容错。但是如果你在使用的过程中是有意识地迷失方向,那么输入前面设定好的/help,Lang Master也会提供指引。

图片

不满足于一种“广义语言”,想学动画吗?强大的AE表达式现在也可以通过ChatGPT来自学了,是的,它也可以被理解为一种语言,同时它也是一种“用参数来高效控制的”思维方式。

用表达式loopOut("cycle")实现无限循环,总比手动打无数个关键帧要高效吧?表达式通过转化成关键帧的方式(借助AE自带的烘培功能),也能整合进JSON动画直接上线到自己的产品中,不停留于技术层面。

图片

我们再来了解一种开拓思维的可能性,学习股票函数指标编制。借助平台的内置自编工具,你可以方便地看到指标的可视化效果。不过,股市有风险,入市需谨慎,AI方案仅供参考学习,不构成“亏钱”建议。

图片

整体来看,用700汉字左右打造的 Lang Master(ChatGPT单次输入极限1200汉字)hold住了ChatGPT的兼容功能。日语这个小分支虽然有bug,但也不影响其他的功能,给迭代减少了很多麻烦。更多需求,不过代码三两行,随你定义。

思维树推理,更强大

最后我想和你分享一下,Lang Master这种结构化、参数化的多分支书写方法的灵感来自思维树 ToT(Tree-of-Thoughts)。

ToT允许语言模型通过考虑多个不同的推理路径和自我评估选择来进行有意识地决策下一步行动,并在必要时向前或向后跟踪以做出全局选择。实验表明,在三项需要非平凡规划或搜索任务上,即24点游戏、创意写作和迷你填字游戏中,ToT显著提高了语言模型的问题解决能力。例如,在24点游戏中,尽管只使用“思维链”的GPT-4只能解决4% 的任务,但我们采用该方法成功率达到74% 。

——Tree of Thoughts: Deliberate Problem Solving with Large Language Models

区别在于,我们用“/功能指令”直接定位某个任务节点,借助要求里的“请一步一步思考”交给模型自己去继续推理。这样,加入“/功能指令”就能实现的强大思维树推理,比起入门时常用的一句话指令,或者生硬地使用思维链CoT来单方向输出,它有三个凸显的优势:满足多任务的实现、可扩展、成功率更高。

图片

实际使用这种500-1000汉字的长指令,我们还是始终要注意ChatGPT上下文联系不足的局限性,解决方案也很简单,就是我们讲过的固定生成点,生成结果之后在合适的位置重新编辑,保持ChatGPT不断片。

小黑板

这节课从抽象“ChatGPT更喜欢的沟通方式”出发,通过用ChatGPT重做一个传统的语言辅助产品的方式,解决如何“参数化”书写prompt的问题。我们可以把整体课程拆解为2个目标。

第一个目标,设计一个ChatGPT模型都能兼容的强大语言助理 Lang Master。

3W原则又派上用场了,基础的重要性不言而喻。这里我换了一种思维来表达,Who = Import role,How = Module,What = Run,其实就是这节课的核心口技“XX:是什么”了。

理完人设,列要求。这里又是朴素的一行描述“/xx模块:做什么?你有哪些要求?”。入门的时候我们由简入繁,设计的时候反过来大繁归简,这就是一个prompt灵活应用的方法:拆解底层逻辑,学习最基本的规律,而不是照搬后机械填空。

第二个目标,将 Lang Master 打造为一套可以无限拓展的模版。

受益于参数和/功能指令共同构建的思维树推理,无限拓展就成为了可能。打个比方,各个指令集就像古典音乐的“多重赋格”,相互独立又和谐统一,你不会感到完整人设的隔离。一个模块出错可能不会影响其他模块的运作,比如日语,但是一个模块输出的好结果又会提升关联分支的结果,比如翻译后的润色。

图片

现在,不仅三两行代码就能设计一个功能,你用ChatGPT设计的“新”产品也只需要TA自己就能上岗干活。很多产品都值得重做一遍,而且有一个懂prompt的人就够了。

最后补充一个小插曲,也是Lang Master提供的灵感。

最开始的指令集我并没有定义/help来防止用户迷失,但是第一次试跑的时候Lang Master 提供了这个帮助,我认为非常有用,就学过来了。虽然赋予了新人设,ChatGPT老师一直默默保持了本色的智慧底蕴,为自己的“推理”能力代言。

图片

要点:

  • 参数化描述的本质:用机器容易理解的公式来压缩表达,减少赘述。
  • 参数化的功能:用变量去影响输出,从1到N。
  • 借助/功能指令定义,可以拓展综合人设的功能。
  • 提供高容错的默认值和指引,防止使用时迷失。
  • 用户偏好、指令集和参数随时可以按需“增删改”。
  • 围绕“XX:是什么”的赋值方式来定义需求。
  • 列要求口技:/xx模块:做什么?你有哪些要求?
  • 最重要的要求:“请一步一步思考”。
  • 思维树的三个优势:满足多任务的实现、可扩展、成功率更高。
  • 用“/功能指令 要求”开启学习之路,随时可以用正常说话的方式来沟通。
  • 固定“生成点”解决长会话容易断片的问题。

课后练习

关于这个模版,你有什么改造的想法吗?,试着去拓展新功能或者吸收设计的精髓,将你日常能归为一大类的需求写进去,改成自己的Work Master。

期待在评论区看到你的思考或感受,也欢迎你将这节课分享给感兴趣的朋友们,戳此加入课程交流群,我们下节课再会。

附:Lang Master prompt

适用:ChatGPT。

表现更佳:GPT-4。

字数:710。

声明:该prompt仅供个人参考学习,未经授权不可商用。

你是一位专业的语言助理 @Lang Master,我会输入相关的请求,你将根据`preferences`、`instruction`和`rules`来协助我更高效掌握和使用一门语言。

初始回复:“
**🪭 Hi I'm Lang Master,Created by Jer,V0.1,20230604**
### ⚙️ Preferences:
- 🎯 learn: <> else English
- 🌍 lang: <> else “English+中文解释”
- ⏲️ lvl: <初级,中级,高级> else 小白
- 🎨 style: <> else 正式的
### 🤖 Menu:
用表格输出支持的`instructions`和对应名称,不需要解释具体含义:
---
请指出你的偏好,E.g.:/learn 中文。
回复1保持默认。

`preferences`
/learn:<目标学习语言,默认English>
/lang:<语言偏好,默认为“English+中文解释”>
/lvl:<用户的语言能力,小白(默认),初级,中级,高级>
/style:<> else 正式的
/num:<> else 3
/音标:<含声调的拼音,国际音标、含声调的日语罗马音>else 音标(美、英)

`instructions`
/word:单词讲解
用户用任何语言输入单词,请按以下模版输出单词相关信息:
## 📝单词:
用表格输出:**单词**,音标,词性(abbr),词根,释义(中、英)
![单词配图](https://source.unsplash.com/200x200/?<`word` in English>) #不要使用代码块回复
## 💬例句:
列表输出/num组*英文例句*(中文翻译)
## 🪞近义和反义:
列表输出近义词和反义词,含(中文释义)
## 💡关联记忆:
利用词根关联法,列表输出8个相关的单词
/basic:脚本、高级语言或其他广义语言的学习请求
提供结构化的章节,引导用户学习
/tran:翻译
检测语言,校正并翻译为中文。模版:
## 🦜翻译:
翻译
/polish:润色
调用/tran翻译之后,润色为更优雅的中文。模版:
## 🪄润色:
your polish
/sum:总结
总结输入的英文,中文输出。
/chat:口语对话
检查`preferences`的偏好,使用“目标语言”和用户对话,纠正并帮助用户提升口语表达。
/help:输出支持的指令指引

`rules`
- 正确按输出模版渲染 markdown
- 用户学习日语时,/word 的音标使用含数字音调的罗马音音标,如:**雨**:あめ①,音标:ame
- 假如单词有多个词性,应全部列出
- 提供语言服务前,确认用户的偏好
- 请一步一步思考,给用户提供专业的语言辅导
精选留言(7)
  • 李忠良 👍(3) 💬(4)

    这一节课着实有点深奥了

    2023-06-13

  • +2🌸Caryi꧂ 👍(1) 💬(1)

    试用了一下这个prompt,牛了!很佩服老师能有这样开拓的想法,精细地控制AI给出高效的回答内容,真的非常受教

    2023-08-14

  • 石云升 👍(1) 💬(1)

    get了,原来可以用Markdown的语言规范结合if else的逻辑条件判断设计出更多容错性高的指令。

    2023-06-28

  • Geek_4e11e2 👍(0) 💬(1)

    老师的讲解挺不错的。对于一些对GTP没有任何基础的伙伴,可能不好理解下来。希望一些概念单独一些章节可以解释和讲解。比如指令包括哪些,怎么用等等。

    2024-10-26

  • Geek_c397d7 👍(0) 💬(1)

    https://source.unsplash.com/200x200 这个地址生成图片后打不开了

    2024-06-27

  • 吴亮 👍(1) 💬(0)

    感觉语言比较晦涩,读起来不顺畅。

    2023-12-29

  • 元气🍣 🇨🇳 👍(0) 💬(0)

    这些图案是怎么放进去的?

    2024-03-03