(3)基于 InternLM 和 LangChain 搭建你的知识库

本文详细介绍了如何利用RAG原理搭建课程知识库助手,涉及环境配置、LangChain环境、知识库的构建过程、InternLM接入、检索问答链构建以及进阶作业示例。作者展示了如何在厨房菜谱领域构建问答助手,并提供了相关代码和应用地址。
摘要由CSDN通过智能技术生成

基础作业:

复现课程知识库助手搭建过程 (截图)

首先我们回顾一下RAG的原理:

RAG是将本地文档都转化为文本形式后,使用Embedding将文本存储进向量数据库。在用户输入prompt以后,将用户的prompt也转化成embedding,和向量数据库里的embedding进行匹配,然后将用户的prompt和文本的prompt一起输入大模型,得到模型的回答。RAG可以低成本地实时更新大模型知识,但是因为需要输入大量文本作为外部知识来源,那么单次提问可以包括的信息来源数量就比较少,并且RAG的能力容易受基座模型能力的影响。

环境配置

其中Internlm模型部署和模型下载和上节课内容有重合,在这里就不截图了。

这里贴一下1.3 LangChain 相关环境配置的实现过程。

配置langchain用到了开源词向量模型 Sentence Transformer,这里需要安装一下。

知识库搭建

本小节分为3个子步骤:

  1. 将文件夹中格式为txt或markdown格式的文件路径找出来
  2. 使用 LangChain 提供的 FileLoader 对象来加载目标文件,得到由目标文件解析出的纯文本内容。
  3. 由纯文本对象构建向量数据库,先对文本进行分块,接着使用开源词向量模型 Sentence Transformer 对文本块进行向量化。选择 Chroma 作为向量数据库,基于上文分块后的文档以及加载的开源向量化模型,将语料加载到指定路径下的向量数据库

InternLM 接入 LangChain

 为便捷构建 LLM 应用,我们需要基于本地部署的 InternLM,继承 LangChain 的 LLM 类自定义一个 InternLM LLM 子类,从而实现将 InternLM 接入到 LangChain 框架中。实现的过程从 LangChain.llms.base.LLM 类继承一个子类,并重写构造函数与 _call 函数即可

构建检索问答链

本小节分为以下几个步骤:

a.通过 Chroma 以及上文定义的词向量模型将上文构建的向量数据库导入进来

b.构建Prompt Template,该 Template 其实基于一个带变量的字符串,在检索之后,LangChain 会将检索到的相关文档片段填入到 Template 的变量中,从而实现带知识的 Prompt 构建。

c.调用 LangChain 提供的检索问答链构造函数RetrievalQA.from_chain_type,基于我们的自定义 LLM、Prompt Template 和向量知识库来构建一个基于 InternLM 的检索问答链

demo结果展示

可以看到,demo已经部署成功,可以成功运行。

进阶作业:

选择一个垂直领域,收集该领域的专业资料构建专业知识库,并搭建专业问答助手,并在 OpenXLab 上成功部署(截图,并提供应用地址)

我选择了厨房菜谱领域搭建问答助手,代码在

https://github.com/leonfrank/InternLM-HW/tree/main/lecture3/llm_cuisine

项目下面

应用地址在OpenXLab浦源 - 应用中心

应用运行成功的截图如下

  • 32
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值