Navigate to WaytoAGI Wiki →
Home/Question List/Question Detail

搭建rag

Answer

搭建 RAG 主要包括以下步骤:

  1. 导入依赖库:加载所需的库和模块,如 feedparse 用于解析 RSS 订阅源,ollama 用于在 python 程序中跑大模型,使用前需确保 ollama 服务已开启并下载好模型。
  2. 从订阅源获取内容:通过特定函数从指定的 RSS 订阅 url 提取内容,若需接收多个 url 稍作改动即可。然后用专门的文本拆分器将长文本拆分成较小的块,并附带相关元数据,如标题、发布日期和链接,最终合并成列表返回用于后续处理。
  3. 为文档内容生成向量:使用文本向量模型 bge-m3,从 hf 下载好模型后放置在指定路径,通过函数利用 FAISS 创建高效的向量存储。
  4. 了解 RAG 概念:大模型训练数据有截止日期,当需要依靠不在训练集中的数据时,通过检索增强生成 RAG。RAG 应用可抽象为 5 个过程,包括文档加载(从多种来源加载)、文本分割(切成指定大小的块)、存储(嵌入转换为向量形式并存入向量数据库)、检索(通过检索算法找到相似嵌入片)、输出(问题和检索出的嵌入片提交给 LLM 生成答案)。
  5. LangChain 和 RAG 的结合:LangChain 是专注于大模型应用开发的平台,提供一系列组件和工具构建 RAG 应用。包括数据加载器(将数据转换为文档对象)、文本分割器(分割文档)、文本嵌入器(将文本转换为嵌入)、向量存储器(存储和查询嵌入)、检索器(根据文本查询返回相关文档对象)、聊天模型(生成输出消息)。使用 LangChain 构建 RAG 应用的一般流程如下。
Content generated by AI large model, please carefully verify (powered by aily)

References

本地部署资讯问答机器人:Langchain+Ollama+RSSHub 实现 RAG

|导入依赖库加载所需的库和模块。其中,feedparse用于解析RSS订阅源ollama用于在python程序中跑大模型,使用前请确保ollama服务已经开启并下载好模型|从订阅源获取内容下面函数用于从指定的RSS订阅url提取内容,这里只是给了一个url,如果需要接收多个url,只要稍微改动即可。然后,通过一个专门的文本拆分器将长文本拆分成较小的块,并附带相关的元数据如标题、发布日期和链接。最终,这些文档被合并成一个列表并返回,可用于进一步的数据处理或信息提取任务。|为文档内容生成向量这里,我们使用文本向量模型bge-m3。https://huggingface.co/BAAI/bge-m3bge-m3是智源研究院发布的新一代通用向量模型,它具有以下特点:支持超过100种语言的语义表示及检索任务,多语言、跨语言能力全面领先(M ulti-Lingual)最高支持8192长度的输入文本,高效实现句子、段落、篇章、文档等不同粒度的检索任务(M ulti-Granularity)同时集成了稠密检索、稀疏检索、多向量检索三大能力,一站式支撑不同语义检索场景(M ulti-Functionality)从hf下载好模型之后,假设放置在某个路径/path/to/bge-m3,通过下面函数,利用FAISS创建一个高效的向量存储。|实现RAG

手把手教你本地部署大模型以及搭建个人知识库

