首页 > 其他分享 >RAG与LLM原理及实践(3)--- RAG结合LLM的local实现并附完整代码

RAG与LLM原理及实践(3)--- RAG结合LLM的local实现并附完整代码

时间:2024-06-22 12:28:54浏览次数:12  
标签:RAG 答案 langchain --- LLM 小朋友 提问者

在写RAG结合LLM时,如果你读了我前面写的文章,你应该对里面的技术原理及流程有了很详细的了解。在上一篇文章讲了如何在通义千问中使用 function 的方式来完成LLM与RAG的结合。其实LLM结合RAG的方式可以有很多种,但是原理都是上一节介绍的,其实本质上就是要LLM知道,哪一类问题‘我’的回答是满足提问者要求的,哪一类问题‘我’可能回答的没有RAG好,‘我’可以借助‘RAG’,并将答案修饰形成提问者需要的风格进行转述回答。多的不说,还是直接上干货。上一篇文章举例的通义千问固然好用,但是模型以后可能按照tokens收费。因为毕竟整体的控制在LLM手上,但LLM如果不是部署在本地,那么你可能很难掌控他的内部逻辑,只能根据他目前的运作流程和开发的API进行开发。另外你除了担心模型按照 token 收费,可能还会担心安全性及稳定性问题,万幸的是,RAG可以部署到本地,当LLM请求发现自己能力不足以回答好非常专业的问题时,他可以以 function 的方式调用本地 RAG知识,从而很好的完成用户问题。当然,你如果要做的更好,你可能会把这个RAG中检索出的答案,交给LLM,让他对你RAG的retrieve进行二次更新和润色。举个例子,你的RAG存储了很多数学试卷题目解题思路。搜索问题的是一群小朋友,虽然你的RAG能给出更优秀和专业的回答,但是答案可能过于术语,专业化,小朋友可能没法完全理解。这时你可以透过设置 message 模版的 system 角色,告诉  LLM, ‘请以小朋友能读懂的口吻将答案润色’。这时RAG的答案重新交给LLM后,会经过LLM以小朋友的口吻发送给提问者。这也是LLM相对于RAG除了知识广阔性以外的一个重要魅力。但是你可能会担心将你的答案交给LLM后,LLM也会学到相关知识,当下一次你再提问时,可能LLM不需要借助RAG一样会有很好的表现。这要看LLM 背后的训练逻辑,是否会根据新增问题及外部答案,进行二次更新,参数调优等。当然这又会涉及到背后的商务考量,这不是本次文章我想描述的重点,但他确实有这样的问题。下面我还是直接展示干货,通过ollama+ langchain 打造属于自己的本地RAG+LLM,这对于有安全性,主控性的项目有着较好的启示作用。下面直接上 python 代码实现本地的RAG+LLM,并解释其实现:

你首先要下载 langchain 的相关包,包括如下:
 

pip install langchain

pip install langchain-community 

pip install docarray

前两个是 langchain 核心库相关的,主要是用作分词和词向量化

docarray主要是完成 词向量化的数据库保存与检索

另外,为了进行词向量编码,需要采用一

标签:RAG,答案,langchain,---,LLM,小朋友,提问者
From: https://blog.csdn.net/talentyiyy/article/details/139879300

相关文章

  • 如何使用xlsx和file-saver插件实现导入导出
    首先,安装xlsx和file-saver插件在组件中引入import*asXLSXfrom'xlsx';importFileSaverfrom'file-saver';<div>  <!--导入表格-->  <labelfor="import-excel">导入表格:</label>  <inputid="import-excel&qu......
  • 21-162、基于51单片机电子调光台灯可控硅PWM设计-CSDN
    21-162、基于51单片机电子调光台灯可控硅PWM设计-CSDN(1)通过电子调光台灯上的按键开关,实现电子调光台灯的开启与关闭操作;(2)通过电子调光台灯上的亮度增减按键,实现其8个档位的亮度切换控制(包含全亮和熄灭);(3)按下电子调光台灯的自动调光控制按键后,可根据环境光强度自动调节灯光亮度,......
  • 打卡信奥刷题(132)用Scratch图形化工具信奥P9913 [普及组]「RiOI-03」water problem
    「RiOI-03」waterproblem题目描述给定一个正整数nnn,问一个正方形能否被分割为nn......
  • 手写板擦写芯片SOT23-6省外围
    概述KX1401是一款液晶手写板擦写芯片,内部集成了升压、擦写驱动、按键去抖动以及低功耗待机等多个功能模块KX1401工作电压范围宽,在2.1V~4.2V范围内都可以工作,输出电压稳定且可调,当FB脚接地时,输出电压的调整是通过内部熔丝修调来实现的,调整范围为27V~40V;当FB外接电阻......
  • qt开发-08_layout 布局
    Qt提供了非常丰富的布局类,基本布局管理类包括:QBoxLayout、QGridLayout、QFormLayout和QStackedLayout。这些类都从QLayout继承而来,它们都来源于QObject(而不是QWidget)。创建更加复杂的布局,可以让它们彼此嵌套完成。其中QBoxLayout提供了水平和垂直的布局管理;QFormLa......
  • MURF3040CTR-ASEMI智能AI应用MURF3040CTR
    编辑:llMURF3040CTR-ASEMI智能AI应用MURF3040CTR型号:MURF3040CTR品牌:ASEMI封装:TO-220F恢复时间:35ns最大平均正向电流(IF):30A最大循环峰值反向电压(VRRM):400V最大正向电压(VF):0.95V~1.90V工作温度:-50°C~150°C芯片个数:2芯片尺寸:mil正向浪涌电流(IFMS):300AMURF3040CTR特性:低正......
  • Dragon Boat Festival
    Asthesuncastitsgoldenraysoverthebustlingmarket,theairwasfilledwiththericharomaofbambooleavesandsteamingglutinousrice,whichsignaledthearrivaloftheDragonBoatFestival.Thescentofzongzi,wrappedtightlywiththesoundsof......
  • 【C#进阶】高级面向对象特性_2024-06-22
    一、概念1.高级面向对象特性面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。这些对象可以包含数据和行为。高级面向对象特性包括:封装:把数据和操作这些数据的代码打包在一起,不让外部直接访问数据,而是通过方法来操作。继承:允许新创建的类(子类)继承现有类(父类)的属性和......
  • SqlAlchemy-2-0-中文文档-二十-
    SqlAlchemy2.0中文文档(二十)原文:docs.sqlalchemy.org/en/20/contents.html插入,更新,删除原文:docs.sqlalchemy.org/en/20/core/dml.htmlINSERT、UPDATE和DELETE语句是基于从UpdateBase开始的层次结构构建的。Insert和Update构造基于中介ValuesBase构建。DML基......
  • SqlAlchemy-2-0-中文文档-二-
    SqlAlchemy2.0中文文档(二)原文:docs.sqlalchemy.org/en/20/contents.html使用UPDATE和DELETE语句原文:docs.sqlalchemy.org/en/20/tutorial/data_update.html到目前为止,我们已经覆盖了Insert,这样我们可以将一些数据放入我们的数据库中,并且花了很多时间在Select上,该......