大模型实战营第二期——3. 基于 InternLM 和 LangChain 搭建你的知识库

  • github地址:InternLM/tutorial-书生·浦语大模型实战营
  • 文档地址:基于 InternLM 和 LangChain 搭建你的知识库
  • 视频地址:基于 InternLM 和 LangChain 搭建你的知识库
  • Intern Studio: https://studio.intern-ai.org.cn/console/instance
  • 动手学大模型应用开发

文章目录

  • 1. 大模型开发范式
  • 2. LangChain
  • 3. 构建向量数据库
  • 4. 搭建知识库助手
  • 5. Web Demo部署
  • 6. 实际操作
    • 6.1 环境配置
    • 6.2 词向量模型配置
    • 6.3 项目代码
      • 6.3.1 知识库构建(语料库向量持久化)
      • 6.3.2 InternLM 接入 LangChain并运行

1. 大模型开发范式

在这里插入图片描述

在这里插入图片描述

  1. 时效性问题,23年训练的模型,问24年相关的内容,就无法回答

在这里插入图片描述

  • 检索增强生成(Retrieval-Augmented Generation, RAG)技术
  • 高级检索增强生成技术(RAG)全面指南:原理、分块、编码、索引、微调、Agent、展望

在这里插入图片描述

  • 这部分内容的话,如果接触过知识图谱,或者基于知识图谱的问答系统,其实就很容易理解了
  • 所以chatGPT这类的应用,首先是一个问答系统,只是所用的模型是大模型,也可以像之前的问答系统一样接入知识图谱。

2. LangChain

在这里插入图片描述

在这里插入图片描述
LangChain可以做很多大模型相关的事情,这里我们侧重使用的是使用LangChain进行RAG开发范式的实现。

  • langchain-ai/langchain

在这里插入图片描述

3. 构建向量数据库

在这里插入图片描述
在这里插入图片描述

4. 搭建知识库助手

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5. Web Demo部署

在这里插入图片描述

在这里插入图片描述

6. 实际操作

和大模型实战营第二期——2. 浦语大模型趣味Demo中一样,

6.1 环境配置

这里发现:
在这里插入图片描述
之前创建过的环境也都还在,因为默认用户操作的目录就是在root目录下,而且root内存给了56GB。。。真大方

bash
conda info -e
> base                  *  /root/.conda
internlm-demo            /root/.conda/envs/internlm-demo# 如果之前没创建过环境,就重新搞一下
/root/share/install_conda_env_internlm_base.sh InternLM
conda activate InternLM# 升级pip
python -m pip install --upgrade pippip install modelscope==1.9.5
pip install transformers==4.35.2
pip install streamlit==1.24.0
pip install sentencepiece==0.1.99
pip install accelerate==0.24.1# 复制模型
mkdir -p /root/data/model/Shanghai_AI_Laboratory
cp -r /root/share/temp/model_repos/internlm-chat-7b /root/data/model/Shanghai_AI_Laboratory/internlm-chat-7b# langchain,以及向量数据库chromadb 还有gradio的web部署
pip install langchain==0.0.292
pip install gradio==4.4.0
pip install chromadb==0.4.15
pip install sentence-transformers==2.2.2
pip install unstructured==0.10.30
pip install markdown==3.3.7

6.2 词向量模型配置

另外,用到的词向量模型是Sentence Transformer开源词向量模型 ,也可以选用别的开源词向量模型来进行 Embedding,目前选用这个模型是相对轻量、支持中文且效果较好的,也可以自由尝试别的开源词向量模型。

pip install -U huggingface_hub

/root/data 目录下新建python文件 download_hf.py,填入以下代码

import os# 如果下载网速不行的话,可以设置环境变量
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'# 下载模型
os.system('huggingface-cli download --resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir /root/data/model/sentence-transformer')

如果是linux系统的话,其实可以直接在命令行执行:

# 1. 设置环境变量
export HF_ENDPOINT = https://hf-mirror.com
# 2.下载模型
huggingface-cli download \
--resume-download sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 --local-dir \
/root/data/model/sentence-transformer

另外,在使用开源词向量模型构建开源词向量的时候,需要用到第三方库 nltk 的一些资源。正常情况下,其会自动从互联网上下载,但可能由于网络原因会导致下载中断,此处我们可以从国内仓库镜像地址下载相关资源,保存到服务器上。