因为利用大模型的能力搭建知识库本身就是一个RAG技术的应用。所以在进行本地知识库的搭建实操之前,我们需要先对RAG有一个大概的了解。以下内容会有些干,我会尽量用通俗易懂的描述进行讲解。我们都知道大模型的训练数据是有截止日期的,那当我们需要依靠不包含在大模型训练集中的数据时,我们该怎么做呢?实现这一点的主要方法就是通过检索增强生成RAG(Retrieval Augmented Generation)。在这个过程中,首先检索外部数据,然后在生成步骤中将这些数据传递给LLM。我们可以将一个RAG的应用抽象为下图的5个过程:文档加载(Document Loading):从多种不同来源加载文档。LangChain提供了100多种不同的文档加载器,包括PDF在内的非结构化的数据、SQL在内的结构化的数据,以及Python、Java之类的代码等文本分割(Splitting):文本分割器把Documents切分为指定大小的块,我把它们称为“文档块”或者“文档片”存储(Storage):存储涉及到两个环节,分别是:将切分好的文档块进行嵌入(Embedding)转换成向量的形式将Embedding后的向量数据存储到向量数据库检索(Retrieval):一旦数据进入向量数据库,我们仍然需要将数据检索出来,我们会通过某种检索算法找到与输入问题相似的嵌入片Output(输出):把问题以及检索出来的嵌入片一起提交给LLM,LLM会通过问题和检索出来的提示一起来生成更加合理的答案[heading2]文本加载器(Document Loaders)[content]文本加载器就是将用户提供的文本加载到内存中,便于进行后续的处理

开发:LangChain应用开发指南-大模型的知识外挂RAG

LangChain是一个专注于大模型应用开发的平台,它提供了一系列的组件和工具,帮助你轻松地构建RAG应用。LangChain提供了以下的组件来帮助你构建RAG应用:数据加载器(DocumentLoader):数据加载器是一个对象,可以从一个数据源加载数据,并将其转换为文档(Document)对象。一个文档对象包含两个属性:page_content(str)和metadata(dict)。page_content是文档的文本内容,metadata是文档的元数据,例如标题、作者、日期等。文本分割器(DocumentSplitter):文本分割器是一个对象,可以将一个文档对象分割成多个较小的文档对象。这样做的目的是为了方便后续的检索和生成,因为大模型的输入窗口是有限的,而且在较短的文本中更容易找到相关的信息。文本嵌入器(Embeddings):文本嵌入器是一个对象,可以将文本转换为嵌入(Embedding),即一个高维的向量。文本嵌入可以用来衡量文本之间的相似度,从而实现检索的功能。向量存储器(VectorStore()):向量存储器是一个对象,可以存储和查询嵌入。向量存储器通常使用一些索引技术,例如Faiss()或Annoy,来加速嵌入的检索。检索器(Retriever):检索器是一个对象,可以根据一个文本查询返回相关的文档对象。检索器的一种常见实现是向量存储器检索器(VectorStoreRetriever),它使用向量存储器的相似度搜索功能来实现检索。聊天模型(ChatModel):聊天模型是一个对象,可以根据一个输入序列生成一个输出消息。聊天模型通常基于大模型,例如GPT-3,来实现文本生成的功能。使用LangChain构建RAG应用的一般流程如下:

