大语言模型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的人来说,是一份非常有价值的参考资料。

相关推荐
淮雵的Blog5 分钟前
langGraph通俗易懂的解释、langGraph和使用API直接调用LLM的区别
人工智能
Mintopia8 分钟前
🚀 共绩算力:3分钟拥有自己的文生图AI服务-容器化部署 StableDiffusion1.5-WebUI 应用
前端·人工智能·aigc
HPC_C15 分钟前
SGLang: Efficient Execution of Structured Language Model Programs
人工智能·语言模型·自然语言处理
王哈哈^_^24 分钟前
【完整源码+数据集】草莓数据集,yolov8草莓成熟度检测数据集 3207 张,草莓成熟度数据集,目标检测草莓识别算法系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计
chxii25 分钟前
Spring Boot 响应给客户端的常见返回类型
java·spring boot·后端
韩立学长27 分钟前
【开题答辩实录分享】以《植物爱好者交流平台的设计与实现》为例进行答辩实录分享
spring boot·后端·mysql
Wzx19801229 分钟前
go基础语法练习
开发语言·后端·golang
songyuc41 分钟前
《A Bilateral CFAR Algorithm for Ship Detection in SAR Images》译读笔记
人工智能·笔记·计算机视觉
sp421 小时前
漫谈 Java 轻量级的模板技术:从字符串替换到复杂模板
java·后端
2301_795167201 小时前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust