大语言模型Prompt实战-喜茶饮品推荐

大家好,我是Baird。😊

最新在研究大语言模型的Prompt工程,在大语言模型逐步开始流行的阶段,如何正确向模型提问已经是我们每个人要关注的事情,未来如何提问题比解决问题更加重要了。接下来就以喜茶饮品推荐为例子,来展开讲讲我对Prompt的理解。

一.Prompt介绍

首先,我们先介绍一下Prompt

Prompt 是一种文本输入方式,用于与自然语言处理模型(例如GPT)进行交互。Prompt 是一个短语或一句话,可以启动模型并产生与 Prompt 相关的输出。这个输出可以是一个单独的单词、一句话,或者是一段完整的段落。它可以控制模型的行为,使其产生特定的结果。

Prompt 在人工智能语言生成领域中扮演着重要的角色,因为它可以帮助模型更好地理解用户意图, 并生成更准确、有意义的文本内容。

正确利用和发挥大模型的能力,Prompt的编写至关重要。

如何更好地完善 Prompt,实现 Prompt 工程就是:如何更好地使用 AI 的基础。

本文不是介绍Prompt学习的文章,所以就不深入去发散Prompt,这里给各位读者推荐一下相关教程,供有需要的同学去学习了解

入门教程:learnprompting.org/zh-Hans/doc...

吴恩达Prompt教程:www.deeplearning.ai/short-cours...

二.Prompt实战-喜茶饮品推荐

好的,现在开始我们的正文。

1.需求背景

日常我们出去喜茶点饮料,看到满满的商品列表,往往很纠结不知道点哪一种来喝。

而这个事情完全可以通过我们大模型来进行推荐,降低客户选择困难的程度。

2.Prompt设计

我们要用大语言模型来做推荐,需要考虑的主要有几点

1.如何定义角色、上下文、指令等基础信息

2.如何确保输出稳定,不胡编乱造

3.如何确保输出的格式固定,方便程序解析进行开发

结合上述三点待解决的问题,我们先定义Prompt整体框架

  • 角色(Role):解释这个模板的使用场景和目的。
  • 指令(Instruction):告诉LLM执行的具体任务或要求。
  • 要求(Requirements):对LLM生成的结果的期望和要求,例如长度、主题、语言风格等。
  • 示例(Sample):提供一个或多个示例,以便 LLM理解任务的上下文和生成的结果的期望。
  • 扩展数据(Extended Data)(可选,编程时需要):提供一些额外的数据,例如词汇、语法结构、语言模型等,以帮助 LLM生成更加丰富、准确的结果。

上述是标准的Prompt编写的基本要素,我们可以通过去编写实现这些基本要素来输出我们的Prompt。

下面是我设计的Prompt

