【必学收藏】检索增强生成(RAG)实战:让大模型利用外部知识提升回答准确性

在人工智能领域,如何有效结合大型语言模型(LLM)的常识性知识与特定的专有数据,一直是业界探索的热点。微调(Fine-tuning)与检索增强生成(Retrieval-Augmented Generation,简称RAG)两种方法各有千秋,且都对此问题有着不可忽视的贡献。

本文将重点介绍RAG的理论基础,并展示如何利用LangChain、GPT大模型以及Weaviate矢量数据库搭建一个简易的RAG流程。

什么是检索增强生成


检索增强生成 (RAG) 是一种使用来自私有或专有数据源的信息来辅助文本生成的技术。它将检索模型(设计用于搜索大型数据集或知识库)和生成模型(例如大型语言模型 (LLM),此类模型会使用检索到的信息生成可供阅读的文本回复)结合在一起。

通过从更多数据源添加背景信息,以及通过训练来补充 LLM 的原始知识库,检索增强生成能够提高搜索体验的相关性。这能够改善大型语言模型的输出,但又无需重新训练模型。额外信息源的范围很广,从训练 LLM 时并未用到的互联网上的新信息,到专有商业背景信息,或者属于企业的机密内部文档,都会包含在内。

RAG 对于诸如回答问题和内容生成等任务,具有极大价值,因为它能支持生成式 AI 系统使用外部信息源生成更准确且更符合语境的回答。它会实施搜索检索方法(通常是语义搜索或混合搜索)来回应用户的意图并提供更相关的结果。

但问题在于,尽管最先进的LLM经过大量数据训练,拥有广泛的常识性知识,但在需要生成训练数据之外的知识时,如最新、专有或特定领域信息时,LLM可能会出现不准确的情况。以下就是一个典型的例子:

问题:最新的华为Mate手机有哪些创新功能? 回答:抱歉,但我无法访问实时信息,我的知识只更新到2023年初。因此,如果华为Mate系列手机在那之后发布了新的型号或功能,我将无法为您提供具体信息。为了获取最新信息,我建议您查看最新的新闻资源或华为的官方声明。

因此,如何将LLM的常识与其他背景知识有效结合,以生成更准确、更符合实际情况的答案,成为了一个关键问题。这样才能帮助 LLM 生成更准确、更符合语境的补全,同时减少幻觉。

解决方案


传统上,我们通过微调来使神经网络适应特定领域或信息。这种方法虽然有效,但同时也存在计算资源消耗大、成本高昂且技术要求高等问题。因此,灵活适应不断变化的信息成为了一个挑战。

2020年,Lewis 等人在论文《知识密集型 NLP 任务的检索增强生成》(Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks) [4] 中,提出了一种更为灵活的技术——检索增强生成(Retrieval-Augmented Generation,RAG)。该研究将生成模型与检索模块结合起来,能够从易于更新的外部知识源中获取额外信息。

用一个简单的比喻来说,RAG 对大语言模型(Large Language Model,LLM)的作用,就像开卷考试对学生一样。在开卷考试中,学生可以带着参考资料进场,比如教科书或笔记,用来查找解答问题所需的相关信息。开卷考试的核心在于考察学生的推理能力,而非对具体信息的记忆能力。

同样地,在 RAG 中,事实性知识与 LLM 的推理能力相分离,被存储在容易访问和及时更新的外部知识源中,具体分为两种:

  • 参数化知识(Parametric knowledge):模型在训练过程中学习得到的,隐式地储存在神经网络的权重中。
  • 非参数化知识(Non-parametric knowledge):存储在外部知识源,例如向量数据库中。

(顺便提一下,这个贴切的比喻并非我首创,最早是在 Kaggle 的 LLM 科学考试竞赛中,由 JJ 提出的。)

下面是 RAG 工作流程的示意图:

检索增强生成的工作流程

  1. 检索:首先,我们需要进行的是检索过程。在这个阶段,我们利用用户的查询内容,从外部知识源获取相关信息。具体来说,就是将用户的查询通过嵌入模型转化为向量,这样就可以与向量数据库中的其他上下文信息进行比对。通过这种相似性搜索,我们可以找到向量数据库中最匹配的前k个数据。
  2. 增强:接下来,我们进入增强阶段。在这个阶段,我们将用户的查询和检索到的额外信息一起嵌入到一个预设的提示模板中。这个过程的目的是为了提供更丰富、更具上下文的信息,以便于后续的生成过程
  3. 生成:最后,我们进行生成过程。在这个阶段,我们将经过检索增强的提示内容输入到大语言模型(LLM)中,以生成所需的输出。这个过程是RAG的核心,它利用了LLM的强大生成能力,结合了前两个阶段的信息,生成了准确、丰富且与上下文相关的输出。

在大语言模型(LLM)的应用中,检索增强生成(RAG)的工作流程是一个结构化的过程,它通过检索、增强和生成三个阶段,使得大语言模型(LLM)能够更好地理解和响应用户的查询,提供更准确、更具上下文的输出。

基于 LangChain 实现 RAG


今天我们来一起解读如何利用Python、OpenAI的大型语言模型(LLM)、Weaviate向量数据库以及OpenAI的嵌入模型,通过LangChain构建一个RAG系统。以下是步骤的简明扼要的概述:

首先,我们需要做的是环境准备工作。确保您的环境中已经安装了以下Python库:

  • LangChain:负责整个流程的编排。
  • OpenAI:提供嵌入模型和LLM服务。
  • Weaviate-Client:用于操作向量数据库。

同时,您需要在项目根目录下的.env文件中配置好环境变量。为了获取OpenAI的API密钥,您需要先注册OpenAI账户,并在API密钥页面生成新的密钥。

!pip install langchain openai weaviate-client

另外,你需要在项目的根目录下的 .env 文件中设置相关的环境变量。要获取 OpenAI 的 API 密钥,你需要注册 OpenAI 账户,并在 API 密钥 页面中选择“创建新的密钥”。

OPENAI_API_KEY="<YOUR_OPENAI_API_KEY>"

完成这些设置后,运行下面的命令来加载你所设置的环境变量。

import dotenv dotenv.load_dotenv()

准备步骤


首先,我们需要建立一个向量数据库。这个数据库将作为我们的外部知识源,包含了所有必要的额外信息。为了填充这个数据库,我们需要遵循以下步骤:

收集数据并将其加载进系统

在这个阶段,我们首先需要收集并加载数据。这里以《华为新款手机有什么功能_2023华为手机上市新机型》为例,我们可以利用 LangChain 提供的众多 DocumentLoader 之一来加载这些数据。这里的 Document 是一个包含文本和元数据的字典,为了加载文本,我们可以使用 LangChain 的 TextLoader 来加载文本。

import requests from langchain.document_loaders import TextLoader url = "https://myzhengyuan.com/post/93853.html" res = requests.get(url) with open("93853.html", "w") as f: f.write(res.text) loader = TextLoader('./93853.html') documents = loader.load()

对文档进行分块处理


由于原始状态下的 Document 可能过长,无法适应大语言模型(LLM)的上下文窗口,所以我们需要将其分成更小的部分。LangChain 内置了许多用于此目的的文本分割器。在这个简单的示例中,我们可以使用CharacterTextSplitter,设置chunk_size约为500和chunk_overlap约为50,以保持块之间的文本连续性。

from langchain.text_splitter import CharacterTextSplitter text_splitter = CharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = text_splitter.split_documents(documents)

对分块内容进行嵌入并存储块


最后,我们需要为每个块生成向量嵌入,并将它们与其嵌入一起存储。为了生成向量嵌入,我们可以使用OpenAI的嵌入模型。同时,我们可以使用 Weaviate 向量数据库来存储这些嵌入。通过调用.from_documents()方法,向量数据库会自动填充这些块。

from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Weaviate import weaviate from weaviate.embedded import EmbeddedOptions client = weaviate.Client( embedded_options = EmbeddedOptions() ) vectorstore = Weaviate.from_documents( client = client, documents = chunks, embedding = OpenAIEmbeddings(), by_text = False )

第 1 步:检索


首先,我们需要在向量数据库中填充数据,然后定义一个检索器组件。这个检索器会根据用户的查询和嵌入块之间的语义相似度,为我们提供额外的上下文信息。

retriever = vectorstore.as_retriever()

第 2 步:增强