Others are asking
RAG
RAG(RetrievalAugmented Generation,检索增强生成)是一种结合检索和生成能力的自然语言处理架构。 通用语言模型通过微调可完成常见任务,而更复杂和知识密集型任务可基于语言模型构建系统,访问外部知识源来实现。Meta AI 研究人员引入 RAG 来完成这类任务,它将信息检索组件和文本生成模型结合,可微调且内部知识修改高效,无需重新训练整个模型。 RAG 接受输入后会检索相关支撑文档并给出来源,与原始提示词组合后送给文本生成器得到最终输出,能适应事实随时间变化的情况,让语言模型获取最新信息并生成可靠输出。 LLM 存在一些缺点,如无法记住所有知识尤其是长尾知识、知识容易过时且不好更新、输出难以解释和验证、容易泄露隐私训练数据、规模大导致训练和运行成本高。而 RAG 具有数据库存储和更新稳定、数据更新敏捷且可解释、降低大模型输出出错可能、便于管控用户隐私数据、降低大模型训练成本等优点。 在 RAG 系统开发中存在 12 大痛点及相应的解决方案。
2025-02-24
rag 模型微调
RAG(检索增强生成)模型微调相关知识如下: 通用语言模型通过微调可完成常见任务,如分析情绪和识别命名实体。对于更复杂和知识密集型任务,可基于语言模型构建系统并访问外部知识源。Meta AI 引入的 RAG 方法把信息检索组件和文本生成模型结合,可微调且内部知识修改高效,无需重新训练整个模型。 RAG 接受输入并检索相关支撑文档,给出来源,与输入原始提示词组合后送给文本生成器得到输出,能适应事实变化,获取最新信息并生成可靠输出。 通用的 RAG 微调方法如 Lewis 等人(2021)提出的,使用预训练的 seq2seq 作为参数记忆,用维基百科的密集向量索引作为非参数记忆。 在微调阶段: 检索器微调的常用方法包括直接微调、添加可训练的 Adapter 模块、LSR、LLM Reward RL。 生成器微调的主要方法包括直接微调、GPT4 蒸馏、基于反馈的强化学习。 协同微调是在 RAG 系统中同时对检索器和生成器进行微调,如 RADIT 分别对 LLM 和检索器进行微调。 同时,RAG 提高了嵌入模型质量,传统 RAG 解决方案中的问题也得到解决。
2025-02-24
siliconflow可以搭建rag知识库吗
SiliconFlow 本身并不能直接搭建 RAG 知识库。但一般搭建 RAG 知识库的步骤通常包括以下方面: 1. 准备数据:收集需要纳入知识库的文本数据,包括文档、表格等格式,并对数据进行清洗、分段等预处理,确保数据质量。 2. 创建知识库: 访问相关平台的知识库索引,如阿里云百炼,单击创建知识库。在创建知识库界面填入知识库名称与描述。 选择文件,类目位置单击默认类目,文件名称选择准备好的数据文件。 进行数据处理,使用默认的智能切分或根据需求选择合适的处理方式。 3. 配置相关设置:如在 Dify 中提供了三种索引方式供选择,包括高质量模式、经济模式和 Q&A 分段模式,可根据实际需求选择合适的索引方式。 4. 集成至应用:将创建好的数据集集成到相应的应用中,作为应用的上下文知识库使用,并在应用设置中配置数据集的使用方式。 5. 持续优化:收集用户反馈,对知识库内容和索引方式进行持续优化和迭代,定期更新知识库,增加新的内容以保持时效性。 需要注意的是,不同的平台和工具在具体操作上可能会有所差异。
2025-02-24
RAG是什么
RAG(RetrievalAugmented Generation)即检索增强生成,是一种结合检索和生成能力的自然语言处理架构,旨在为大语言模型(LLM)提供额外的、来自外部知识源的信息。 大模型需要 RAG 进行检索优化,是因为大模型存在一些缺点,如: 1. 无法记住所有知识,尤其是长尾知识,受限于训练数据和学习方式,对长尾知识的接受能力不高。 2. 知识容易过时且不好更新,微调效果不佳且有丢失原有知识的风险。 3. 输出难以解释和验证,存在内容黑盒、不可控及受幻觉干扰等问题。 4. 容易泄露隐私训练数据。 5. 规模大,训练和运行成本高。 而 RAG 具有以下优点: 1. 数据库对数据的存储和更新稳定,不存在模型学不会的风险。 2. 数据库的数据更新敏捷,可解释,且对原有知识无影响。 3. 数据库内容明确、结构化,加上模型的理解能力,能降低大模型输出出错的可能。 4. 便于管控用户隐私数据,且可控、稳定、准确。 5. 可降低大模型的训练成本,新知识存储在数据库即可,无需频繁更新模型。 RAG 的核心流程是根据用户提问,从私有知识中检索到“包含答案的内容”,然后把“包含答案的内容”和用户提问一起放到 prompt(提示词)中,提交给大模型,此时大模型的回答就会充分考虑到“包含答案的内容”。其最常见应用场景是知识问答系统。 一个 RAG 的应用可抽象为 5 个过程: 1. 文档加载:从多种不同来源加载文档。 2. 文本分割:把文档切分为指定大小的块。 3. 存储:包括将切分好的文档块进行嵌入转换成向量的形式,以及将向量数据存储到向量数据库。 4. 检索:通过检索算法找到与输入问题相似的嵌入片。 5. 输出:把问题以及检索出来的嵌入片一起提交给 LLM,LLM 会通过问题和检索出来的提示生成更合理的答案。
2025-02-24
关于RAG和知识库的应用
RAG(检索增强生成,Retrieval Augmented Generation)是一种利用大模型能力搭建知识库的技术应用。当需要依靠不包含在大模型训练集中的数据时,可通过该技术实现。 RAG 的应用可抽象为以下 5 个过程: 1. 文档加载(Document Loading):从多种不同来源加载文档,如 PDF 等非结构化数据、SQL 等结构化数据以及 Python、Java 之类的代码等。LangChain 提供了 100 多种不同的文档加载器。 2. 文本分割(Splitting):文本分割器把 Documents 切分为指定大小的块,称为“文档块”或“文档片”。 3. 存储(Storage):涉及两个环节,一是将切分好的文档块进行嵌入(Embedding)转换成向量的形式,二是将 Embedding 后的向量数据存储到向量数据库。 4. 检索(Retrieval):数据进入向量数据库后,通过某种检索算法找到与输入问题相似的嵌入片。 5. Output(输出):把问题以及检索出来的嵌入片一起提交给 LLM,LLM 会通过问题和检索出来的提示生成更加合理的答案。 离线数据处理的目的是构建知识库这本“活字典”,知识会按照某种格式及排列方式存储在其中等待使用。在线检索则是利用知识库和大模型进行查询的过程。以构建智能问答客服为例,可了解 RAG 所有流程中的 What 与 Why。 相关资源: 文本加载器:将用户提供的文本加载到内存中,便于后续处理。 海外官方文档:https://www.coze.com/docs/zh_cn/knowledge.html 国内官方文档:https://www.coze.cn/docs/guides/use_knowledge
2025-02-24
ragflow
RAGflow 能力拆解: 文档拆分方式: 通用模式:主要参考每个块的 token 数量,同时考虑语意完整性,切分段落点通常在句号或叹号等完整句子结束处。拆分结果和 langchain 的拆分大同小异。 Q&A 问答对:将左边内容加上“问题:”,右边内容加上“回答:”,数据清洗工作量大。 简历:解析容易失败,需要匹配关键词才能解析,建议官方给出简历模板。 手册:一整段文字提取,分割处在页面分页、段落分段处,块大小通常较大。 表格:拆分后每一行被当成一个块,第一行的表头插入到每一块头部。对没有特殊字符的表格信息处理较好,对图片内的公式做了 OCR 检测。 数据清洗:RAGflow 提供分段后的数据处理,可自行添加、修改数据或为数据加标签。测试发现,RAGflow 召回会同时使用向量相似度和关键词相似度并加权得到混合相似度,关键词相似度不仅匹配文本段内容还匹配关键词标签内容,单个实体在关键词中出现即为 100%。需要在检索获得的内容块中同时包含“问题信息”和“答案信息”,大模型才能解答。RAGflow 没提供对外接口,做聊天或其他应用时不方便。 大模型 RAG 问答行业最佳案例及微调、推理双阶段实现模式:基于模块化RAG 自定义 RAG Flow: 原创刘焕勇老刘说 NLP 于 2024 年 1 月 29 日 18:31 发表于北京。在上一篇文章中介绍了模块化RAG 的相关工作,重点论述了每个模块中的构成细节。本文将从三个方面深入探讨 RAG Flow 的设计思路,分别是典型的 RAG Flow 模式、特定的 RAG 流实现以及最佳的行业案例。在典型的 RAG Flow 模式方面,将介绍 3 种微调阶段模式和 4 种推理阶段模式供大家参考思考。
2025-02-22
搭建个人知识库
以下是关于如何搭建个人知识库的详细介绍: 要搭建基于 GPT API 的定制化知识库,首先需要给 GPT 输入(投喂)定制化的知识。但 GPT3.5(即当前免费版的 ChatGPT)一次交互(输入和输出)只支持最高 4096 个 Token,约等于 3000 个单词或 2300 个汉字,这个容量对于绝大多数领域知识是不够的。为解决此问题,OpenAI 提供了 embedding API 解决方案,可参考 OpenAI embedding documents。 embeddings(直译为嵌入)是一个浮点数字的向量(列表)。两个向量之间的距离衡量它们的关联性,小距离表示高关联度,大距离表示低关联度。向量是数学中表示大小和方向的一个量,通常用一串数字表示,在计算机科学和数据科学中,向量通常用列表(list)来表示,列表是一种包含一组有序元素的数据结构。向量之间的距离是一种度量两个向量相似性的方法,最常见的是欧几里得距离,其计算方法是将两个向量的对应元素相减,然后取平方和,再开平方。在 OpenAI 词嵌入中,靠近向量的词语在语义上相似,例如“猫”和“狗”距离近,它们都是宠物,与“汽车”距离远,相关性低。文档上给了创建 embeddings 的示例。 将文本转换成向量能大大节省空间,可简单理解为索引,发送给 GPT API。 LlamaIndex 是更高一层 LangChain 的抽象,之前叫 GPT Index。之前的文章中的例子就是使用的 LlamaIndex 包。它简化了 LangChain 对文本分割、查询这块的接口,提供了更丰富的 Data Connector。LlamaIndex 只针对 GPT Model 做 Index,而 LangChain 是可以对接多个 LLMs,可扩展性更强。参考 https://gptindex.readthedocs.io/en/latest/ 。 最近各家大厂接连放大招,AI 技术和应用突飞猛进,GPT4 接口已经支持最大 32K 输入,AI 的开发和使用门槛肯定会越来越低。垂直领域知识库的搭建和优化可能更多的是一个业务问题,而不是一个技术问题。欢迎关注公众号“越山集”,多交流。
2025-02-24
如何搭建 知识库
以下是搭建知识库的相关内容: 使用 Dify 构建知识库的步骤: 1. 准备数据:收集纳入知识库的文本数据,包括文档、表格等格式,进行清洗、分段等预处理以确保数据质量。 2. 创建数据集:在 Dify 中创建新数据集,上传准备好的文档,并编写良好的描述。 3. 配置索引方式:Dify 提供三种索引方式,根据实际需求选择,如追求更高准确度可选高质量模式。 4. 集成至应用:将数据集集成到 Dify 的对话型应用中,在应用设置中配置数据集使用方式。 5. 持续优化:收集用户反馈,对知识库内容和索引方式持续优化和迭代,定期更新增加新内容。 使用 Coze 智能体机器人搭建知识库的步骤: 1. 手动清洗数据:本次创建知识库使用手动清洗数据,提高数据准确性。 2. 在线知识库:点击创建知识库,创建画小二课程的 FAQ 知识库,飞书在线文档中每个问题和答案以分割,选择飞书文档、自定义,输入,可编辑修改和删除,添加 Bot 并在调试区测试效果。 3. 本地文档:注意拆分内容提高训练数据准确度,将海报内容训练到知识库,按章节进行人工标注和处理,选择创建知识库自定义清洗数据。 4. 发布应用:点击发布,确保在 Bot 商店中能搜到。 本地部署大模型以及搭建个人知识库中关于 RAG 的介绍: 利用大模型的能力搭建知识库是 RAG 技术的应用。在进行本地知识库搭建实操前,需先了解 RAG。RAG 是当需要依靠不包含在大模型训练集中的数据时,通过检索增强生成的技术。其应用可抽象为 5 个过程:文档加载、文本分割、存储(包括将文档块嵌入转换成向量形式并存储到向量数据库)、检索、输出(把问题及检索出的嵌入片提交给 LLM 生成更合理答案)。文本加载器是将用户提供的文本加载到内存中以便后续处理。
2025-02-24
想要搭建属于自己的知识库应该用什么软件
以下是一些可用于搭建个人知识库的软件及相关信息: 1. Coze 或 FastGPT 等工具:在当下技术条件下,其 RAG 能力对问答场景较友好,其他场景效果一般。若需企业级复杂知识库场景,可能需找专业团队,收费几万到几十万不等。 2. 推荐文章《手把手教你本地部署大模型以及搭建个人知识库》中提到的 AnythingLLM 软件: 包含所有 Open WebUI 的能力,并额外支持选择文本嵌入模型和向量数据库。 安装地址:https://useanything.com/download 。安装完成后进入配置页面,主要分为三步:选择大模型、选择文本嵌入模型、选择向量数据库。 该软件中有 Workspace 的概念,可创建独有 Workspace 与其他项目数据隔离,包括创建工作空间、上传文档并进行文本嵌入、选择对话模式(Chat 模式和 Query 模式),配置完成后可进行对话测试。 3. 基于 GPT API 搭建定制化知识库:涉及给 GPT 输入定制化知识,因 GPT3.5 交互容量有限,OpenAI 提供了 embedding API 解决方案,可参考 OpenAI embedding documents 理解 embeddings 相关知识。
2025-02-23
coze的进阶教程有哪些,我需要有整个的搭建过程教程的,可以是共学活动里面的
以下是一些 Coze 的进阶教程和搭建过程的资源: 5 月 7 号():大聪明分享,主题为“Agent 的前世今生”,每个分享人分享最初接触 Coze 的经历以及现在用 Coze 做什么。流程为 20:00@🌈AJ 主持开场,20:00 21:00 大聪明分享,21:00 21:30 关于 Coze 随便聊聊。 5 月 8 号():大圣分享,主题为“我眼中的 AI Agent 以及通过搭建知识库实例入门 Coze”,20:00 21:20 大圣分享。 5 月 9 号():艾木分享,主题为“Agent 系统的核心构成:Workflow 和 Multiagent Flow(以‘Dr.Know’和‘卧底’为例),线上答疑。流程为 20:00 21:00 艾木分享,21:00 21:30 线上答疑。 5 月 10 号():罗文分享,主题为“一个方法解锁 COEZ 所有插件的用法+如何自动化解锁每天抓取 X 内容+改写+发布到飞书”,20:00 21:00 罗文分享。 5 月 11 号():Itao 分享,主题为“和 AI 成为搭子”,线上答疑。流程为 20:00 21:00 Itao 分享,21:00 21:30 线上答疑。 此外,还有以下案例合集和教程:
2025-02-22
如何搭建自己的知识库
搭建自己的知识库可以参考以下步骤: 1. 了解 RAG 技术: 利用大模型的能力搭建知识库是 RAG 技术的应用。 大模型训练数据有截止日期,当需要依靠不在训练集中的数据时,可通过检索增强生成 RAG 实现。 RAG 应用包括文档加载、文本分割、存储、检索和输出 5 个过程。 文档加载:从多种来源加载文档,如 PDF 等非结构化数据、SQL 等结构化数据及代码。 文本分割:把文档切分为指定大小的块。 存储:包括将切分好的文档块嵌入转换成向量形式,并将向量数据存储到向量数据库。 检索:通过检索算法找到与输入问题相似的嵌入片。 输出:把问题及检索出来的嵌入片提交给 LLM 生成答案。 2. 文本加载器:将用户提供的文本加载到内存中,便于后续处理。 3. 基于 GPT API 搭建: 涉及给 GPT 输入定制化知识,但 GPT3.5 一次交互支持的 Token 有限。 OpenAI 提供了 embedding API 解决方案,embeddings 是浮点数字的向量,向量间距离衡量关联性,小距离表示高关联度。 4. 本地知识库进阶: 可使用额外软件 AnythingLLM,其包含 Open WebUI 的能力,并支持选择文本嵌入模型和向量数据库。 安装地址:https://useanything.com/download 。安装完成后进入配置页面,主要分为三步:选择大模型、选择文本嵌入模型、选择向量数据库。 在 AnythingLLM 中创建 Workspace 构建本地知识库,包括创建工作空间、上传文档并进行文本嵌入、选择对话模式(Chat 模式综合给出答案,Query 模式仅依靠文档数据给出答案),最后进行测试对话。 总之,搭建知识库需要不断实践和探索,“看十遍不如实操一遍,实操十遍不如分享一遍”。
2025-02-20