以下是关于优化大模型+知识库的提示词技巧,以解决将知识库配置给大模型做 RAG 后召回率不高或者不遵循指令的问题:
首先,了解 LLM 应用性能优化的推荐路径:
需要注意的是,该路径有个隐藏前提:该 LLM 应用依赖外部知识,需要 RAG。若不需要外部知识,则不需要使用 RAG,可以直接进入 prompt 工程与微调的正向迭代循环。
对于 RAG 流程中的检索有用信息部分,有以下改进策略:
在从知识库中检索出内容后利用大模型进行总结时,有两点需要注意:
如图给出了LLM应用性能优化的推荐路径。图中英文版prompt->Add few shot->Add simple retrieval->Fine-tune model->Add HyDE retrieval+fact-checking step->Add RAG content to training examples.翻译翻译:prompt工程->进阶prompt工程->简单RAG->微调模型->进阶RAG->带着RAG样本微调模型再翻译翻译,说人话:先从prompt工程开始把LLM应用快速跑起来。如果遇到各种问题,如表现性能不足,试着使用思维链,添加参考示例等进一步的prompt工程提升性能,如果prompt过长,试着精简prompt长度,把prompt工程做扎实。比如有许多朋友基于LangGPT结构化提示词快速的搭建了LLM应用,但是发现结构化提示词占用的上下文过长,这时可以尝试将提示词中不必要的部分删除,将提示词缩短,如果发现指令遵循度不足,则加强指令约束。如果提示工程能够满足要求,则到此为止即可。若不能,则按上面的两个维度分析问题。如果缺失知识,则先简单的做知识库RAG,RAG之后如果想让模型表现更收敛更稳定,尝试一下finetune模型。finetune模型后,模型表现变好,使用更多高级RAG技术,构造输入输出样本,进一步用于finetune模型,让模型表现进一步变好,构建正向迭代循环。需要注意的几个点:(1)这个路径有个隐藏的前提:该LLM应用依赖外部知识,需要RAG。如果不需要外部知识,则不需要使用RAG,可以直接进入prompt工程<—>微调的正向迭代循环。
大体上大模型+RAG流程上有2部分,第一步是检索出有用的信息,第二步是发给大模型,并结合用户的一些提问和prompt,让大模型生成高质量的内容。对于第二步,效果的好坏一是基于大模型本身的效果,和提示词工程的优劣。这2部分内容较为庞杂后续再另开帖子描述。先针对第一步检索有用的信息如何改进,提出相关建议。检索做得好,离不开索引,那如何优化索引成为第一步。3.1优化索引框架中的默认索引查找最相似的向量块。优化方式(一)按照子部分索引将文本块再拆分为较小的文本(例如单句),然后对这些小块进行多次索引适用场景:有多个主题,有冲突信息的复杂长文本信息。确保与查询相关的上下文。(二)按照文本框可以回答的问题索引让LLM生成与拆分的文本块相关的假设性问题,并将这些问题用于索引,而不是直接对整个块进行索引。适用场景:用户没有提出非常明确的问题,该方法可以减少模糊性。问题举荐,根据这个文档,提出3个假设性用户会询问的问题。(三)按照文本块的摘要进行索引适用场景:文本框中有多余信息或者与用户查询无关细节的时候。这种方法比较有用。3.2重排rerank搜到了最相似的信息,那我选哪个呢?这个都是策略。有的默认的取TOP 10,TOP 25,等。大部分场景下选择最相似的就没有问题。
当从知识库中检索出内容之后,我们就可以利用大模型进行总结了,这里我们可以选择的有两点优化Prompt选择合适的大模型优化Prompt这里就不展开了,因为提示词工程对于当下AI时代的重要性,我已经讲过太多次了,如果你想要学习提示词,请参考以下文章https://www.waytoagi.com/prompts?tag=7[Prompts共学快闪活动](https://waytoagi.feishu.cn/wiki/X59gwGdzginQgJkfVvQcqKZfn4e?from=from_copylink)而选择合适的大模型有两点需要考虑:上下文长度聪明度生成速度如果你的回答场景都是很长的文档,那么你可能会更关注上下文的长度另外:大多数情况下,大模型越聪明,其生成速度可能越慢。