大模型 RAG 技术概览

本文深入介绍了检索增强生成(RAG)技术,详细阐述了从基础RAG到高级RAG的流程,包括数据分块、向量化、搜索索引、查询转换等关键步骤。RAG结合了搜索技术和大语言模型,通过检索信息来辅助生成答案,提高了问答和对话系统的性能。文章还探讨了编码器和LLM的微调方法,以及RAG系统的评估指标,为开发者提供了全面的RAG技术概览。
摘要由CSDN通过智能技术生成

本文对检索增强生成(Retrieval Augmented Generation, RAG)技术和算法进行了研究,对各种方法进行了系统性的梳理。涉及了 RAG 流程中的数据拆分、向量化、查询重写、查询路由等等。

介绍

如果你已经熟悉检索增强生成(Retrieval Augmented Generation, RAG)的概念,请直接跳转到高级 RAG 部分。

检索增强生成(Retrieval Augmented Generation, RAG)是一种技术,它通过从数据源中检索信息来辅助大语言模型(Large Language Model, LLM)生成答案。简而言之,RAG 结合了搜索技术和大语言模型的提示词功能,即向模型提出问题,并以搜索算法找到的信息作为背景上下文,这些查询和检索到的上下文信息都会被整合进发送给大语言模型的提示中。

截至2023年,以大型语言模型为基础的系统中,RAG框架已迅速崛起成为最备受欢迎的体系结构之一。众多产品几乎完全基于RAG构建,覆盖领域从整合网络搜索引擎和大型语言模型的问答服务,到数以百计的专注于“与数据对话”的应用程序。

即便在向量搜索领域,这一趋势也在推动发展,尽管早在2019年已经有了基于faiss构建的搜索引擎。像chroma、weavaite.io和pinecone这样的向量数据库初创公司是在现有的开源搜索索引基础上构建的,主要采用faiss和nmslib,它们最近还新增了对输入文本的额外存储和其他一些工具。

在以大型语言模型为基础的管道和应用领域,两个最著名的开源库分别是LangChain和LlamaIndex。它们分别于2022年10月和11月成立,相隔仅一个月。这两个库的创建受到了ChatGPT发布的启发,并在2023年取得了广泛的应用。

本文的宗旨在于系统整理并介绍关键的高级检索增强生成(Retrieval Augmented Generation, RAG)技术,并重点参考了 LlamaIndex 中的实现案例,以便于其他开发者更深入地掌握这项技术。
现存的问题是,大多数教程通常只选择介绍一两种技术的具体实现方法,而未能涵盖所有可用工具的丰富多样性。
另外,值得一提的是,LlamaIndex和LangChain都是极为出色的开源项目。它们发展迅速,以至于至今所累积的文档资料已比2016年的机器学习教科书还要庞大。

基础RAG

本文讨论的检索增强生成(Retrieval Augmented Generation, RAG)管道的起点是一系列文本文档。在此之前的所有内容,比如数据的获取和加载,都是由功能强大的开源数据加载工具完成的,这些工具可以连接到各种数据源,从Youtube到Notion都能涵盖。

基础 RAG 的操作流程大致如下:首先,你需要将文本切分成小段,然后利用某种 Transformer 编码器模型,将这些文本段转换成向量形式。接着,把所有向量汇集到一个索引里。最后,你需要为大语言模型(Large Language Model, LLM)制定一个提示词,这个提示词会指导模型根据我们在搜索步骤中找到的上下文信息来回答用户的查询。

在实际运行过程中,我们会用同一个编码器模型把用户的查询转换成向量,然后根据这个向量在索引中进行搜索。系统会找到最相关的前k个结果,从数据库中提取相应的文本段,然后把这些文本段作为上下文信息输入到大语言模型的提示词中。

提示词的具体形式可以是这样的:

def question_answering(context, query):
    prompt = f"""
                Give the answer to the user query delimited by triple backticks ```{query}```\
                using the information given in context delimited by triple backticks ```{context}```.\
                If there is no relevant information in the provided context, try to answer yourself, 
                but tell user that you did not have any relevant context to base your answer on.
                Be concise and output the answer of size less than 80 tokens.
                """

    response = get_completion(instruction, prompt, model="gpt-3.5-turbo")
    answer = response.choices[0].message["content"]
    return answer

在改进RAG管道的方法中,优化提示词(Prompt Engineering3)是最具成本效益的尝

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值