



在大语言模型(LLM)的世界里,提示(prompt)就像是开启宝藏的钥匙,决定着模型输出的质量与方向。提示工程作为一门新兴技术,正逐渐成为驾驭 LLM 的关键。这篇文章将带你深入了解提示工程的方方面面,从基础概念到高级技巧,再到最佳实践,助你成为提示工程的专家。
(一)提示工程的定义与作用
提示工程是设计高质量提示的过程,旨在引导 LLM 产生准确输出。LLM 本质上是预测引擎,根据输入文本和训练数据预测下一个标记(token)。当编写提示时,就是在设定模型预测正确标记序列的条件。提示工程涉及调整提示内容、优化长度、评估写作风格和结构,以适应不同的任务需求。
(二)LLM 输出配置
输出长度:设置生成响应的标记数量是重要的配置项。更多标记意味着更高的计算成本、能耗、可能更慢的响应时间和更高费用。减少输出长度不会使输出更简洁,只是让模型达到限制时停止预测。在一些提示技术中,如 ReAct,限制输出长度尤为重要。
采样控制:LLM 通过预测标记概率来选择下一个标记,温度(temperature)、Top-K 和 Top-P 是常见的控制配置。
温度:控制标记选择的随机性。较低温度适合期望确定性响应的提示,较高温度会产生更多样化或意外的结果。例如,温度为 0 时是确定性的,总是选择概率最高的标记。
Top-K 和 Top-P:两者都用于限制从高概率标记中选择下一个标记。Top-K 选择 K 个最可能的标记,数值越高输出越有创意;Top-P 选择累积概率不超过 P 值的标记,P 值范围从 0(贪婪解码)到 1(考虑所有标记)。通常,温度 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 是不错的选择;对于只有单一正确答案的任务,如数学问题,温度设为 0 即可。
(一)基础提示技术
零样本提示(Zero-shot Prompting):最简单的提示类型,仅提供任务描述和起始文本,没有示例。例如,在电影评论分类任务中,直接给出评论内容让模型分类。这种方式适用于简单任务或模型对任务有一定先验理解的情况,但可能在复杂任务上表现不佳。
单样本和少样本提示(One-shot & Few-shot Prompting):为模型提供示例可帮助其理解任务要求。单样本提示提供一个示例,少样本提示则提供多个示例。例如,在解析披萨订单为 JSON 格式的任务中,通过给出多个订单示例及对应的 JSON 输出,模型能更好地学习模式并完成任务。少样本提示中示例数量取决于任务复杂性、示例质量和模型能力,一般建议使用三到五个示例。
(二)高级提示技术
系统提示(System Prompting):设定语言模型的整体上下文和目的。可以用于生成符合特定要求的输出,如以特定格式返回结果或遵循特定规则。例如,要求模型以 JSON 格式分类电影评论,同时还能控制输出的安全性和毒性,如添加 “回答要尊重他人” 的指令。
角色提示(Role Prompting):为模型赋予特定角色,使其生成与角色相符的响应。比如让模型扮演旅行指南,根据用户所在地推荐景点。通过改变角色,可获得不同风格和视角的回答,还能选择不同的风格,如幽默、正式等,提升输出的质量和相关性。
上下文提示(Contextual Prompting):提供与当前任务或对话相关的具体细节和背景信息,帮助模型更好地理解需求并生成准确相关的响应。例如,为关于复古游戏的博客推荐文章主题时,提供博客主题和年代背景等信息,模型就能给出更符合要求的建议。
逐步后退提示(Step-back Prompting):先让模型考虑与具体任务相关的一般性问题,再将答案用于后续具体任务提示中。如在编写第一人称射击游戏关卡剧情时,先询问有哪些适合的虚构场景,再将这些场景作为上下文编写剧情,能使剧情更丰富、合理,提高提示的准确性。
思维链提示(Chain of Thought, CoT):通过生成中间推理步骤来提升 LLM 的推理能力,帮助模型生成更准确的答案。可以与少样本提示结合,在复杂任务中发挥作用。例如在数学问题中,让模型逐步思考,展示推理过程,从而得出正确答案。思维链提示具有低投入高产出、可解释性强、在不同模型版本间表现稳定等优点,但会增加输出标记数量,导致成本上升和时间延长。
自一致性提示(Self-consistency):结合采样和多数投票,生成多种推理路径并选择最一致的答案,提高 LLM 响应的准确性和连贯性。在邮件分类任务中,多次向模型发送相同提示,利用高温度设置生成不同推理路径,然后提取答案并选择最常见的分类结果,以此获得更可靠的分类。
思维树提示(Tree of Thoughts, ToT):扩展了思维链的概念,允许模型同时探索多种不同的推理路径,而不是仅遵循单一的线性思维链。这种方法适用于复杂的探索性任务,通过维护一个思维树,模型可以从不同节点分支,尝试不同的推理步骤,以找到更好的解决方案。
推理与行动提示(ReAct, Reason & Act):结合自然语言推理和外部工具(如搜索、代码解释器等),使 LLM 能够执行复杂任务。例如,在使用 LangChain 框架和 VertexAI 的示例中,模型通过推理确定搜索内容,调用外部搜索工具获取信息,不断更新推理并生成新的行动方案,最终解决问题,如计算 Metallica 乐队成员的孩子总数。
(三)自动提示工程(Automatic Prompt Engineering)
自动提示工程通过让模型生成提示、评估并调整,实现提示生成的自动化。在训练商品 T 恤网店的聊天机器人时,可让模型生成多种订单表述方式,然后根据 BLEU 或 ROUGE 等指标评估,选择得分最高的作为最终提示,还能对选择的提示进行调整和再次评估。
(一)编写代码提示
Gemini 可帮助开发者编写各种编程语言的代码。在需要批量重命名文件夹内文件时,通过编写提示,让模型生成 Bash 代码实现该功能。生成的代码需进行测试和检查,确保其准确性和可用性。
(二)解释代码提示
在团队开发中,阅读他人代码是常见任务。Gemini 能帮助解释代码,如输入去除注释的 Bash 代码,模型会详细说明代码的功能、每一步的作用以及可能存在的问题。
(三)翻译代码提示
当需要将代码从一种语言转换为另一种语言时,LLM 可发挥作用。将之前的 Bash 重命名文件代码翻译为 Python 代码,方便用于 Web 应用程序开发。翻译后的代码同样需要测试和调整,以确保其正确运行。
(四)调试和审查代码提示
在代码出现错误时,可向模型提供错误代码和错误信息,让其进行调试和审查。模型不仅能指出错误原因,如未定义的函数,还能提出改进建议,如处理错误的方式、优化代码结构等,帮助开发者完善代码。
(一)提供示例
在提示中提供单样本或少样本示例,能让模型学习期望的输出或相似响应,提高响应的准确性、风格和语气,使其更符合预期。
(二)设计简洁
提示应简洁明了,避免复杂语言和不必要信息。使用描述动作的动词,清晰表达任务要求。例如,将 “我现在在纽约,想了解更多好地方。我带着两个 3 岁的孩子。我们度假时该去哪里?” 改写为 “扮演游客的旅行指南,描述纽约曼哈顿适合带 3 岁孩子去的好地方”。
(三)明确输出
明确期望的输出内容,避免过于简洁或通用的指令。通过系统提示或上下文提示提供具体细节,帮助模型聚焦相关内容,提高整体准确性。
(四)使用指令而非约束
指令明确告知模型期望的响应格式、风格或内容,约束则限制模型的输出。研究表明,以指令为主的提示更有效,因为它直接传达目标,给予模型灵活性和创造性。但在某些情况下,如防止生成有害或有偏见的内容,约束仍然有用。应优先使用指令,必要时再添加约束,并不断试验不同组合。
(五)控制最大标记长度
可通过配置设置最大标记限制或在提示中明确要求特定长度,控制 LLM 生成响应的长度。例如,“用推文长度解释量子物理学”。
(六)使用变量
在提示中使用变量,可实现提示的复用和动态调整。在关于城市介绍的提示中,用变量表示城市名称,方便在不同输入时使用相同提示框架,节省时间和精力,尤其适用于将提示集成到应用程序中。
(七)尝试不同输入格式和写作风格
不同的模型、模型配置、提示格式、词汇选择和提交方式会产生不同结果。因此,应尝试各种提示属性,如以问题、陈述或指令的形式表述相同任务,观察模型输出的差异,找到最适合的方式。
(八)少样本分类任务中混合类别
在少样本分类任务中,确保示例中可能的响应类别是混合的,避免模型过度拟合示例顺序,让模型学习识别每个类别的关键特征,提高对未见过数据的泛化能力。一般从 6 个少样本示例开始测试准确性。
(九)适应模型更新
关注模型架构变化、新增数据和功能,尝试新的模型版本,并调整提示以充分利用新特性。Vertex AI Studio 等工具可用于存储、测试和记录提示的不同版本。
(十)尝试输出格式
对于非创造性任务,如数据提取、选择、解析等,尝试使用 JSON 或 XML 等结构化格式作为输出。JSON 格式具有返回风格一致、聚焦所需数据、减少幻觉、关系感知、有数据类型和可排序等优点,但可能存在处理时间长和成本高的问题,且易因标记限制导致截断,此时可使用 json - repair 库修复不完整或格式错误的 JSON。
(十一)协同实验
与其他提示工程师合作,尝试不同的提示。遵循最佳实践,观察不同提示尝试的性能差异,相互学习和改进。
(十二)记录提示尝试
详细记录提示尝试的各个方面,包括提示内容、模型、温度、Top-K、Top-P、输出结果等信息。使用 Google Sheet 等工具创建模板,记录版本、结果状态和反馈等。若使用 Vertex AI Studio,保存提示并记录链接,方便重新运行。在检索增强生成系统中,还需记录影响提示内容的相关信息。当提示接近完美时,将其保存到项目代码库中,并与代码分开存放,便于维护,同时依靠自动化测试评估提示在任务中的泛化能力。
提示工程是一个不断迭代的过程,需要不断尝试、分析和改进。通过掌握这些提示技术和最佳实践,你将能够更好地与 LLM 协作,解锁其巨大的潜力,为各种任务提供高质量的解决方案。