微信扫码
添加专属顾问
我要投稿
Google提示工程白皮书深度解读,揭示大语言模型背后的工作原理和优化技巧。核心内容:1. 大语言模型的工作原理和记忆大师比喻2. Prompt工程的定义及其在优化大语言模型输出中的作用3. 影响大语言模型输出的关键因素分析
最近Google发布了提示工程(Prompt Engineering)白皮书,我们这里进行解读。在如今这个科技飞速发展的时代,大语言模型(LLM)就像一个神奇的魔法盒子,能根据我们输入的内容,变幻出各种各样的精彩回答。无论是写文章、回答问题,还是编写代码,它都能轻松应对。但你有没有想过,为什么同样是向大语言模型提问,有的人得到的答案精准又满意,有的人却总是收获一些让人摸不着头脑的回复呢?
我们解读最新技术,文末有相关信息。
其实,这背后的关键就在于 “Prompt工程”。它就像是一把能打开大语言模型神奇力量的钥匙,掌握了它,你就能和大语言模型更好地 “沟通”,让它为你提供更优质的服务。接下来,就让我们一起深入探索Prompt工程的秘密。
要理解Prompt工程,首先得搞清楚大语言模型是怎么运作的。简单来说,大语言模型就像是一个超级“记忆大师”,它在大量的文本数据中学习各种知识和语言模式。当你给它输入一段文本时,它会根据之前学到的内容,预测下一个最可能出现的“词”(在计算机里叫“token”)。然后把这个预测出来的“词”加到输入文本后面,再接着预测下一个“词”,就这样不断重复,直到生成一段完整的内容。
打个比方,大语言模型就像一个熟读了无数书籍的人,你给它一个开头,它能根据自己“读”过的内容,接着往下编故事。不过,它编故事的能力强不强,能不能编出你想要的故事,很大程度上取决于你给它的“提示”,也就是Prompt。
Prompt工程,简单来讲,就是设计高质量“提示”的过程。研究员打个比方,你想让大语言模型帮你写一篇关于旅游的文章,如果你只是简单地说“写篇旅游文章”,它可能不知道你具体想去哪里旅游,喜欢什么类型的景点,写出来的文章就不一定符合你的心意。但要是你详细地告诉它,比如“我想去海边旅游,喜欢看美丽的日落,还想体验当地的特色美食,帮我写一篇这样的旅游攻略”,这就是一个更有效的Prompt。研究员通过不断调整和优化这个Prompt,让大语言模型输出的内容更符合我们的期望,这就是Prompt工程在做的事。
Prompt工程涉及很多方面,比如要选择合适的词语和表达方式,确定Prompt的结构,还要考虑大语言模型的特点和它所使用的训练数据。它是一个反复尝试和改进的过程,就像厨师做菜,要不断调整调料的用量和烹饪的火候,才能做出一道美味佳肴。
在和大语言模型“对话”时,你可以设置它输出内容的长度。这就好比你让一个人说话,规定他只能说一定数量的字。输出长度的设置很重要,因为生成更多的内容需要大语言模型进行更多的计算,这不仅会消耗更多的“能量”(计算机资源),让它的响应速度变慢,还可能增加使用成本。
而且,减少输出长度并不意味着大语言模型会把内容写得更简洁,它只是在达到你设定的字数限制后就停止生成内容了。比如说,你让它总结一篇文章,设置的输出长度比较短,它可能就没办法把文章的所有要点都总结出来。所以,当你需要短输出时,可能还得在Prompt里动点脑筋,让大语言模型明白你的重点需求。
大语言模型在预测下一个“词”的时候,并不是直接确定一个词,而是给每个可能的词都分配一个概率,然后根据这些概率来选择下一个词。这里就涉及到几个重要的设置:温度(Temperature)、Top-K和Top-P。
温度这个设置很有意思,它控制着词选择的随机性。温度低的时候,大语言模型会更倾向于选择概率最高的那个词,就像一个谨慎的人,总是选择最保险的选项。这样生成的内容比较确定,适合那些需要准确答案的情况,比如回答数学问题。而温度高的时候,它选择词的范围就更广,会产生更多样化、甚至有点出乎意料的结果,就像一个大胆的冒险者,喜欢尝试各种新鲜事物。这时候生成的内容可能更有创意,适合写小说、诗歌这类需要创意的任务。
Top-K和Top-P则是用来限制大语言模型从哪些词里选择下一个词的设置。Top-K是从预测概率最高的K个词里选择,K值越大,模型的输出就越有创意和变化;K值越小,输出就越保守、更符合事实。Top-P是选择累积概率不超过某个值(P)的那些词,P值从0到1变化,0就相当于只选择概率最高的那个词,1则表示所有词都有机会被选中。在实际使用中,研究员建议你可以多试试这两种方法,看看哪种能得到你想要的结果。
这几个设置之间也相互影响。比如,当你把温度设为0时,Top-K和Top-P就没什么用了,模型会直接选择概率最高的词;要是把Top-K设为1,那不管温度和Top-P怎么设置,模型也只会选择那一个符合Top-K标准的词。一般来说,刚开始尝试的时候,可以把温度设为0.2,Top-P设为0.95,Top-K设为30,这样能得到比较连贯、又有点创意的结果。要是你想要更有创意的内容,就把温度调高到0.9,Top-P设为0.99,Top-K设为40;想要保守一点的结果,就把温度降到0.1,Top-P设为0.9,Top-K设为20。
零样本Prompting是最简单的一种方式,就像给大语言模型出了一道没有任何提示的题目。你只告诉它任务是什么,比如“判断这条电影评论是正面、负面还是中性的”,然后给出评论内容,没有其他额外的示例。这时候,大语言模型只能根据自己学到的知识来判断,就像一个学生在考试时遇到一道完全没见过的题目,只能靠自己的积累来答题。一般这种情况下,要把模型的温度设低一点,因为不需要太多创意,让它更准确地判断就行。
如果零样本Prompting效果不太好,就可以试试少样本Prompting。少样本Prompting就像是给学生考试时提供了几个类似题目的参考答案。你给大语言模型提供一个或多个示例,让它明白你想要的答案格式或模式。比如,你想让它把披萨订单解析成JSON格式,就可以先给它一个例子:“我想要一个小披萨,有奶酪、番茄酱和意大利辣香肠。JSON响应:{‘size’:‘small’,‘type’:‘normal’,‘ingredients’:[['cheese’,‘tomato sauce’,‘pepperoni’]]}”,然后再让它处理新的订单。通常来说,少样本Prompting至少要提供三到五个示例,不过具体数量还得根据任务的复杂程度和模型的能力来调整。在选择示例时,要选和任务相关、质量高、多样化的,一个小错误都可能把大语言模型带偏。
系统Prompting就像是给大语言模型定了一个总任务、总目标,告诉它“大局”是什么。比如,你让它翻译语言,或者对评论进行分类,这就是在系统层面给它设定任务。它可以帮助大语言模型明确方向,还能让输出满足特定要求,比如让它以JSON格式输出结果,这样能让数据更有条理,减少一些“胡思乱想”(幻觉)的情况。
上下文Prompting则是给大语言模型提供和当前任务相关的具体细节或背景信息。这就好比你和朋友聊天,你得把事情的前因后果都告诉他,他才能更好地理解你在说什么,给你更准确的回应。比如说,你想让大语言模型给一个关于复古游戏的博客推荐文章主题,你就可以告诉它“你是在为一个关于80年代街机复古游戏的博客写文章”,这样它推荐的主题就会更符合这个博客的定位。
角色Prompting是给大语言模型设定一个特定的角色,让它扮演这个角色来生成内容。研究员打个比方,你让它扮演一个旅行导游,那它给出的回答就会像一个真正的导游一样,给你推荐旅游景点、介绍当地特色。而且,你还可以给这个角色设定不同的风格,幽默、正式、有说服力等等,让它的回答更有个性。
写Prompt有时候挺复杂的,有没有办法让这个过程自动化呢?当然有,这就是自动Prompt工程。它的原理就是让一个模型去生成更多的Prompt,然后对这些生成的Prompt进行评估,选出最好的那个,或者对好的Prompt进行修改,再重复这个过程。
比如说,你要训练一个卖乐队周边T恤的聊天机器人,就可以让模型生成各种顾客可能用来下单的指令,像“我想买一件Metallica的S码T恤”的不同表述方式。然后用一些评估指标,比如BLEU或ROUGE,来判断这些指令的好坏,选择得分最高的作为最终的Prompt。这样不仅能节省人力,还能提高模型在各种任务中的表现。
大语言模型在代码编写、解释、翻译和调试等方面都能提供帮助。
当你需要编写代码时,比如要写一个Bash脚本重命名文件夹里的文件,你可以给大语言模型一个Prompt,告诉它你的需求。它就能生成一段代码,而且还会加上注释,就像一个贴心的助手,不仅帮你干活,还把每一步都解释清楚。不过,因为大语言模型有时候会重复训练数据里的内容,不一定能完全正确推理,所以生成的代码还是要自己检查和测试一下。
要是你拿到一段别人写的代码,看不懂怎么办?大语言模型可以帮你解释这段代码的作用。你把代码给它,它就能详细地告诉你每一步在做什么,就像一个耐心的老师,给你讲解难题。
如果想把一种编程语言的代码翻译成另一种语言,大语言模型也能做到。比如把Bash代码翻译成Python代码,它会根据两种语言的特点,把代码转换过来。同样,翻译后的代码也需要检查和测试,确保能正常运行。
当代码出现错误时,大语言模型还能帮忙调试和审查。你把报错信息和代码给它,它不仅能指出错误在哪里,还能告诉你怎么修改,甚至能发现代码中其他潜在的问题,并给出改进建议,就像一个经验丰富的程序员帮你检查代码一样。
在Prompt里提供示例是非常重要的一点。这就好比你教小朋友画画,只告诉他画什么,他可能不知道怎么画,但要是你给他看一幅画好的示例,他就能照着样子画得更好。给大语言模型提供示例,能让它更清楚你想要的输出是什么样的,提高回答的准确性和风格的契合度。
Prompt要写得简洁明了,让你自己和大语言模型都能轻松理解。如果一个Prompt你自己看了都觉得迷糊,那大语言模型肯定也会“一头雾水”。所以,不要用太复杂的语言,也别提供一些没用的信息。研究员建议你可以多使用一些明确的动词,像“Act”“Describe”“Classify”等等,让大语言模型清楚知道要做什么。
要把你期望的输出描述得具体一些。如果只是给一个很笼统的指令,大语言模型可能不知道你到底想要什么,输出的内容就可能不符合你的要求。比如说,让它生成一篇关于视频游戏主机的博客文章,你得告诉它文章要写几段、重点讨论哪些方面、用什么风格写等等,这样它就能更有针对性地创作。
在引导大语言模型输出时,指令和约束都可以用,但研究发现,多用积极的指令会更有效。
指令是明确告诉大语言模型要做什么,而约束是限制它不能做什么。就像你教小朋友做事,与其告诉他不要做这个、不要做那个,不如直接告诉他应该怎么做。指令能让大语言模型更清楚目标,发挥出它的创造力,而过多的约束可能会让它不知所措,甚至产生冲突。当然,在一些特定情况下,比如防止模型生成有害或有偏见的内容时,约束还是很有用的。所以,最好先以指令为主,必要时再加上约束,并且要多尝试不同的组合,找到最适合任务的方式。
你可以通过设置最大token限制或者在Prompt里明确要求输出的长度,来控制大语言模型生成内容的长短。比如,让它用一条推文的长度来解释量子物理,这样它就会尽量把复杂的内容精简地表达出来。
在Prompt里使用变量能让你的Prompt更灵活、更可复用。就像你有一个关于城市介绍的Prompt,如果你把城市名写成固定的,那每次换个城市都得重新写Prompt。但要是用变量来代替城市名,只需要修改变量的值,就能轻松得到不同城市的介绍,节省了很多时间和精力,在把Prompt集成到自己的应用程序中时也更方便。
不同的模型、模型配置、Prompt格式、用词和提交方式都会影响大语言模型的输出结果。所以,你可以多尝试不同的方式,看看哪种能得到更好的效果。比如,同样是让大语言模型介绍一款游戏主机,你可以用问题、陈述或者指令的方式来写Prompt,观察输出有什么不同,选择最符合你需求的那种方式。
在进行少样本分类任务时,要注意把示例中的不同类别打乱顺序。这是因为如果按照固定顺序给出示例,大语言模型可能会“记住”这个顺序,而不是真正学会识别每个类别的关键特征。就像你让它区分猫和狗,如果每次都是先给猫的例子,再给狗的例子,它可能会以为顺序就是判断的依据,而不是根据猫和狗的特征来判断。所以,打乱顺序能让模型学习得更全面,在遇到新数据时表现得更好。
大语言模型会不断更新,增加新的数据、改进架构和功能。作为用户,你要跟上这些变化,及时尝试新的模型版本。因为新模型可能在某些方面表现更好,比如回答更准确、生成内容更有创意。你可以利用像Vertex AI Studio这样的工具,方便地存储、测试和记录不同版本的Prompt,看看它们在新模型上的表现如何,然后根据结果调整Prompt,更好地发挥新模型的优势。
除了关注Prompt的输入格式,你也可以多试试不同的输出格式。对于一些非创意类的任务,比如提取数据、选择数据、解析数据、排序数据或者分类数据,使用像JSON或XML这样的结构化格式输出会有很多好处。比如,用JSON格式输出数据,在实际应用中,你不需要手动去整理数据格式,它可以直接按照一定的顺序呈现数据,处理日期时间等类型的数据时特别方便。而且,要求模型以JSON格式输出,能让模型生成更有条理的内容,减少一些不合理的“想象”内容。
当你在为某个任务寻找一个好的Prompt时,可以找其他Prompt工程师一起尝试。大家都按照最佳实践的方法去做,但由于每个人的思路不同,写出来的Prompt也会不一样,得到的结果也会有差异。通过交流和对比这些不同的结果,你能学到很多新的思路和方法,说不定就能找到更优的Prompt。
记录每次Prompt的尝试过程非常重要。因为大语言模型的输出可能会因为模型不同、采样设置不同,甚至同一模型的不同版本而有所差异。即使是同样的Prompt,每次输出的内容在句子格式和用词上也可能会有细微差别。所以,研究员建议你创建一个类似Google Sheet的表格,详细记录每次尝试的Prompt名称、目标、使用的模型、温度、Top-K、Top-P等设置,以及输入的Prompt内容和得到的输出结果。如果使用的是Vertex AI Studio这样的工具,还可以记录保存Prompt的链接,方便随时重新运行。另外,最好再记录一下Prompt的版本、结果是否满意以及相关的反馈信息。这样,当你之后需要回顾、测试不同模型上的Prompt性能,或者调试出现的问题时,这些记录就能派上大用场。等你觉得某个Prompt差不多完美了,就可以把它应用到项目代码中,并且把Prompt和代码分开保存,这样更便于维护。而且,理想情况下,Prompt应该成为一个可运行系统的一部分,你可以通过自动化测试和评估程序,来了解这个Prompt在实际任务中的表现如何。
Prompt工程是一个不断迭代优化的过程。你需要不断地创建、测试不同的Prompt,仔细分析和记录结果,根据模型的表现来改进Prompt。一直不断尝试,直到得到你想要的输出。并且,当你更换模型或者调整模型配置时,之前用过的Prompt可能需要重新测试和优化,这样才能让大语言模型始终为你提供满意的服务。
通过这篇文章,我们全面了解了Prompt工程的方方面面。从大语言模型的工作原理,到各种Prompting技巧,再到自动Prompt工程以及代码相关的Prompt应用,还有一系列的最佳实践方法。掌握这些知识,就相当于掌握了与大语言模型高效沟通的技巧。希望大家在今后使用大语言模型的过程中,能够灵活运用Prompt工程的知识,挖掘大语言模型的最大潜力,让它为我们的学习、工作和生活带来更多的便利和惊喜。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2025-05-12
用 Cursor 还在被 AI 乱改代码?你可能没用对 Rules!
2025-05-12
代码已死,Prompt当立?a16z的AI开发9大预言
2025-05-11
这份谷歌提示词指南,让你秒变Prompt高手!
2025-05-11
25000字长文详细讲述提示词工程-2025谷歌白皮书:如何通过提示词工程优化AI模型
2025-05-11
Andrej Karpathy提出LLM学习新范式:系统提示学习
2025-05-10
别再跟AI“鸡同鸭讲”了!扒一扒谷歌内部《提示词指南》,我悟了…
2025-05-09
AI特征检测 - 两个prompt检测文本AI味并给出量化指标
2025-05-09
谷歌 Prompt Engineering 白皮书中文版来了:DeepL 和沉浸式翻译谁更强?
2024-08-20
2024-06-29
2023-06-08
2024-09-17
2024-06-26
2024-06-27
2024-07-09
2024-07-12
2024-09-16
2024-06-14
2025-05-09
2025-04-29
2025-04-27
2025-04-20
2025-04-16
2025-04-11
2025-02-25
2025-02-21