技巧是一种刻意设计的方式,用来组织一个提示词或一连串提示词,以解决朴素指令解决不了的问题。每种技巧都有 token、延迟或复杂度方面的成本。关键在于使用能奏效的最轻量的那一种。
技巧一览
| 技巧 | 作用 | 成本 |
|---|---|---|
| 少样本提示词 | 展示期望输出的示例 | 每次调用的 token |
| 角色提示词 | 设定专业身份、受众和语气 | 极低 |
| 上下文注入 | 补充模型缺少的事实 | 每次调用的 token |
| 输出约束 | 固定篇幅、格式和允许的取值 | 极低 |
| 结构化输出提示词 | 返回符合 schema 的数据 | 极低 |
| 思维链 | 在回答前逐步推理 | 输出 token、延迟 |
| 自洽性 | 采样多个答案并取多数 | 多次调用 |
| 提示词分解 | 把问题拆成子问题 | 设计工作量 |
| 提示词链 | 把子任务作为独立的提示词依次运行 | 多次调用 |
| ReAct | 推理与工具调用交替进行 | 多次调用、工具 |
| 迭代式优化 | 通过度量改进提示词 | 你的时间 |
| 提示词精修 | 修改措辞以提高清晰度和精确度 | 你的时间 |
| 提示词评估 | 依据标准给输出打分 | 一个测试集 |
| 提示词测试 | 每次改动后重新运行检查 | 自动化 |
| 提示词压缩 | 在不损失含义的前提下删除 token | 极低 |
塑造单个提示词的技巧
少样本提示词。 加入输入输出对。最适合需要判断的场景和自定义风格。指南:少样本提示词。
角色提示词。 开头说明模型是谁、在和谁说话。它选择的是一种语域,并不增加知识。指南:系统提示词与角色提示词。
上下文注入。 把答案所依赖的文档、记录或搜索结果放进分隔符中,并指示模型据此作答。当上下文是自动获取时,这就成为 RAG 提示词。
Answer using only the policy in the tags. If it does not say, reply "not covered".
<policy>
{{policy_text}}
</policy>
输出约束与结构化输出。 指定格式、字段、篇幅,以及数据缺失时怎么办。指南:结构化输出提示词。
推理类技巧
思维链。 要求模型在给出答案之前先演算问题。对于不在内部推理的模型,它在多步逻辑和算术上有帮助。内置推理的模型本来就在这样做,告诉它们“一步一步地思考”收效甚微。
自洽性。 把同一个推理提示词运行多次,取最常见的答案。在只有一个正确结果的问题上,用成本换取准确率。
两者都在思维链提示词与自洽性中介绍。
使用多个提示词的技巧
提示词分解。 把一个难题拆成若干更小、每个都能答好的问题,再把答案合并起来。
提示词链。 把这些部分作为独立的调用运行,把每个输出传给下一步。每个提示词都保持简单并且可测试。指南:提示词链与分解。
ReAct。 让模型在推理与行动之间交替:它判断自己需要什么,调用工具,读取结果,然后继续。这是大多数 AI 智能体背后的循环。指南:ReAct 提示词。
改进提示词的技巧
迭代式优化与精修。 在测试集上运行提示词,找出失败之处,改动一处,再度量。指南:迭代式提示词优化。
评估与测试。 定义什么是“好”,为它打分,并在提示词每次变化时重新运行检查。指南:提示词测试与评估。
提示词压缩。 删除冗词、重复和不必要的上下文,以降低成本和延迟。指南:token 优化。
如何选择
沿着这份清单从上往下,在第一个能解决问题的步骤停下。
- 写一条清晰的指令,并带上输出格式。 大多数问题到这里就结束了。
- 补上缺失的背景。 如果回答泛泛,或事实有误。
- 加入示例。 如果风格或判断不对。
- 要求推理。 如果任务需要多个逻辑步骤,而模型不是推理模型。
- 把任务拆成一条链。 如果一个提示词承担了太多事情。
- 给模型工具。 如果它需要实时数据或需要执行操作。
- 多次采样。 如果在单一答案问题上,准确率值得多次调用。
添加任务并不需要的技巧,只会让提示词更长、更慢、更难调试。
组合技巧
技巧可以叠加。一个典型的生产提示词会用到角色、注入的上下文、两个示例和一个 schema。一个典型的智能体会在由这类提示词组成的链上使用 ReAct。每次只加一种技巧并度量,这样你就知道是哪一个物有所值。
从扎实的基础开始
技巧放大的是提示词本身,并不能修复它。在添加任何技巧之前,先用 PromptFlowEngine 提示词分析器检查,清除含糊的措辞、冲突和缺失的格式,并使用提示词优化器来整理结构。