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

news2024/12/28 20:29:32
  • 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 pip

pip 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.py

0 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.bin

3 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://www.coloradmin.cn/o/1443924.html

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

相关文章

如何在苹果Mac上进行分屏,多任务处理?

Apple 在 macOS Catalina 中引入了 Split View&#xff0c;让您可以同时查看两个应用程序。如果同时处理多个应用程序&#xff0c;但在它们之间切换时感到沮丧&#xff0c;小编教给大家在 Macbook Pro/Air 或 iMac 上使用分屏功能流畅地进行多任务处理。 注意&#xff1a;您可…

C# 委托(delegate)本质理解

目录 代码如下&#xff0c;很简单 运行的结果 反编译程序查看 关注两点&#xff1a; 什么是委托 委托的三个步骤 委托的意义 代码如下&#xff0c;很简单 namespace Delegate { class Program { delegate void SayHi(); void SayHi_1() …

专业135+总400+中国科学院大学859国科大信号与系统考研经验电子信息与通信,真题,大纲,参考书

今年考研专业课859信号与系统135&#xff0c;总分400上岸国科大&#xff0c;总结一下自己这一年的复习经验&#xff0c;希望对后面报考中科院大学的同学有所帮助。 专业课&#xff1a; 国科大不同研究所都是统一命题&#xff0c;859信号与系统的参考书目是郑君里的《信号与系…

移动光猫gs3101超级密码及改桥接模式教程

文章目录 超级管理员账号改桥接模式路由器连接光猫&#xff0c;PPPOE拨号即可&#xff01;附录&#xff1a;如果需要改桥接的话不知道拨号密码咋办打开光猫Telnet功能Telnet 登录 参考文章 移动光猫吉比特GS3101超级账号获取更改桥接 移动光猫gs3101超级密码及改桥接模式教程 …

C#入门及进阶|数组和集合(六):集合概述

1.集合概述 数组是一组具有相同名称和类型的变量集合&#xff0c;但是数组初始化后就不便于再改变其大小&#xff0c;不能实现在程序中动态添加和删除数组元素&#xff0c;使数组的使用具有很多局限性。集合能解决数组存在的这个问题&#xff0c;下面我们来学习介绍集合…

微服务入门篇:http客户端Feign(远程调用,自定义配置,Feign的性能优化,Feign服务抽取)

目录 1.基于Feign的远程调用1.RestTemplate方式调用存在的问题2.Feign的介绍3.定义和使用Feign客户端 2.自定义配置1.方式一&#xff1a;配置文件方式2.方式二: java代码方式&#xff0c;需要先声明一个Bean: 3.Feign的性能优化1.Feign底层的客户端实现2.连接池配置 4.Feign的最…

春节假期:思考新一年的发展思路

春节假期是人们放松身心、享受家庭团聚的时刻&#xff0c;但除了走亲戚、玩、吃之外&#xff0c;我们确实也需要思考新的一年的发展思路。以下是一些建议&#xff0c;帮助您在春节假期中为新的一年做好准备&#xff1a; 回顾过去&#xff0c;总结经验&#xff1a;在春节期间&a…

Blazor 子组件交互例子

源码 子组件 SwitchBar.razor &#xfeff;using Microsoft.Extensions.Logging inject ILogger<Index> Logger<div style"ClassString" onclick"OnClick">ChildContent </div>code {[Parameter]public RenderFragment? ChildContent…

AJAX——认识URL

1 什么是URL&#xff1f; 统一资源定位符&#xff08;英语&#xff1a;Uniform Resource Locator&#xff0c;缩写&#xff1a;URL&#xff0c;或称统一资源定位器、定位地址、URL地址&#xff09;俗称网页地址&#xff0c;简称网址&#xff0c;是因特网上标准的资源的地址&…

LeetCode---383周赛

题目列表 3028. 边界上的蚂蚁 3029. 将单词恢复初始状态所需的最短时间 I 3030. 找出网格的区域平均强度 3031. 将单词恢复初始状态所需的最短时间 II 一、边界上的蚂蚁 这题没什么好说的&#xff0c;模拟就行&#xff0c;本质就是看前缀和有几个为0。 代码如下 class S…

【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱1(附带项目源码)

效果演示 文章目录 效果演示系列目录前言人物和视角基本控制简单的背包系统和物品交互绘制背包UI脚本控制 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中&#xff0c;我们将…

游戏服务器哪家强?国内几款主流云服务器测评

游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#xff0c;游戏服务器配置从4核16G、4核32G、8核32G、16核64G等配置可选&#xff0c;游戏专业服务器公网带宽10M、12M、15M…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(1)人工智能、机器学习、深度学习之间的关系

6.1 人工智能、机器学习与深度学习的关系 必须要掌握的内容&#xff1a; 如上图&#xff1a;人工智能>机器学习>深度学习。 机器学习是人工智能的一个分支&#xff0c;该领域的主要研究对象是人工智能&#xff0c;特别是如何在经验学习中改进具体算法的性能。 深度学习…

算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度

实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度 线性结构&#xff1a; 数组&#xff1a;是一种线性表数据结构&#xff0c;它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 查找数据 &#xff1a;随机访问 流程图 /** 查询元素下标…

02 数据库管理 数据表管理

文章目录 数据库管理数据表管理基础数据类型表的基本操作 数据库管理 查看已有库 show databases; 创建库 create database 库名 [character set utf8]; e.g. 创建stu数据库&#xff0c;编码为utf8 create database stu character set utf8; create database stu charsetutf8;…

LSF 主机状态 unreach 分析

在LSF集群运行过程中&#xff0c;有主机状态变为 unreach。熟悉LSF的朋友都知道主机状态为 unreach 表示主机上的 SBD 服务中断服务了&#xff0c;但其它服务 LIM 和 RES 还在正常运行。 影响分析 那么主机上的 SBD 服务中断的影响是什么呢&#xff1f; 我们需要先明白 SBD …

Java 学习和实践笔记(6)

各数据类型所占的空间&#xff1a; byte: 1个字节 short&#xff1a;2个字节 int&#xff1a;4个 long&#xff1a;8个 float&#xff1a;4个 double: 8个 char:1个 boolean:1bit 所有引用数据类型都是4个字节&#xff0c;实际其值是指向该数据类型的地址。 上图中稍特…

使用Softing edgeConnector模块将云轻松连接到Siemens PLC

一 工业边缘的连接解决方案 云服务提供商 (CSP) 引入了服务和功能&#xff0c;以简化基于云的工业物联网解决方案的实施。Azure Industrial IoT Platform或AWS IoT SiteWise支持标准协议和接口&#xff0c;例如OPC UA或MQTT。但是&#xff0c;如果您希望在典型的旧改项目中连接…

Debezium发布历史122

原文地址&#xff1a; https://debezium.io/blog/2022/05/04/switch-to-java-11/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. Switching to Java 11/17 May 4, 2022 by Vojtěch Jurnek community news 你可…

腾讯云4核8G服务器性能如何?支持多少用户访问?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…