注:这里的”性能“原文为”performance”,指 LLM 回答问题的准确率,而不是运行时的计算资源消耗性能。
原视频来自 OpenAI
优化 LLM 性能的难点
- 从各种噪声中找到信号,辨认出问题并不容易。
 - LLM 的性能评估抽象且难量化。
 - 不知道从何入手解决问题。
 
优化路径
LLM 的优化路径
- 上下文优化,让模型知道更多。
 - LLM 优化,改变模型的行为和方法。
 
一般的演化方向
- Prompt engineering
 - RAG,类比给 LLM 加上短期记忆,针对具体问题提供具体信息。
 - Fine-tune model,类比给 LLM 加上长期记忆,让模型持续地遵循某种行为模式或输出结构。
 
拿考试举例子,Fine-tuning 是闭卷考,你需要记住所有知识才能参加考试;RAG 是开卷考,你带着各种参考资料进考场。
Prompt Engineering
先用简单的提示词工程尝试解决问题,找到评估基准,判断性能瓶颈是上下文还是模型的行为模式。
当确定基准后,可以在 prompt 里添加 few-shot 示例,看是否可以带来性能提升。
优点
- 尽快地测试并获得反馈。
 - 结合性能评估,这确定了性能优化的基准线。
 
缺点
- prompt 中引入了新信息。
 - 被上下文窗口限制。
 - token 使用效率低。
 
最佳实践
- 编写清晰的指令。
 - 把复杂任务拆分成简单的子任务。
 - 让 LLM 有时间思考,例如 CoT,ReAct。
 - 用控制变量法系统性地测试改动控制变量法。
 
后续步骤
- 提供参考文本。
 - 接入外部工具。
 
RAG
先根据问题找到相关的上下文,再要求 LLM 回答。
优点
- 可以不断向 LLM 提供最新的信息。
 - 通过控制参考文本降低幻觉。
 
缺点
- 提供给 LLM 的信息仅限上下文片段,无法让 LLM 拥有更宽泛的领域知识。
 - 不擅长让 LLM 按照规定格式或特定语言输出结果。
 - 不利于降低 token 使用率。
 
进阶技巧
- 用 cosine 计算向量相似度。
 - HyDE (Hypothetical Document Embedding),让模型先回答,用回答去搜索上下文。
 - Fine-tuning embedding 模型。
 - 分片后再进行 embedding。
 - 重排,搜索到上下文后,重新计算和问题的相似程度,或施加一些人工规则,重新排序和剔除上下文。
 - 分类,让模型先判断问题相关的上下文有可能在哪些数据集中找到,之后再进行搜索。
 - 并行计算,把问题拆分成多个子问题,独立计算后合并答案。
 
评估
RAG 实质上给 LLM 引入了一个新的环节:检索,这也可能成为一个瓶颈。检索结果的质量很重要,如果一些无关、或者低质量的上下文被检索到,LLM 会给出和幻觉无差别的低质量回答。
这里介绍了 Ragas 用来评测 RAG 的表现,评测分为两大类四个维度
- 生成,LLM 回答的质量。
- Faithfulness,生成回答的真实准确性。
 - Answer relevancy,生成回答和问题的相关性。
 
 - 检索,被检索文本和问题的相关性。
- Context precision,被检索内容的信噪比。
 - Context recall,能否检索出所有和问题相关的内容。
 
 
Fine-tuning
继续在更小、特定领域的数据集上训练,优化特定任务的表现和效率。
- 提高模型在特定任务上的表现。
- 不需要用 prompt 来规范模型的表现;和 few-shot learning 相比,你可以让模型充分学习相关的数据。
 
 - 提高模型的效率。
- 节省更多的上下文窗口,LLM 处理更快也更节省 token。
 - 可以让小模型在特定任务上达到更多参数模型的表现,而小模型的费用和延时更优。
 
 
优点
- 强化模型中已有的知识。
 - 自定义回答的结构或语气。
 - 让模型学会复杂的指令,避开复杂的 prompt engineering。
 
缺点
- 如果 prompt engineering 无法提高模型的表现,那么 fine-tuning 也不行。
 - 无法向基础模型中添加新知识。
 - 无法适应新使用场景。
 
例子
Canva 使用 fine-tuning 来规范 LLM 的输出格式。
一个博客作者使用 Slack 聊天记录来 fine-tuning LLM,期望 LLM 学会他的语气,但 LLM 实际上学会了他消极怠工的态度,因此高质量的 fine-tuning 数据很重要。
步骤
- 准备数据:收集、验证、格式化数据。
 - 训练:选择超参数、损失函数,注意 LLM 的损失函数是 next token prediction 任务的代理,但这和 LLM 负责的下游任务不一定有相关性,比如在代码生成中,你有很多方式来解决一个代码问题,而不需要生成的代码和标准答案完全匹配。
 - 评估:人工评估、LLM 评估。
 - 推理
 
最佳实践
- 先从 prompt engineering 和 few-shot learning 开始,确认 LLM 适合你的使用场景。
 - 确认性能基准,确保 fine-tuning 后的 LLM 表现可衡量可比较。
 - 从小数据集开始,注重数据质量,LLM 的训练过程已经解决了数据量的问题,fine-tuning 要着重注意数据质量。
 