接下来,我们需要使用检索到的上下文信息来增强我们的提示。为此,我们需要准备一个提示模板。在LangChain中,我们可以使用ChatPromptTemplate来创建一个提示模板。这个模板会告诉LLM如何使用检索到的上下文来回答问题。如果LLM不知道答案,它会说出“我不知道”。我们要求LLM的答案尽可能简洁,最多使用三个句子。在Python中,我们可以这样实现:

from langchain.prompts import ChatPromptTemplate template = """你是问答任务助手。使用以下检索到的上下文片段来回答问题。如果你不知道答案,就说你不知道。最多使用三个句子,保持答案简洁。 Question: {question} Context: {context} Answer: """ prompt = ChatPromptTemplate.from_template(template) print(prompt)

第三步:生成


最后,我们需要构建一个RAG流程链条,将检索器、提示模板和LLM连接起来。定义好RAG链后,我们就可以调用它进行生成。

from langchain.chat_models import ChatOpenAI from langchain.schema.runnable import RunnablePassthrough from langchain.schema.output_parser import StrOutputParser llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0) rag_chain = ( {"context": retriever, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() ) query = "最新的华为Mate手机有哪些创新功能?" rag_chain.invoke(query)

输出结果如下:

华为Mate手机的创新功能包括: 1. 先进的处理器和大内存,适合处理复杂任务和大型应用程序 2. 高像素的多摄像头系统,能拍摄高质量照片和视频 3. 支持快速充电和无线充电技术 4. 5G网络支持 5. 流线型设计的双曲面屏幕、高刷新率和高清分辨率 6. 搭载最新的麒麟芯片,提供更快的运行速度和更高的能效比 7. 超级感知影像系统、超级快充技术、智能语音助手等功能 2023年华为上市的新机型包括Hi畅享60S、nova 11 SE、Mate 60系列、nova 12系列等。2022年上市的新机型有mate50、mate50Pro、mate50Pro+和Mate50 RS。

我们可以看到基于这个示例生成的 RAG 管道,如下所示:

总结

本文详细介绍了检索增强生成(RAG)的概念,并演示了如何利用Python实现RAG流程,该流程利用了OpenAI的大型语言模型(LLM)、Weaviate矢量数据库和OpenAI嵌入模型,并通过LangChain进行编排。通过本文的介绍,我们可以看到RAG为解决LLM在处理特定、最新和专有信息方面的不足提供了一个有效且灵活的方法。RAG的出现为大型语言模型提供了额外的、来自外部知识源的信息,使其在生成更精确、更贴合上下文的答案的同时,也能有效减少产生误导性信息的可能。通过Python的实际示例,读者可以清晰地了解RAG的工作原理和实际应用。

普通人如何抓住AI大模型的风口?

领取方式在文末

为什么要学习大模型?

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

目前,开源人工智能大模型已应用于医疗、政务、法律、汽车、娱乐、金融、互联网、教育、制造业、企业服务等多个场景,其中,应用于金融、企业服务、制造业和法律领域的大模型在本次调研中占比超过30%。

随着AI大模型技术的迅速发展,相关岗位的需求也日益增加。大模型产业链催生了一批高薪新职业:

人工智能大潮已来,不加入就可能被淘汰。如果你是技术人,尤其是互联网从业者,现在就开始学习AI大模型技术,真的是给你的人生一个重要建议!

最后

只要你真心想学习AI大模型技术,这份精心整理的学习资料我愿意无偿分享给你,但是想学技术去乱搞的人别来找我!

在当前这个人工智能高速发展的时代,AI大模型正在深刻改变各行各业。我国对高水平AI人才的需求也日益增长,真正懂技术、能落地的人才依旧紧缺。我也希望通过这份资料,能够帮助更多有志于AI领域的朋友入门并深入学习。

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

大模型全套学习资料展示

自我们与MoPaaS魔泊云合作以来,我们不断打磨课程体系与技术内容,在细节上精益求精,同时在技术层面也新增了许多前沿且实用的内容,力求为大家带来更系统、更实战、更落地的大模型学习体验。

希望这份系统、实用的大模型学习路径,能够帮助你从零入门,进阶到实战,真正掌握AI时代的核心技能!

01教学内容

  • 从零到精通完整闭环:【基础理论 →RAG开发 → Agent设计 → 模型微调与私有化部署调→热门技术】5大模块,内容比传统教材更贴近企业实战!

  • 大量真实项目案例:带你亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事‌!

02适学人群

应届毕业生‌:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。

零基础转型‌:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界‌。

业务赋能突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型‌。

vx扫描下方二维码即可

本教程比较珍贵,仅限大家自行学习,不要传播!更严禁商用!

03入门到进阶学习路线图

大模型学习路线图,整体分为5个大的阶段:

04视频和书籍PDF合集

从0到掌握主流大模型技术视频教程(涵盖模型训练、微调、RAG、LangChain、Agent开发等实战方向)

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路(不吹牛,真有用)

05行业报告+白皮书合集

收集70+报告与白皮书,了解行业最新动态!

0690+份面试题/经验

AI大模型岗位面试经验总结(谁学技术不是为了赚$呢,找个好的岗位很重要)

07 deepseek部署包+技巧大全

由于篇幅有限

只展示部分资料

并且还在持续更新中…

真诚无偿分享!!!
vx扫描下方二维码即可
加上后会一个个给大家发

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1118157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发者如何接入VibeThinker-1.5B?API文档获取途径

开发者如何接入VibeThinker-1.5B&#xff1f;API文档获取途径 在当前大模型“军备竞赛”愈演愈烈的背景下&#xff0c;动辄千亿参数、耗资数百万美元训练的通用模型似乎成了行业标配。然而&#xff0c;对于大多数个人开发者或中小型团队而言&#xff0c;这类庞然大物不仅难以部…

强化学习粒子群算法投资组合优化【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。&#xff08;1&#xff09;分阶段粒子群优化算法的设计与实现投资组合优化问题的核心…

系统提示词怎么写?教你正确调用VibeThinker-1.5B的推理能力

如何激活小模型的强推理能力&#xff1f;深度解析 VibeThinker-1.5B 的系统提示词调用艺术 在当前大模型动辄数百亿、数千亿参数的时代&#xff0c;一个仅含15亿参数的小型语言模型竟能在数学与算法推理任务中击败比它大上百倍的对手——这听起来像天方夜谭&#xff0c;但 Vib…

深度解耦与异步处理的实践

一、核心设计模式剖析 1.1 观察者模式的局限性 传统的观察者模式在分布式环境中存在明显不足: java // 传统观察者模式示例 public interface Observer { void update(String event); } public class ConcreteObserve…

‌如何避免自动化测试的Flaky问题?

在自动化测试中&#xff0c;Flaky测试指那些在相同输入和环境条件下&#xff0c;时而通过时而失败的测试用例。它们像“幽灵”一样困扰着测试团队&#xff1a;一次运行中测试绿灯通过&#xff0c;下一次却无故失败&#xff0c;导致CI/CD流水线中断、团队时间浪费&#xff0c;甚…

网络安全ARP欺骗是什么?有什么危害?

ARP全称Address Resolution Protocol&#xff0c;顾名思义地址解析协议&#xff0c;是根据IP地址获取物理地址的一个TCP/IP协议&#xff0c;在计算机网络中扮演者非常重要的角色。既然它有着十分重要的作用&#xff0c;那肯定也存在一定的安全风险&#xff0c;其中最为常见的便…

主动学习带偏好多目标优化算法【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 交互式演化多目标优化框架与偏好排序模型构建多目标优化问题广泛存在于工程设计、…

低代码测试平台实操:节省50%时间

效率焦虑下的测试新引擎在追求极致交付速度的DevOps时代&#xff0c;软件测试常常成为流程中的瓶颈。测试从业者们深陷于繁重的脚本编写、冗长的环境准备、频繁的回归测试以及跨平台兼容性验证的泥沼中。传统的自动化测试虽然带来了长期收益&#xff0c;但其高昂的学习曲线、漫…

网盘直链下载助手+AI模型?双工具联动提升资源获取效率

轻量模型遇上极速部署&#xff1a;VibeThinker-1.5B 与镜像分发的协同革命 在 AI 模型越来越“重”的今天&#xff0c;动辄数百亿参数、依赖云端 API、按 Token 计费的使用模式&#xff0c;正在让许多个人开发者和研究者望而却步。尤其是在数学推理、算法编程这类高强度任务中…

导师推荐8个一键生成论文工具,本科生轻松搞定毕业论文!

导师推荐8个一键生成论文工具&#xff0c;本科生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;告别手忙脚乱 随着人工智能技术的不断进步&#xff0c;越来越多的高校学生开始借助 AI 工具来辅助论文写作。对于本科生而言&#xff0c;撰写毕业论文不仅是学术能…

【Docker健康检查最佳实践】:掌握容器状态监控的5大核心技巧

第一章&#xff1a;Docker健康检查的核心价值与应用场景在容器化部署日益普及的今天&#xff0c;确保服务的持续可用性成为运维的关键目标。Docker 健康检查&#xff08;HEALTHCHECK&#xff09;机制为此提供了原生支持&#xff0c;能够主动探测容器内应用的运行状态&#xff0…

从零开始部署VibeThinker-1.5B-APP:Jupyter一键启动脚本使用教程

从零开始部署VibeThinker-1.5B-APP&#xff1a;Jupyter一键启动脚本实战指南 在算法竞赛训练营里&#xff0c;一个学生正为一道动态规划题卡壳。他尝试向云端大模型提问&#xff0c;却因高昂的API费用望而却步——每轮交互成本超过0.1美元&#xff0c;一次完整调试可能耗资数元…

群体协同算法中药复方优化方法【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 以群体协同算法为核心的中药复方靶点网络模块划分方法中药复方是中医药治疗疾病的…

能否连接数据库?探索VibeThinker与外部系统的交互

VibeThinker-1.5B-APP 与外部系统交互的边界探索 在如今大模型动辄千亿参数、训练成本高企的背景下&#xff0c;一个仅15亿参数的小模型却在数学推理和算法任务中频频“越级挑战”成功——这听起来像技术界的黑马故事&#xff0c;而 VibeThinker-1.5B-APP 正是其中的代表。 它不…

HMMT25成绩突破50分:VibeThinker展现超强竞赛解题潜力

VibeThinker-1.5B&#xff1a;小模型如何在HMMT25突破50分大关&#xff1f; 在当前AI大模型争相“卷参数”的时代&#xff0c;一个仅15亿参数的模型却悄然打破了人们对推理能力与规模强相关的固有认知。微博开源的 VibeThinker-1.5B-APP 在极具挑战性的数学竞赛基准 HMMT25 上取…

【从零到精通】Docker跨平台自动化测试的7个黄金法则

第一章&#xff1a;Docker跨平台测试的基石与核心价值Docker 通过容器化技术为跨平台测试提供了高度一致的运行环境&#xff0c;解决了“在我机器上能跑”的经典难题。其核心价值在于将应用及其依赖打包成轻量级、可移植的容器镜像&#xff0c;确保在任意支持 Docker 的操作系统…

机器人冲压应用市场剖析:哪家品牌能脱颖而出成为优选? - 品牌推荐大师

全球智能服务机器人市场规模预计将从2022年的235亿美元增长至2028年的628亿美元,复合年增长率达17.8%。中国机器人冲压应用行业市场规模增长显著,2024年汽车冲压自动化市场规模已达119.90亿元,预计2025年将保持稳步…

群智能优化算法原理及实战应用【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅成品或者定制&#xff0c;扫描文章底部微信二维码。 (1) 基于高斯混沌增强与维进化策略的粒子群优化算法 粒子群优化算法是模拟鸟群觅食…

元描述(meta description)自动撰写:提升网站搜索可见性

元描述自动撰写&#xff1a;用轻量模型撬动搜索可见性 在搜索引擎结果页&#xff08;SERP&#xff09;上&#xff0c;你的网页标题可能决定了用户是否注意到它&#xff0c;而真正决定他们会不会点击进来的&#xff0c;往往是那一行不起眼的元描述。尽管谷歌早已声明 meta descr…

iPad Pro手写输入优化:数学公式识别+VibeThinker求解

iPad Pro手写输入优化&#xff1a;数学公式识别 VibeThinker求解 在一场高校数学建模竞赛的现场&#xff0c;一名学生用Apple Pencil在iPad Pro上快速写下一道复杂的微分方程。笔尖刚落&#xff0c;屏幕便已呈现出完整的求解过程——从变量替换到积分变换&#xff0c;每一步推…