改进 LLM 驱动应用的 17 项技术
一份改进 LLM 驱动应用的技术目录。
本页目录
当你已经明确成功标准、选好模型并编写了一些基础评测后,就该开始改进系统了。
改进系统归根结底只有两件事:
- 改进反馈循环(评测)
- 提升系统本身的表现
我们已经讨论过如何改进评测。本文将概览提升系统表现的主要方法。
不过在此之前,先谈谈改进系统时应具备的思维方式。
先尝试最简单的方法
前文已经说明,改进 AI 系统是一个实验过程。你需要不断尝试、观察什么有效,再继续迭代。
改进系统的技术从简单低成本,一直到复杂昂贵。调整提示词?成本很低。从头训练模型?昂贵得惊人。
我把它称为“复杂度地狱阶梯”:
关键是从阶梯最上方开始,只有穷尽所有简单选项后,才继续向下走。简单技术往往只需少量投入,就能带来巨大提升。
想深入学习:加入“面向真正工程师的 AI 编码”候补名单
值得尝试的技术
下面的列表从最简单的技术排到最复杂的技术。请从顶部开始逐步向下。每项技术都附有延伸资料,供你了解更多细节。
1. 写好第一个提示词
问题:你总得从某处开始。
解决方案:以下是改进提示词的一些基本建议:
- 表达要清晰、直接、具体。
- 把 LLM 当作一位能力出众、但刚刚入职的员工。
- 记住,LLM 并不了解你的规范、风格和指导原则。
参考资料
- Anthropic 的提示建议是理解如何编写优秀提示词的实用指南。
- Anthropic 的提示词库很适合用来探索符合自身场景的优秀提示词。
- OpenAI 关于编写清晰指令的文档。
2. 基于角色的提示
问题:无论输入是什么,你都希望 LLM 始终以某种方式表现。
解决方案:使用基于角色的提示,让 LLM 采用特定身份。
用途可以非常多样,例如调整说话语气:
You are a friendly support engineer. Answer in short, plain sentences.
甚至可以调整口音:
You are a concise British copy editor. Keep the answer dry and understated.
也可以预先引导 LLM 围绕特定主题展开:
You are an AI engineering coach. Explain tradeoffs in terms of evals, latency, and cost.
这是一项极其常见、实现成本很低的技术,通常通过系统提示词完成。
参考资料
- 我介绍 Vercel AI SDK 系统提示词的视频
- Anthropic 关于基于角色提示的文档
- OpenAI 关于让模型采用特定身份的文档
3. XML 标签
在输入中使用 XML 标签
问题:你希望在一个提示词中向 LLM 传入多段信息。
解决方案:使用 XML 标签。
XML 标签可以为提示词的不同部分提供清晰分隔。
Anthropic 文档中的一个例子是财务报告:
<documents><document index="1"><source>2025 annual report</source><document_content>Revenue increased 18% year over year...</document_content></document><document index="2"><source>Q1 investor update</source><document_content>Gross margin improved after infrastructure costs fell...</document_content></document></documents>Using only the documents above, summarize the main business risks.
在输出中使用 XML 标签
问题:你希望 LLM 在一次响应中返回多种不同输出。
解决方案:要求 LLM 按照 XML 标签分别返回不同输出。
你还可以要求 LLM 根据提示词中的 XML 标签返回不同输出,从而更精确地控制响应结构。
例如,你可能希望 LLM 审查一篇文章,并分别提供 <summary>、<critique> 和 <recommended_changes>。
Review this article and respond using this exact structure:<summary>One paragraph summary</summary><critique>What is unclear or unsupported</critique><recommended_changes>Concrete edits to make next</recommended_changes>
这项技术由 Anthropic 推广开来,不过大多数模型也都支持。
参考资料
- Anthropic 关于在提示词中使用 XML 标签的文档
- OpenAI 文档也提到了使用 XML 标签作为分隔符
4. 约束 LLM 的响应格式
问题:你希望严格约束 LLM 返回的文本,例如要求它只回复 JSON 或一个单词。
解决方案:使用结构化输出,或给出明确的格式指令。
旧版 Claude 支持通过“预填充”助手消息来引导响应格式。从 Claude 4.6 开始,预填充会返回 400 错误。现代替代方案更好:
结构化输出(推荐):如今,大多数 LLM 提供商都支持结构化输出模式,可以保证响应符合指定 JSON 结构。在 Vercel AI SDK 中,可以使用 generateObject 或 streamObject:
const result = await generateObject({model,schema: z.object({sentiment: z.enum(['positive', 'neutral', 'negative']),summary: z.string(),}),prompt: 'Classify this customer feedback...',})
系统提示词指令:对于较简单的约束,可以直接在系统提示词中告诉模型需要什么格式:
Reply with exactly one of these labels: bug, feature-request, billing, or other.Do not include any explanation.
这两种方法都比预填充可靠。结构化输出可以获得类型安全、经过验证的响应;需要具有特定形态、但仍较灵活的文本输出时,系统提示词指令更合适。
参考资料:
- Anthropic:结构化输出
- Vercel AI SDK:
generateObject
5. 结构化输出
问题:你希望 LLM 返回结构化数据,而不是普通文本。
解决方案:使用结构化输出。
结构化输出可以让 LLM 以 JSON 等结构化格式返回数据。大多数 LLM 提供商都支持使用 JSON Schema 描述期望的输出。
Vercel AI SDK 尤其适合处理这类需求。
参考资料
- Anthropic 关于 JSON 模式的文档
6. 推理
问题:LLM 在编码或数学题等复杂多步骤推理任务中表现不够好。
解决方案:使用思维链(CoT)提示,引导 LLM 逐步推理问题。
思维链提示鼓励 LLM 把问题逐步拆解,从而生成更准确、更细致的输出。它对需要复杂推理、分析或问题求解的任务尤其有效。
思维链提示主要有三种方式,复杂度由低到高:
- 基础 CoT:只需在提示词中加入“逐步思考”。方法简单,但没有说明应该怎样思考。
- 引导式 CoT:明确列出 LLM 在思考过程中应遵循的具体步骤。
- 结构化 CoT:使用
<thinking>和<answer>等 XML 标签,把推理过程与最终答案分开。
思维链提示以速度换取质量。LLM 必须处理并输出推理步骤,因此响应时间会变长。这对实时应用影响最大:聊天机器人需要快速响应,而代码审查器可以花更长时间完成细致分析。
参考资料
- Anthropic 关于思维链提示的文档
- OpenAI 关于让模型在得出结论前留出思考时间的建议
7. 多样本提示
问题:LLM 需要理解某种特定模式或格式,但单个示例不足以让它掌握。
解决方案:提供多个示例,帮助 LLM 理解模式。
多样本提示可以取得类似微调的效果,却不必承担训练新模型的成本和复杂度。做法是向模型展示你希望它完成的任务示例。
方法很直接:提供几组输入和输出示例,模型就能学会其中模式,无需准备训练数据或计算资源。
下面是编写产品描述的实际示例:
Write product descriptions in this style.Input: Noise-canceling headphonesOutput: Sink into your work with soft over-ear cushions and active noise cancellation that quiets the room around you. Great for deep focus, travel, and calls that need fewer distractions.Input: Standing deskOutput: Move from sitting to standing in seconds with a sturdy desk that keeps your monitor, keyboard, and coffee exactly where you need them. Built for long workdays without locking you into one posture.Input: Running shoesOutput: Light foam, breathable mesh, and a grippy sole make these shoes feel quick without beating up your feet. Perfect for daily miles, recovery runs, and the walk home after.Input: Coffee makerOutput:
看过这些示例后,模型会学会使用感官语言、突出产品收益来编写描述。随后输入“咖啡机”,它就会生成风格相似的文案。
多样本提示与零样本提示相对;零样本提示只描述需要什么,不提供任何示例。
参考资料
- Anthropic 关于多样本提示的文档
- OpenAI 关于提供示例的文档
8. 温度参数
问题:LLM 输出要么过于确定、显得无聊,要么过于随机、不够可靠。
解决方案:调整温度参数,控制输出的随机程度。
可以向 LLM 传入温度参数,用来控制输出更随机还是更确定。
可以把温度看作创造力旋钮。编写代码或需要精确事实时,建议设置为 0.0-0.3,让模型坚持最可能的输出;普通聊天或创意写作可使用 0.4-0.7,在稳定与变化之间取得平衡;头脑风暴或需要新鲜想法时,则可提高到 0.8-1.2.
温度越高,输出越有趣,但也可能产生更多幻觉。我的一般建议是从保守设置开始,只有需要更多变化时才逐步调高。
无论如何,这都是一项尝试成本较低的技术。
参考资料
- OpenAI API 参考文档解释了温度如何影响 Token 采样
9. 工具调用
问题:LLM 只能生成文本,无法直接与外部系统交互,也无法在现实环境中执行操作。
解决方案:为 LLM 提供可调用的特定函数或工具,把能力扩展到文本生成之外。
工具调用连接了 LLM 内部能力与外部世界。借助它,LLM 可以发起 API 请求、访问数据库或操作文件。LLM 描述自己想做什么,系统再使用指定参数执行相应工具。
当 LLM 需要与外部服务交互、执行系统操作,或访问训练数据中不存在的信息时,这种模式尤其有用。它是构建更强大 AI 应用的基础模块。
可以在我的教程中学习如何使用 Vercel AI SDK 实现这种模式。
参考资料
- Anthropic 关于工具调用的文档
- OpenAI 关于函数调用的文档
10. LLM 调用链
问题:单次 LLM 调用不足以完成复杂任务。
解决方案:把任务拆成多次相互衔接的 LLM 调用。
当同一输入需要经过多种专业处理时,试图用一个提示词完成全部工作,通常会得到较差结果。每项操作可能需要不同专长和关注重点。
这正是 LLM 调用链的用途。不要让一个提示词包办一切,而是把任务拆成多个专业步骤。每个提示词只专注一个方面,其输出再成为链中下一个提示词的输入。
以代码分析和修复生成为例。第一个提示词充当代码分析器,识别并分类代码问题,为每个问题补充上下文,形成结构化分析。
第二个提示词利用这份分析生成有针对性的修复,并建立在第一次调用的洞见上。关注点分离后,每个提示词都能针对自身任务优化,比在一个提示词中同时完成两项操作效果更好。
这种模式还可用于许多其他场景:
- 先分析文档结构,再生成摘要
- 先识别辩论要点,再组织平衡的回应
- 先从研究中提取事实,再编写面向普通读者的解释
- 先识别代码缺陷,再为每个缺陷生成修复
参考资料
- Anthropic 关于提示链的文档
- 更新:OpenAI 已移除关于使用内部独白的指南
11. RAG
问题:LLM 无法访问所需信息,因此开始编造事实。
解决方案:通过检索增强生成,让它访问真实数据。
RAG 是一项强大技术,可以让 LLM 的响应建立在真实数据上并减少幻觉。每个 LLM 的训练数据都有截止日期,无法知道此后发生的事件和信息。RAG 让模型不再只依赖训练时学到的内容,而能按需检索最新信息。
向 LLM 提供数据主要有两种方式。网页搜索可以访问最新信息和公共知识;公司数据库与文档则能提供私有、领域专属的信息。当你需要回答公司内部流程问题,或确保 LLM 响应保持最新时,后者尤其有用。
构建 LLM 应用时,不应首先选择 RAG。它会显著增加系统复杂度:你需要管理数据源、处理检索,并确保上下文窗口不超出限制。
参考资料
- OpenAI 关于 RAG 和语义搜索的文章,官方文档中也有相关章节。
12. 分块
问题:需要检索的信息太大,无法装进上下文窗口。
解决方案:把信息拆成更小、更易管理的块。
分块是 RAG 系统的基础技术,它把大型文档拆成更小、更易处理的片段。目标是让每个块既具有完整语义,又足够小,能够放进模型上下文窗口。
分块之所以复杂,是因为内容有许多拆分方式。主要方法包括:
- 基于 Token:按 Token 数量拆分,确保不超出模型限制
- 基于字符:按字符数拆分,适合处理原始文本
- 基于句子:保留自然语言边界
- 基于段落:保留更大的语义单元
- 语义边界:使用嵌入寻找自然断点
- 文档结构:尊重标题、章节等文档格式
完成分块后,需要为每个查询找出最相关的块。主要方法如下:
- BM25:传统搜索算法,查找精确词语匹配,非常适合技术术语和错误代码
- 嵌入:把文本转换为向量,查找语义相似的块
- 混合搜索:结合 BM25 与嵌入,获得更好结果
- LLM 重排序:使用另一个 LLM 仔细阅读各块,并按相关性排序
每种方法都有优势:BM25 擅长精确匹配,嵌入则善于捕捉语义。许多系统会组合多种方法,以获得最佳结果。
参考资料
- Pinecone 的分块策略指南
- Anthropic 关于上下文检索的研究
- 评估分块策略的研究论文
13. 智能体循环
问题:LLM 调用链对复杂任务过于僵硬。它要求预先定义步骤和停止点,不适合步骤数量不可预测的开放式问题。
解决方案:把控制权交给自主智能体,让它根据环境反馈进行规划、执行和调整。
LLM 调用链使用预定义步骤和停止点,因此难以处理不可预测的任务。智能体循环把更多控制权交给 LLM,让它根据任务进展自行决定何时停止。智能体通过现实环境反馈学会停止时机。
这样的系统更强大,因为它能适应不可预测的路径。它不再机械遵循预定义步骤,而是根据每次交互学习和调整,因此适合解决方案无法提前确定的复杂问题。
自主性也有代价:每一步都要作出决策,因此延迟更高。LLM 必须评估当前状态并选择最佳路径。智能体循环比 LLM 调用链更慢,却更能处理复杂任务。
这种模式适用于:
- 跨多个文件的复杂代码修改
- 需要多个信息来源的研究任务
- 路径不可预测的客户支持场景
- 需要多步处理的数据分析
参考资料
- Anthropic 关于构建高效智能体的文章
14. 并行执行 LLM 调用
问题:LLM 系统逐项处理任务,产生不必要的等待,整体耗时过长。
解决方案:并行运行多次 LLM 调用,同时处理相互独立的任务,大幅缩短总处理时间。
让系统变快只有两种方式:减少工作量,或同时完成更多工作。需要独立处理多个任务时,并行运行 LLM 调用可以显著提升性能。
任务相互独立、不依赖彼此结果时,可以并行:
- 分析多份文档
- 生成多个不同内容版本
- 同时处理多个用户查询
任务必须按顺序发生时,不能并行:
- 每一步都依赖上一步输出
- 严格顺序对最终结果至关重要
性能收益非常明显。顺序处理 10 份文档可能需要 10 秒,并行处理则可能只需 2–3 秒。应始终寻找并行机会;即使系统看似完全顺序执行,其中也可能存在可并发处理的独立部分。
参考资料
- Anthropic 关于构建高效智能体的文章提到了并行 LLM 调用
- OpenAI 文档包含并行 LLM 调用的章节
15. 评估器—优化器
问题:即使多次尝试,LLM 响应仍达不到所需质量标准。
解决方案:建立自动循环,由一个 LLM 生成响应,另一个负责评估并提供改进反馈。
评估器—优化器工作流让两个 LLM 协同形成自我改进系统。第一个 LLM 生成响应,第二个按照具体标准进行评估,再把结果反馈到生成过程,形成持续改进循环。
当评估标准清晰、迭代优化能带来可衡量价值时,这种模式尤其有效。如果人类反馈已被证明可以改善 LLM 响应,并且另一个 LLM 能提供质量相近的反馈,就说明它很适合。
它很适合文学翻译等场景,评估 LLM 可以发现翻译模型最初遗漏的细微含义。对于需要多轮搜索和分析的复杂检索任务也很强大,评估器可以判断是否还需继续搜索。
参考资料
- Anthropic 关于构建高效智能体的文章介绍了评估器—优化器模式
16. LLM 路由器
问题:不同类型的查询需要不同处理策略。
解决方案:使用 LLM 把查询路由到最合适的处理器。
LLM 路由器充当智能调度器,分析每个查询,再发送给正确的专用处理器。
路由器首先分析查询的类型和复杂度。客户服务系统可以把查询分为以下类别:
根据分类结果,路由器把查询连接到合适的处理器;每个处理器都有专属指令和能力。
这种路由方式有几项关键优势:它确保每个查询都由最合适的专用系统处理,从而提高准确率;也让每个专用 LLM 聚焦自身领域,类似于 LLM 调用链把复杂任务拆成专业步骤。
它还解决了 LLM 的一个根本限制:大多数模型只能处理有限数量的工具,通常不超过 30 个。把查询路由给专用处理器后,系统实际上可以支持无限数量的工具,因为每个处理器只需访问与自己相关的子集。
不过,增加 LLM 路由器也会多出一个顺序步骤并提高延迟,因为每个查询都必须先经过分析,才能路由到相应处理器。
参考资料
- Anthropic 关于构建高效智能体的文章提到了 LLM 路由器
- 更新:OpenAI 已移除关于意图分类的文档
17. 微调
问题:LLM 输出必须满足某些特定质量要求,而简单技术无法做到。
解决方案:使用自己的数据微调基础模型,提高它在特定场景中的表现。
微调可以让现有模型适应具体需求。你可以从规模较小但质量很高的示例数据集开始,准确展示期望输出,例如匹配品牌语气、处理专业术语或保持格式一致。针对特定任务微调后,小模型往往能超过更大、更昂贵的模型。
从成本和复杂度看,微调位于预训练与提示工程之间。它比从头训练模型便宜一个数量级,但每次微调仍会产生额外成本;还可能过拟合特定模型版本,使未来迁移到更新、更好的模型变得困难。
考虑微调的最佳时机,是系统已经能够工作并采用了更简单的技术之后。此时你已经验证使用场景、收集真实数据,并识别出模型需要改进的具体部分。微调会成为进一步提升系统表现的优化步骤。
参考资料
- OpenAI 文档中有关于微调的章节。
- Anthropic 的微调指南提供了详细要求和最佳实践。
18. 下一件大事
AI 工程发展速度惊人。每周都有新模型、新技术和新工具,声称会彻底改变 AI 系统的构建方式。你不可能追上所有变化,也没有必要。
每项 AI 新进展都必须证明自己值得进入系统。问问自己:“它让事情更简单还是更复杂?它是否解决了真实问题?”最有价值的进展会降低成本、提升性能,或让系统更易维护。
AI 的下一件大事会不断出现又退潮,但简单始终是可靠指南。使用自己的评测实验新技术,依据具体场景和成功标准进行验证。重点关注那些能以更低复杂度构建更有效系统的进展。