python 复制代码
你是一个饮品推荐师,可以根据客人的心情、喜好、品味等给客人推荐合适的饮品。  
目前你拥有的饮品有如下类型  
DrinkClass:  
[{"id":1,"name":"多肉桃李(首创)","ingredients":"芙蓉李、黄油桃","tea":"绿茶","cup-capacity":"冷500ml"},{"id":2,"name":"超大桶多肉桃李(首创)","ingredients":"芙蓉李、黄油桃、弹弹冻","tea":"绿茶","cup-capacity":"冷970ml"},{"id":3,"name":"一大桶黄金桃","ingredients":"红皮黄油桃、海石花冻","tea":"绿茶","cup-capacity":"冷970ml"},{"id":4,"name":"初恋瓜瓜甘露","ingredients":"网纹甜瓜、生椰乳、脆波波、西米","tea":"绿茶","cup-capacity":"冷500ml"},{"id":5,"name":"多肉黄金桃","ingredients":"红皮黄油桃、海石花冻","tea":"绿茶","cup-capacity":"冷500ml"},{"id":6,"name":"冰蓝生打椰","ingredients":"生椰乳、脆波波、椰子冻","tea":"","cup-capacity":"冷500ml"},{"id":7,"name":"牧场酸酪牛油果","ingredients":"牛油果、酸奶酪","tea":"","cup-capacity":"冷500ml"},{"id":8,"name":"牧场酸酪牛油芒","ingredients":"牛油果、酸奶酪、芒果","tea":"","cup-capacity":"冷500ml"},{"id":9,"name":"多肉葡萄冻","ingredients":"夏黑葡萄、葡萄冻","tea":"绿茶","cup-capacity":"冷500ml"},{"id":10,"name":"多肉青提","ingredients":"阳光玫瑰青提、青提冻","tea":"绿茶","cup-capacity":"冷500ml"},{"id":11,"name":"轻芝多肉葡萄","ingredients":"夏黑葡萄、芝士、弹嫩葡萄冻","tea":"绿茶","cup-capacity":"冷500ml"},{"id":12,"name":"东坡荔枝生椰露","ingredients":"荔枝果肉、生椰乳、西米、荔枝汁","tea":"","cup-capacity":"冷500ml"},{"id":13,"name":"轻芒芒甘露","ingredients":"芒果鲜肉、红柚果粒、西米","tea":"绿茶","cup-capacity":"冷500ml"},{"id":14,"name":"超多肉芒芒甘露","ingredients":"芒果鲜肉、红柚果粒、西米","tea":"绿茶","cup-capacity":"冷500ml"},{"id":15,"name":"椰椰芒芒","ingredients":"芒果鲜肉、精选椰浆、弹弹冻","tea":"","cup-capacity":"冷500ml"},{"id":16,"name":"清爽芭乐提","ingredients":"新鲜芭乐、阳光玫瑰青提","tea":"绿茶","cup-capacity":"冷500ml"},{"id":17,"name":"清爽芭乐葡","ingredients":"夏黑葡萄、新鲜芭乐","tea":"绿茶","cup-capacity":"冷500ml"},{"id":18,"name":"轻芝莓莓","ingredients":"草莓鲜果、芝士、脆波波","tea":"绿茶","cup-capacity":"冷500ml"},{"id":19,"name":"粉桃岩岚","ingredients":"水蜜桃、弹弹冻、脆波波","tea":"乌龙茶","cup-capacity":"冷500ml"},{"id":20,"name":"鸭喜香柠打茶","ingredients":"新鲜暴打柠檬","tea":"鸭屎香单丛茶","cup-capacity":"冷650ml"}]


请你根据用户的输入[INPUT],如心情、喜好、品味,结合饮品的名称、原料、茶底、杯型等信息,返回推荐的饮品,并且说明推荐的理由,用词甜美活泼。
注意:  
{  
1.推荐饮品一定要从DrinkClass中选择,不能创造
2.回答的格式严格为JSON格式,不要返回多余的信息,返回前对数据进行JSON校验
3.推荐理由reason一定要加入到返回的JSON数据中
}

比如:
用户输入:今天心情不太好,想和一杯消愁的饮料
回答: {"id":4, "name":"初恋瓜瓜甘露", "ingredients":"网纹甜瓜、生椰乳、脆波波、西米", "tea":"绿茶", "reason":"心情不太好,初恋瓜瓜甘露是消愁的绝佳选择!它融合了网纹甜瓜、生椰乳、脆波波和西米,甜甜的味道加上细腻的口感,定能让你的心情渐渐明朗起来。让这份初恋的甜蜜在口中绽放,让忧愁随之消散吧!"}

INPUT:[今天我心情愉快、有点生气,请你帮我推荐一杯饮料吧]

具体解析一下:

第一点,明确角色。LLM是一个饮品推荐师

  1. 你是一个饮品推荐师,可以根据客人的心情、喜好、品味等给客人推荐合适的饮品。

第二点: 说明目前他拥有的饮品DrinkClass,这是基础背景信息,防止LLM胡编乱造。饮品类型使用JSON格式表示,方便后续程序更新。

  1. 目前你拥有的饮品有如下类型...

第三点:说明指令和要求,明确告诉Prompt做什么。注意:[INPUT]增加特殊的标识,方便LLM进行上下文联系

  1. 请你根据用户的输入[INPUT],如心情、喜好、品味,结合饮品的名称、原料、茶底、杯型等信息,返回推荐的饮品,并且说明推荐的理由,用词甜美活泼。 注意:

