大模型(LLM)能够自动化大量任务。自2022年ChatGPT发布以来,市场上涌现出越来越多利用 LLM 的AI产品。然而,我们在使用 LLM 的方式上仍有许多可改进之处。例如,使用提示词优化工具改进你的提示(prompt),以及利用缓存的token,就是两种简单却能显著提升 LLM 应用性能的技术。
在本文中,我将介绍几种具体的技巧,帮助你优化提示的创建与结构,从而降低延迟和成本,同时提升生成结果的质量。本文的目标是为你提供这些切实可行的方法,让你能够立即将其应用到自己的 LLM 项目中。
这张信息图突出了本文的主要内容。我将讨论四种不同的技术,可显著提升你的 LLM 应用在成本、延迟和输出质量方面的表现。具体包括:利用缓存 token、将用户问题置于提示末尾、使用提示优化器,以及建立你自己的定制化 LLM 基准测试。(图片由 Gemini 提供。)
一、为什么要优化你的提示?
在很多情况下,你可能已经有一个能在特定 LLM 上运行并产生尚可结果的提示。但很多时候,你并未花时间对提示进行优化,这就意味着你错失了大量潜在的性能提升空间。
我认为,通过本文介绍的具体技术,你可以轻松地在几乎不增加额外工作量的前提下,同时提升响应质量并降低成本。仅仅因为一个提示和 LLM 能“跑通”,并不意味着它已达到最优性能。事实上,在很多场景下,只需稍作调整,就能获得显著改进。
二、优化提示的具体技巧
在本节中,我将详细介绍可用于优化提示的几种具体方法。
1. 始终将静态内容放在提示开头
我要介绍的第一个技巧是:始终将静态内容(static content)放在提示的最前面。所谓静态内容,是指在多次 API 调用中保持不变的部分。
之所以要这么做,是因为所有主流 LLM 服务商(如 Anthropic、Google 和 OpenAI)都支持缓存 token(cached tokens)。缓存 token 是指在先前 API 请求中已被处理过的 token,再次使用时可以以更低的成本和更快的速度进行处理。不同服务商的具体策略略有差异,但通常缓存输入 token 的价格约为普通输入 token 的 10%。
缓存 token 是指在之前的 API 请求中已经被处理过的 token,再次使用时比普通 token 更便宜、更快。
这意味着,如果你连续两次发送完全相同的提示,第二次请求中的输入 token 成本将仅为第一次的十分之一。这是因为 LLM 服务商会对这些输入 token 的处理结果进行缓存,从而让新请求的处理更便宜、更迅速。
在实践中,要有效利用 token 缓存,关键在于将变量内容放在提示末尾。
例如,如果你有一个很长的系统提示(system prompt),而每次请求的用户问题不同,你应该这样组织提示:
prompt =f"""{long static system prompt}{user prompt}"""举个例子:
prompt =f"""你是一位文档专家…… 你应始终按以下格式回复…… 如果用户询问…… 你应该回答…… {user question}"""这里,我们将提示中不变的部分(静态内容)放在前面,而将变化的部分(用户问题)放在最后。
在某些场景中,你可能需要传入文档内容。如果你要处理大量不同的文档,应将文档内容放在提示末尾:
# 处理不同文档时 prompt =f"""{static system prompt} {variable prompt instruction 1} {document content} {variable prompt instruction 2} {user question}"""但如果你多次处理同一份文档,那么为了确保文档内容也能被缓存,你需要保证在文档内容之前没有任何变量内容:
# 多次处理相同文档时 prompt =f"""{static system prompt} {document content} # 确保在任何变量指令之前 {variable prompt instruction 1} {variable prompt instruction 2} {user question}"""需要注意的是,缓存 token 通常只有在两个请求的前 1024 个 token 完全相同时才会被激活。例如,如果上面示例中的静态系统提示长度不足 1024 个 token,你就无法利用缓存机制。
# 切勿这样做! prompt =f"""{variable content} <--- 这会完全破坏缓存机制 {static system prompt} {document content} {variable prompt instruction 1} {variable prompt instruction 2} {user question}"""最佳实践:
你的提示结构应始终遵循“从最静态到最动态”的原则——即先放变化最少的内容,再逐步加入变化最多的内容。
- 如果你有一个很长但不含变量的系统提示和用户提示,应将其放在最前面,变量放在最后。
- 如果你要从文档中提取文本(例如处理同一份文档多次),应确保文档内容位于所有变量之前,以充分利用缓存。
2. 将问题放在提示末尾
另一个提升 LLM 性能的有效技巧是:始终将用户问题放在提示的末尾。理想情况下,你的系统提示应包含所有通用指令,而用户提示仅包含用户的问题本身,如下所示:
system_prompt ="<通用指令>" user_prompt =f"{user_question}"Anthropic 在其提示工程文档中指出,将用户问题放在末尾最多可提升 30% 的性能,尤其是在使用长上下文时。把问题放在最后能让模型更清晰地理解当前任务目标,从而在多数情况下生成更高质量的回答。
3. 使用提示优化器(Prompt Optimizer)
人类编写的提示往往杂乱、不一致、包含冗余内容,且缺乏结构。因此,你应始终将提示通过一个提示优化器进行处理。
最简单的优化方式是直接让一个 LLM 来优化你的提示,例如:
“请优化以下提示:{prompt}”
LLM 会返回一个结构更清晰、冗余更少的新提示。
但更好的做法是使用专门的提示优化工具,例如 OpenAI 或 Anthropic 控制台中提供的优化器。这些工具是经过专门设计和调优的 LLM,专门用于优化提示,通常效果更佳。
此外,为了获得最佳优化结果,你应提供以下信息:
- 你希望完成的具体任务细节;
- 提示成功完成任务的示例(包括输入和输出);
- 提示失败的示例(同样包括输入和输出)。
提供这些额外信息通常能显著提升优化效果。很多时候,你只需花费 10–15 分钟,就能获得一个性能大幅提升的提示。因此,使用提示优化器是提升 LLM 性能所需 effort 最低的方法之一。
4. 对 LLM 进行基准测试(Benchmarking)
你所选用的 LLM 本身也会极大影响应用的整体性能。不同模型擅长的任务各不相同,因此你需要在自己的应用场景中测试多个 LLM。我建议至少接入主流 LLM 提供商,如 Google Gemini、OpenAI 和 Anthropic。设置这些服务非常简单,一旦凭证配置完成,切换模型通常只需几分钟。此外,你也可以考虑测试开源 LLM,尽管它们通常需要更多配置工作。
接下来,你需要为你的具体任务建立专属的基准测试,以评估哪个 LLM 表现最佳。同时,你还应定期检查模型性能,因为大型 LLM 提供商有时会在不发布新版本的情况下悄悄升级模型。当然,你也应随时关注各大厂商推出的新模型,并及时尝试。
结论
在本文中,我介绍了四种可用于提升 LLM 应用性能的技术:
- 利用缓存 token
- 将用户问题置于提示末尾
- 使用提示优化器
- 建立定制化的 LLM 基准测试
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。