RAG学习路线(非常详细),从零基础入门到精通,从看这篇开始!

github上的代码封装程度高,不利于小白学习入门。

常规的大模型RAG框架有langchain等,但是langchain等框架源码理解困难,debug源码上手难度大。

因此,我写了一个人人都能看懂、人人都能修改的大模型RAG框架代码。

我将分5个章节来介绍它,分别为:

  1. 如何调用大模型API
  2. RAG背景介绍
  3. 依赖环境安装
  4. 知识库构建
  5. 基于知识库的大模型问答

本篇文章讲RAG背景介绍

一、为什么要用RAG?

LLM会产生误导性的 “幻觉”,训练数据会过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。

正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generation,RAG)应时而生,成为大模型时代的一大趋势。

RAG通过在语言模型生成答案之前,先从广泛的专业文档数据库中检索相关信息,然后利用这些专业信息来引导大模型生成的结果,极大地提升了内容的准确性和相关性。

RAG有效地缓解了幻觉问题,提高了知识更新的速度(大模型+搜索引擎),并增强了内容生成的可追溯性,使得大型语言模型在实际应用中变得更加实用和可信。

二、RAG的技术路线

RAG整体技术路线可分为3大块8个小点见图1,其中包含知识库构建、知识检索和知识问答。其中核心在于知识库构建

img

图1. RAG技术路线

知识库的构建

由图1可知涉及4个小点,分别为:文件预处理、文件切分、向量化和构建索引。

1.文件预处理

输入:原始文件(比如pdf、word等非结构化数据)

输出:纯文本

技术手段:pdf、word解析器,也涉及表格转文本、图片OCR等技术。

2.文件切分

文件预处理后,由于大模型的输入token的限制(因为不可能一次性将所有文件,一次输入大模型),需要对文本分段。

技术手段:一般采用识别\n字符的方式分段。

 lines = text.split('\n')

3.向量化

将文本、图像、音频和视频等转化为向量矩阵的过程,也就是变成计算机可以理解的格式。

输入:分段后的文本

输出:向量化后的向量组

技术手段:通过远程调用智谱、OpenAI的embedding模型。

输出结果展示:

img

image

4.构建索引

段落向量化后,我们需要构建索引,为后续快速向量匹配打下基础。当然,我们也可以不构建索引,写一个for循环挨个匹配,消耗时间长一点而已。

后续这个小项目没有设置索引,大家如果感兴趣可以引入ES、向量数据库等工具。

向量匹配

由图1可知向量匹配涉及2个小点,分别为:向量化、知识库检索。

1. 向量化

知识库构建完成后,用户输入一个问题,需要对用户的问题向量化。这里的向量化需要和上面知识库构建里面的向量化所使用到的模型保持一致。

2. 知识库检索

一般根据实际需求,用户输入的问题会匹配到top k个结果。k是一个超参数,用户提供。

匹配的算法一般采用欧氏距离、曼哈顿距离、余弦等。

后续小项目中,我们采用最简单的余弦相似度来衡量向量之间的相似度。

余弦相似度公式:

img

余弦相似度公式

  def cosine_similarity(cls, vector1: List[float], vector2: List[float]) -> float:
        """
        calculate cosine similarity between two vectors
        """
        dot_product = np.dot(vector1, vector2)
        magnitude = np.linalg.norm(vector1) * np.linalg.norm(vector2)
        if not magnitude:
            return 0
        return dot_product / magnitude

知识问答

由图1可知涉及2个小点,分别为:调用提示工程模板、调用大模型LLM。

1. 提示工程模板设计

输入:用户输入的问题、知识库中得到top k个相关的段落。

输出:结合提示工程模板,将用户输入的问题、知识库中得到top k个相关的段落组成一个完成的context。

RAG_PROMPT_TEMPALTE="""使用以上下文来回答用户的问题。如果你不知道答案,就说你不知道。总是使用中文回答。
        问题: {question}
        可参考的上下文:
        ···
        {context}
        ···
        如果给定的上下文无法让你做出回答,请回答数据库中没有这个内容,你不知道。
        有用的回答:"""

其中question就是用户问题,context是top k个相关的段落。

所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

### RAG技术基本原理 检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合了传统检索技术和现代生成模型的方法。该方法旨在解决大语言模型(LLM)存在的若干问题,比如缺乏最新信息更新能力以及对于特定领域知识覆盖不足等问题[^1]。 具体而言,在面对一个问题或提示时,RAG首先会执行一次文档检索操作,从预先构建的知识库中找到最有可能包含有用信息的相关片段;随后,这些被选中的片段作为额外输入传递给下游的任务导向型生成器,帮助其更好地理解上下文并据此创建更加精准且富含细节的回答[^2]。 这种机制不仅使得系统可以即时访问到最新的资料,而且还能有效减少对大规模标注数据集的需求,提高了灵活性和实用性[^3]。 ### 发展趋势分析 随着研究不断深入和技术进步,未来几年内可以看到以下几个主要发展方向: #### 更高效的多模态融合 目前大多数工作集中在文本形式的信息源上,而实际上很多应用场景涉及多媒体内容如图片、音频甚至视频等形式的数据。因此,开发能够同时处理多种感官信号的iRAG框架将是重要的探索方向之一。 #### 自动化与智能化程度提升 为了进一步降低人工干预成本,提高系统的自适应性和鲁棒性,预计会有更多关于如何让机器自动学习最优检索策略的研究成果涌现出来。这可能涉及到强化学习算法的应用或是元学习(meta-learning)概念下的新型架构设计等方面的工作。 #### 集成更广泛可信度高的第三方API服务 除了内部维护的小规模专有数据库外,开放平台上的高质量公共资源也将成为扩充外部记忆模块的重要组成部分。借助于诸如维基百科这样的权威站点所提供的接口,可以使最终输出具备更高的可靠性和准确性。 ```python import dspy # Hypothetical library for implementing RAG with DSPy def rag_pipeline(query): retrieved_docs = dspy.retrieve_documents(query) generated_response = dspy.generate_text(retrieved_docs, query) return generated_response ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值