总结
引言
大型语言模型(LLM)的输入输出依赖于文本提示,但 crafting the most有效的提示需要考虑模型选择、训练数据、配置、措辞、风格、结构和上下文等因素。提示工程是一个迭代过程,需要不断优化提示长度、写作风格和结构,以确保模型生成准确、相关的输出。
LLM 输出配置
- 输出长度:生成更多 token 需要更多计算资源,导致能耗增加、响应时间变慢和成本上升。应根据需求限制输出长度,并调整提示以适应。
- 采样控制:LLM 预测 token 概率,并通过温度、top-K 和 top-P 进行采样。
- 温度:控制 token 选择 randomness。低温度适用于确定性响应,高温度产生更多样化的结果。
- top-K 和 top-P:限制预测的下一个 token 来自概率最高的 token。top-K 选择 K 个最可能的 token,top-P 选择累积概率不超过 P 的 token。
- 组合设置:温度、top-K 和 top-P 相互影响。例如,温度为 0 时,top-K 和 top-P 无效;top-K 为 1 时,温度和 top-P 无效。
提示技术
- 一般提示 / 零样本:仅提供任务描述和示例文本。例如,分类电影评论。
- 单样本和少样本:提供一个或多个示例,帮助模型理解期望的输出结构或模式。例如,解析披萨订单到 JSON。
- 系统提示:设置语言模型的整体上下文和目的。例如,指定输出格式为 JSON,或要求模型在回答中保持尊重。
- 角色提示:为语言模型分配特定角色,以生成更相关和有针对性的输出。例如,扮演旅行指南,提供旅游建议。
- 上下文提示:提供与当前对话或任务相关的具体细节或背景信息。例如,为关于复古游戏的博客建议文章主题。
- 后退提示:先考虑与特定任务相关的更一般的问题,然后将答案作为后续提示的一部分输入。例如,先确定第一人称射击游戏关卡的主题,再编写关卡故事情节。
- 思维链(CoT):通过生成中间推理步骤来提高 LLM 的推理能力。例如,解决数学问题,并解释每一步。
- 自洽性:结合采样和多数投票来生成多样化的推理路径,并选择最一致的答案。例如,对电子邮件进行分类。
- 思维树(ToT):允许 LLM 同时探索多个不同的推理路径。例如,解决复杂问题。
- ReAct(推理和行动):结合自然语言推理和外部工具(如搜索、代码解释器)来解决问题。例如,使用 LangChain 框架和 VertexAI 构建一个 ReAct 代理来查找 Metallica 乐队成员的孩子数量。
- 代码提示:Gemini 可以帮助编写代码,并解释、翻译和调试代码。例如,编写 Bash 脚本重命名文件,将其转换为 Python 代码,并调试代码错误。
最佳实践
- 提供示例:在提示中提供(单样本/少样本)示例,帮助模型理解期望的输出。
- 设计简洁:提示应简洁、清晰、易于理解。
- 明确输出:明确说明期望的输出格式和内容。
- 使用指令而不是约束:优先使用指令,明确说明模型应该做什么,而不是限制它做什么。
- 控制最大 token 长度:设置最大 token 数限制或明确请求特定长度。
- 在提示中使用变量:使用变量使提示更具动态性,并避免重复信息。
- 实验输入格式和写作风格:尝试不同的提示属性,如风格、措辞和类型。
- 混合分类任务的少样本示例:确保少样本示例中的可能响应类别是混合的,以避免过拟合。
- 适应模型更新:尝试较新的模型版本,并调整提示以利用新功能。
- 实验输出格式:对于非创造性任务,尝试以结构化格式(如 JSON 或 XML)返回输出。
- 与其他提示工程师合作:与多人合作,比较不同提示的性能。
- 记录各种提示尝试:使用表格记录提示的详细信息,以便跟踪和改进。
CoT 最佳实践
- 将答案放在推理之后:因为推理会改变模型预测最终答案时的 token。
- 将温度设置为 0:CoT 基于贪婪解码,通常只有一个正确答案。
结论
提示工程是一个迭代过程,需要不断实验、分析和改进提示,以获得最佳输出。通过理解 LLM 的工作原理和利用各种提示技术,可以有效地指导模型生成准确、相关和有价值的响应。