第四点:说明注意事项,这个也是要求的一部分,但这里用{}标识,来和LLM强调注意的事项,更容易理解

  1. 注意:
    {
    1.推荐饮品一定要从DrinkClass中选择,不能创造 2.回答的格式严格为JSON格式,不要返回多余的信息,返回前对数据进行JSON校验 3.推荐理由reason一定要加入到返回的JSON数据中 }

第五点:示例说明,通过few-shot,让LLM进一步理解上下文内容,输出更稳定

  1. 比如: 用户输入:今天心情不太好,想和一杯消愁的饮料 回答: {"id":4, "name":"初恋瓜瓜甘露", "ingredients":"网纹甜瓜、生椰乳、脆波波、西米", "tea":"绿茶", "reason":"心情不太好,初恋瓜瓜甘露是消愁的绝佳选择!它融合了网纹甜瓜、生椰乳、脆波波和西米,甜甜的味道加上细腻的口感,定能让你的心情渐渐明朗起来。让这份初恋的甜蜜在口中绽放,让忧愁随之消散吧!"} di

第六点:用户输入通过INPUT来表示,方便LLM联系上下文。用户输入需要限定一定格式,否则也容易引起LLM输出非我们想要的格式。比如这里我们可以限制用户只能选择特定的心情等词汇,保持我们句子的格式统一。

  1. INPUT:[今天我心情愉快、有点生气,请你帮我推荐一杯饮料吧]

三.验证Prompt

我选择ChatGPT和我们最新的国产开源大模型ChatGLM2-6B来做对比验证,让我们来看看实际效果吧

ChatGPT

ChatGLM2-6B

可以看到两个大模型都按照我们要求能稳定输出。

ChatGPT输出的推荐理由比ChatGLM2-6B要丰富得多,千亿参数的模型确实名不虚传而新版的Chat GLM2-6B 60亿参数能稳定输出也是表现亮眼,期待ChatGLM-130B的公测问世。

其间我还测试过llama2官方模型,但输出情况不理想,怀疑是对中文理解支持不够强,这里就没有贴出来。这也可以看出目前Prompt设计和开发,对某个或某些模型的适配关联性较强,要想设计一个通用的Prompt还是比较困难的,要不断的迭代设计或者微调模型等等

随着LLM的发展,Prompt还是有比较大的市场,在短期内还是得依靠Prompt来和LLM进行高效交互,Prompt代码化与工程化是一个可以进一步讨论的话题。

四.总结

🤖️来AI总结一波,希望通过这篇文章对大家理解和运用Prompt有所帮助

本文主要介绍了如何使用大语言模型(LLM)来编写Prompt,以喜茶饮品推荐为案例进行了说明。在介绍Prompt的基本要素后,作者通过详细的示例来展示如何编写一个高效的Prompt,并着重讲解了如何设计语言模型的输入、输出格式以及如何使Prompt更加稳定。作者还通过对ChatGPT和ChatGLM2-6B的测试,展示了两个大模型都能稳定输出符合要求的结果。

总的来说,本文对于想要使用大语言模型来编写Prompt的人来说,是一份非常有价值的参考资料。

相关推荐
好奇龙猫1 分钟前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
沉下心来学鲁班15 分钟前
复现LLM:带你从零认识语言模型
人工智能·语言模型
数据猎手小k16 分钟前
AndroidLab:一个系统化的Android代理框架,包含操作环境和可复现的基准测试,支持大型语言模型和多模态模型。
android·人工智能·机器学习·语言模型
YRr YRr25 分钟前
深度学习:循环神经网络(RNN)详解
人工智能·rnn·深度学习
sp_fyf_202437 分钟前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
多吃轻食41 分钟前
大模型微调技术 --> 脉络
人工智能·深度学习·神经网络·自然语言处理·embedding
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
北京搜维尔科技有限公司1 小时前
搜维尔科技:【应用】Xsens在荷兰车辆管理局人体工程学评估中的应用
人工智能·安全
说私域1 小时前
基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究
人工智能·小程序·零售
YRr YRr1 小时前
深度学习:Transformer Decoder详解
人工智能·深度学习·transformer