1. 提示词设计
提示词设计是应用LLM的重要起点。设计有效的提示词可以显著提升模型的性能,但这不仅仅是几句话的问题,而是需要结合大量的工程工作。
- 充分利用基本提示技巧:
- n-shot 提示:通过提供一些示例来展示任务要求,引导模型输出符合预期的结果。示例应具有代表性,n 值通常不小于5。
- 链式思维(CoT):让LLM解释其思维过程。可以通过添加短语“让我们一步一步思考”来引导模型逐步推理。
- 提供相关资源:通过检索增强生成(RAG)为模型提供直接利用的文本片段,并指导模型优先使用这些资源。
- 结构化输入和输出:
- 使用序列化格式提供输入,帮助模型理解上下文中的关系和元数据。
- 结构化输出简化了与系统下游组件的集成,提高了可靠性和可扩展性。
- 设计简洁提示词:
- 避免提示词过于复杂,保持简洁和专注。可以将复杂任务拆分为多个简单步骤,提高性能和可理解性。
2. 信息检索/RAG
通过检索增强生成(RAG),将外部知识融入模型,提高其响应质量。RAG在提供知识、减少幻觉方面表现出色,且比微调模型成本低。
- 评估文档质量:
- 相关性:通过排名指标如MRR和NDCG量化检索文档的相关性。
- 信息密度:更简洁且没有多余细节的文档更优。
- 细节程度:提供更多细节可以帮助模型更好地理解任务。
- 混合方法:
- 结合关键字搜索和嵌入搜索,既能处理具体查询,又能捕捉语义相似性。
- 优先使用RAG而不是微调:
- 研究表明,RAG在整合新知识和提升任务性能方面比微调更有优势,且维护成本更低。
3. 调整和优化工作流
提示LLM只是开始,优化工作流是关键。
- 逐步、多回合的“流”:
- 将复杂任务拆分为多个简单任务,按步骤执行,提高可靠性和效率。
- 明确计划步骤,确保每一步都有明确目标和具体计划。
- 确定性工作流:
- 生成确定性计划并按计划执行,使系统更可靠、可预测。
- 计划可以作为少样本示例提示或微调Agent,提高其性能。
- 超越temperature:
- 通过调整提示中的元素或改变措辞,增加输出多样性,而不仅仅依赖调整temperature参数。
4. 缓存和微调
缓存和微调是提高系统性能和降低成本的重要策略。
- 缓存:
- 缓存可以节省成本,并减少生成延迟。使用唯一ID或规范化用户输入提高缓存命中率。
- 微调:
- 当提示工程无法满足任务需求时,可以考虑微调模型,但需评估其成本和收益。
- 可以使用合成数据或开源数据降低微调成本。
5. 评估和监控
严格和深思熟虑的评估至关重要。
- 创建基于断言的单元测试:
- 使用生产环境中的输入输出示例,基于至少三个标准对输出进行评估。
- 使用LLM-as-Judge:
- 在成对比较和链式思考中,LLM-as-Judge可以有效评估其他LLM的输出,但需控制位置偏差和允许平局。
通过这些方法和策略,我们可以更好地设计、优化和评估基于LLM的产品,确保其在实际应用中的可靠性和性能。