
Gemini
提示工程(Prompt Engineering)是改善RAG管道性价比最高的方法。你得先全面查看OpenAI的提示工程指南。虽说OpenAI在大型语言模型(LLM)供应商里是市场领导者,但也有不少其他选择。像Anthropic的Claude,还有虽小却功能强大且最近流行起来的模型,例如Mistral推出的Mixtral,微软的Phi - 2,以及很多开源的选项,如Llama2、OpenLLaMA、Falcon等,这样你就能为RAG管道挑选到合适的大模型了。现在我们要深入探究高级RAG技术的概况。这一方案会阐述核心步骤与相关算法,为保证方案的可读性,一些逻辑循环和复杂的多步骤代理行为被省略。
2.1 向量储存索引。

OpenAI
在LangChAIn里,Ensemble Retriever类实现了相关操作,它会把你定义好的检索器列表进行结合,像fAIss矢量索引检索器和基于BM25的检索器等,并且用RRF重新排名。LlamAIndex中也是以极为相似的方式来做这件事的。混合或者融合搜索往往能给出更好的检索结果,这是因为它把两种互补的搜索算法结合起来了,同时兼顾了查询与存储文档之间的语义相似性和关键字匹配。
现在该学习更复杂的RAG技术了,像查询转换和路由。这些技术都与LLM有关,体现着代理行为,也就是RAG管道中涉及LLM推理的复杂逻辑。查询转换属于一系列技术,其以LLM为推理引擎来修改用户输入,提升检索质量,有多种实现此目的的选择。
还有像ReAct Agent之类的其他聊天引擎类型,不过咱们跳到第7节的代理本身吧。查询路由是大型语言模型(LLM)支持的一种决策步骤,其功能是依据给定的用户查询来确定下一步的操作。这些操作选项一般包括进行总结、针对特定数据索引展开搜索,或者尝试多种不同路由然后把输出整合为一个答案。查询路由器还可用于选择索引或者更广泛的数据存储,也就是决定将用户查询发送到哪里。这一需求可能源于存在多个数据源,比如经典向量存储、图形数据库或者关系数据库;也可能是因为有索引的层次结构,在多文档存储中,一个常见的情况是存在摘要索引和另一个文档块向量索引。定义查询路由器需要设定它可做出的选择。路由选项的选择通过LLM调用执行,以预定义格式返回结果,这个结果可用于将查询路由到特定索引;或者在类似关联行为中,路由到子链,甚至像多文档代理方案图所示的其他代理。LlamAIndex和LangChAIn都对查询路由器提供支持。
从图片能猜到这种复杂方案的缺点,我们代理内部的LLM要多次来回迭代,所以速度有点慢。要知道,LLM调用在RAG管道里向来是最耗时的操作,而搜索在设计上是优化了速度的。所以对于存有大量文档的情况,我建议简化这个方案,让它能够扩展。
我对编码器的微调(funetuning)方法也存在一些疑虑,毕竟针对搜索优化的最新Transformer编码器效率极高。于是,我在LlamAIndex笔记本设置里测试了微调bge - large - en - v1.5(在撰写本文时,其在MTEB排行榜位居前4名)所能带来的性能提升,测试结果表明检索质量提升了2%。虽然提升幅度不大,但能了解这个选项还是很不错的,尤其是在为其构建用于RAG(检索增强生成)的窄域数据集时。
要是您知晓RAG的LLM微调的更佳方法,欢迎在评论区分享您的专业知识,尤其是应用于较小开源LLM的方法。
我想对RAG(检索增强生成)的核心算法方法进行概述,并且举些例子来说明部分方法。希望这能启发一些新的思路,供大家在自己的RAG管道中尝试,或者给我在2023年发明的各项技术带来一些启发。2023年可是到目前为止机器学习(ML)领域最令人兴奋的一年。还有许多其他方面需要考量,像基于网络搜索的RAG(由LlamAIndex、webLangChAIn等提供的RAG),深入探究代理架构(以及OpenAI近期在这方面的投入),还有关于大型语言模型(LLM)长期记忆的一些思考。RAG系统在生产中的主要挑战是速度,除了答案的相关性和准确性之外,尤其是在采用更灵活的基于代理的方案时,但这是另一篇文章要探讨的内容。ChatGPT和大多数其他助手所使用的流媒体功能并非是随意的赛博朋克风格,而只是一种缩短感知答案生成时间的方法。这也是我认为较小的LLM有着非常光明的未来的原因,最近发布的Mixtral和Phi - 2正引领我们朝着这个方向发展。
Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号