# 直接下面的命令全部复制,回车一次即可,linux里会自动分步执行的
cd /root
git clone https://gitee.com/yzy0612/nltk_data.git  --branch gh-pages
cd nltk_data
mv packages/*  ./
cd tokenizers
unzip punkt.zip
cd ../taggers
unzip averaged_perceptron_tagger.zip

之后使用时服务器即会自动使用已有资源,无需再次下载。

6.3 项目代码

cd /root/data
git clone https://github.com/InternLM/tutorial

相关的代码都在langchain/demo文件夹中,感兴趣的可以自己看一下

~/data$ tree -L 1 ./tutorial/langchain/demo
./tutorial/langchain/demo
├── LLM.py
├── create_db.py
├── readme.md
└── run_gradio.py0 directories, 4 files

6.3.1 知识库构建(语料库向量持久化)

demo所使用的数据考虑到版权等问题,选择由上海人工智能实验室开源的一系列大模型工具开源仓库作为语料库来源,包括:opencompass,lmdeploy,xtuner等

# 进入到数据库盘
cd /root/data
# clone 上述开源仓库
git clone https://gitee.com/open-compass/opencompass.git
git clone https://gitee.com/InternLM/lmdeploy.git
git clone https://gitee.com/InternLM/xtuner.git
git clone https://gitee.com/InternLM/InternLM-XComposer.git
git clone https://gitee.com/InternLM/lagent.git
git clone https://gitee.com/InternLM/InternLM.git
  • 为了处理方便,只使用这些仓库中的.md.txt文件作为语料来源
  • 注意,也可以选用其中的代码文件加入到知识库中,但需要针对代码文件格式进行额外处理(因为代码文件对逻辑联系要求较高,且规范性较强,在分割时最好基于代码模块进行分割再加入向量数据库)。

所提供的语料处理脚本其实就是/tutorial/langchain/demo中的create_db.py脚本,直接运行即可

# 基本都是在data目录下运行的
/root/data $python tutorial/langchain/demo/create_db.py
>100%|████████████████████████████████████████████████████████████████████████████████████████████| 25/25 [00:17<00:00,  1.44it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 9/9 [00:00<00:00, 23.32it/s]
100%|████████████████████████████████████████████████████████████████████████████████████████████| 18/18 [00:00<00:00, 46.71it/s]
100%|████████████████████████████████████████████████████████████████████████████████████████████| 72/72 [00:02<00:00, 29.10it/s]
100%|██████████████████████████████████████████████████████████████████████████████████████████| 130/130 [00:05<00:00, 22.66it/s]
100%|████████████████████████████████████████████████████████████████████████████████████████████| 38/38 [00:01<00:00, 21.35it/s]# 运行完之后,就可以看到持久化之后的chroma向量数据库的内容了
$tree  ./data_base/
./data_base/
└── vector_db└── chroma├── chroma.sqlite3└── ee6d3440-6656-4224-94b8-c8d362de2f22├── data_level0.bin├── header.bin├── index_metadata.pickle├── length.bin└── link_lists.bin3 directories, 6 files

6.3.2 InternLM 接入 LangChain并运行

为便捷构建 LLM 应用,我们需要基于本地部署的 InternLM,继承 LangChain 的 LLM 类自定义一个 InternLM LLM 子类,从而实现将 InternLM 接入到 LangChain 框架中。完成 LangChain 的自定义 LLM 子类之后,可以以完全一致的方式调用 LangChain 的接口,而无需考虑底层模型调用的不一致。

脚本也是位于demo文件夹中,可以

python /root/data/tutorial/langchain/demo/run_gradio.py

直接通过 python 命令运行,即可在本地启动知识库助手的 Web Demo,默认会在 7860 端口运行,接下来将服务器端口映射到本地端口即可访问。

注意:如果想不配置端口直接访问,去vscode的终端里运行,而不是用jupyter的终端工具

页面还是乱码。。。这个端口转发可能还是有点问题
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux基础-配置网络

Linux配置网络的方式 1.图形界面 右上角-wired-配置 点加号-新建网络配置文件2.NetworkManager工具 2.1用图形终端nmtui 1.新建网络配置文件add 1.指定网络设备的类型Ethernet 2.配置网络配置文件的名称&#xff0c;名称可以有空格 3.配置网络配置文件对应的物理网络设备的…

《21天精通IPv4 to IPv6》第4天:理解IPv6子网划分规则——如何为不同的系统划分IPv6子网?

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

前端工程化面试题 | 02.精选前端工程化高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

内网安全-内网穿透

目录 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 ssh代理内网穿透 ssh配置socket代理 MSF多级网络穿透 内网渗透 Nc使用详解 Nc监听和探测 Nc传文件 termite内网穿透工具 1、termite 之前叫ew &#xff08;可以进行正向连接&#xff0c;可以…

Python运算符大全,值得收藏

一、 Python的算术运算 Python的算术运算符与C语言类似&#xff0c;略有不同。包括加()、减(-)、乘(*)、除(/)、取余(%)、按位或(|)、按位与(&)、按位求补(~)、左移位(<<)、右移位(>>)、单目求反(-)、幂运算(**)、整除运算(//)、增强运算、增强矩阵乘法()。 …

05.坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角&#xff0c;X向右增长&#xff0c;Y向下增长。 2.设置控件位置 设置控件位置&#xff0c;就相当于是需要指定控件的坐标&#xff0c;对于该控件来说&#xff0c;其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换 1 投票策略 考虑到外点率太高 ①让直线上的每一点投票 ②希望噪声点不要给具体的任何模型投票&#xff0c;即噪声点不会有一致性的答案 ③即使被遮挡了&#xff0c;也能把直线找出来 参数空间离散化 直线相当于就是m,b两…

机器学习:过拟合和欠拟合的介绍与解决方法

过拟合和欠拟合的表现和解决方法。 其实除了欠拟合和过拟合&#xff0c;还有一种是适度拟合&#xff0c;适度拟合就是我们模型训练想要达到的状态&#xff0c;不过适度拟合这个词平时真的好少见。 过拟合 过拟合的表现 模型在训练集上的表现非常好&#xff0c;但是在测试集…

【开源】SpringBoot框架开发天沐瑜伽馆管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 瑜伽课程模块2.3 课程预约模块2.4 系统公告模块2.5 课程评价模块2.6 瑜伽器械模块 三、系统设计3.1 实体类设计3.1.1 瑜伽课程3.1.2 瑜伽课程预约3.1.3 系统公告3.1.4 瑜伽课程评价 3.2 数据库设计3.2.…

【动态规划】1301. 最大得分的路径数目

作者推荐 【动态规划】【前缀和】【C算法】LCP 57. 打地鼠 本文涉及知识点 动态规划汇总 LeetCoce1301. 最大得分的路径数目 给你一个正方形字符数组 board &#xff0c;你从数组最右下方的字符 ‘S’ 出发。 你的目标是到达数组最左上角的字符 ‘E’ &#xff0c;数组剩余…

tkinter-TinUI-xml实战(10)展示画廊

tkinter-TinUI-xml实战&#xff08;10&#xff09;展示画廊 引言声明文件结构核心代码主界面统一展示控件控件展示界面单一展示已有展示多类展示 最终效果在这里插入图片描述 ![](https://img-blog.csdnimg.cn/direct/286fcaa2fa5648a992a0ac79b4efad82.png) ………… 结语 引言…

二叉树和堆(优先队列)

前言&#xff1a; 本章会讲解二叉树及其一些相关练习题&#xff0c;和堆是什么。 二叉树&#xff1a; 二叉树的一些概念&#xff1a; 一棵二叉树是有限节点的集合&#xff0c;该集合可能为空。二叉树的特点是每一个节点最多有两个子树&#xff0c;即二叉树不存在度大于2的节点…

进程间通信-消息队列

消息队列的公共资源是链表结构。 通信双方不会和消息队列进行挂接&#xff0c;而是像管道一样&#xff0c;访问内存中的消息队列。 消息队列由操作系统维护&#xff0c;但是由通信的某一方创建和删除 通信双方都需要获取到消息队列&#xff0c;和共享内存一样。 当发送方有数据…

阿里云游戏服务器租用费用价格组成,费用详单

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

图(高阶数据结构)

目录 一、图的基本概念 二、图的存储结构 2.1 邻接矩阵 2.2 邻接表 三、图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四、最小生成树 4.1 Kruskal算法 4.2 Prim算法 五、最短路径 5.1 单源最短路径-Dijkstra算法 5.2 单源最短路径-Bellman-Ford算法 5.3 多源最…

Vue - 快速入门(一)

阅读文章可以收获&#xff1a; 1. 明白什么是vue 2. 如何创建一个vue实例 3. vue中的插值表达式如何使用 4. 如何安装vue的开发者工具 Vue 概念 什么是vue&#xff1f; Vue 是一个用于 构建用户界面 的 渐进式 框架 框架优点&#xff1a;大大提升开发效率 (70%↑) 缺点…

蓝桥杯官网练习题(翻转)

问题描述 小蓝用黑白棋的 n 个棋子排成了一行&#xff0c;他在脑海里想象出了一个长度为 n 的 01 串 T&#xff0c;他发现如果把黑棋当做 1&#xff0c;白棋当做 0&#xff0c;这一行棋子也是一个长度为 n 的 01 串 S。 小蓝决定&#xff0c;如果在 S 中发现一个棋子…

Depth Anything放入MVS中?

这是Depth Anything的深度值depth&#xff0c;这个depth通过depth depth_anything(image)求得。 但想要把这个深度值depth嵌入到三维重建算法框架中&#xff0c;并不是一件容易得事情&#xff0c;拿OpenMVS举例&#xff0c;下图是OpenMVS输出深度图的函数。 OpenMVS的深度值保…

Vue中使用 Element-ui form和 el-dialog 进行自定义表单校验清除表单状态

文章目录 问题分析 问题 在使用 Element-ui el-form 和 el-dialog 进行自定义表单校验时&#xff0c;出现点击编辑按钮之后再带年纪新增按钮&#xff0c;出现如下情况&#xff0c;新增弹出表单进行了一次表单验证&#xff0c;而这时不应该要表单验证的 分析 在寻找多种解决…

「深度学习」dropout 技术

一、工作原理 1. 正则化网络 dropout 将遍历网络的每一层&#xff0c;并设置消除神经网络中节点的概率。 1. 每个节点保留/消除的概率为0.5: 2. 消除节点&#xff1a; 3. 得到一个规模更小的神经网络&#xff1a; 2. dropout 技术 最常用&#xff1a;反向随机失活 "…