基于Langchain-Chatchat + chatGLM3 轻松在本地部署一个知识库

前面三篇分别讲解了如何在本地环境部署大模型,那么今天简单的通过 Langchain-Chatchat 和 chatGLM3结合在本地环境搭建一套属于自己的大模型知识库。

往期llm系列文章

  • 基于MacBook Pro M1芯片运行chatglm2-6b大模型
  • 如何在本地部署chatGLM3
  • 基于ChatGLM.cpp实现低成本对ChatGLM3-6B的量化加速

文章目录

    • 1. 参考
    • 2. Langchain-Chatchat 介绍
    • 3. 本地运行
      • 3.1 硬件配置
      • 3.2 配置环境
      • 3.3 模型下载
      • 3.4 初始化知识库和配置文件
      • 3.5 配置文件修改
      • 3.6 一键启动
    • 4. 使用
      • 4.1 对话
        • 示例1: 文字对话
        • 示例2: 代码编写
        • 示例3: 画图
      • 4.2 知识库
        • 示例1: 知识库中搜索

1. 参考

  • Langchain-Chatchat
  • ChatGLM3介绍
  • conda安装

2. Langchain-Chatchat 介绍

  • 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。

  • 该项目是一个可以实现 __完全本地化__推理的知识库增强方案, 重点解决数据安全保护,私域化部署的企业痛点。 本开源方案采用Apache License,可以免费商用,无需付费。

  • 目前支持市面上主流的本地大语言模型和Embedding模型,支持开源的本地向量数据库。

本项目实现原理如下图所示,过程包括加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的 top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答

在这里插入图片描述
从文档处理角度来看,实现流程如下:
在这里插入图片描述

详细介绍参考官方README介绍。

3. 本地运行

3.1 硬件配置

  • 芯片:Apple M1 Pro
  • 内存:32 GB

3.2 配置环境

conda create -n chatglm2 python=3.11
conda activate chatglm2
cd /Users/joseph.wang/llm
#拉取仓库
git clone https://github.com/chatchat-space/Langchain-Chatchat.git
#进入目录
cd Langchain-Chatchat
#安装全部依赖
$ pip install -r requirements.txt 
$ pip install -r requirements_api.txt
$ pip install -r requirements_webui.txt  
# 默认依赖包括基本运行环境(FAISS向量库)。如果要使用 milvus/pg_vector 等向量库,请将 requirements.txt 中相应依赖取消注释再安装。

请注意,LangChain-Chatchat 0.2.x 系列是针对 Langchain 0.0.x 系列版本的,如果你使用的是 Langchain 0.1.x 系列版本,需要降级您的Langchain版本。

3.3 模型下载

cd /Users/joseph.wang/llm/Langchain-Chatchat
git lfs install
git clone https://huggingface.co/THUDM/chatglm3-6b
git clone https://huggingface.co/BAAI/bge-large-zh

在这里插入图片描述

3.4 初始化知识库和配置文件

按照下列方式初始化自己的知识库和简单的复制配置文件

python3 copy_config_example.py
python3 init_database.py --recreate-vs

3.5 配置文件修改

cd /Users/joseph.wang/llm/Langchain-Chatchat/configs
(chatglm2)  joseph.wang@joseph  ~/llm/Langchain-Chatchat/configs   master ±  tree -L 1
.
├── __init__.py
├── __pycache__
├── basic_config.py
├── basic_config.py.example
├── kb_config.py
├── kb_config.py.example
├── model_config.py
├── model_config.py.example
├── prompt_config.py
├── prompt_config.py.example
├── server_config.py
└── server_config.py.example

basic_config.pykb_config.pymodel_config.pyprompt_config.pyserver_config.py 这些文件都有不同的作用,由于我是用Mac M1来运行的,因为需要修改model_config.py这个文件。
编辑model_config.py,只修改如下部分,其他地方不用修改,或者根据自己的模型需要修改即可。

...
EMBEDDING_MODEL = "bge-large-zh"
...
EMBEDDING_DEVICE = "mps"
...
LLM_MODELS = ["chatglm3-6b"] #, "zhipu-api", "openai-api"]
...
LLM_DEVICE = "mps"
...
MODEL_PATH = {"embed_model": {..."bge-large-zh": "/Users/joseph.wang/llm/Langchain-Chatchat/bge-large-zh",...},"llm_model": {"chatglm3-6b": "/Users/joseph.wang/llm/Langchain-Chatchat/chatglm3-6b",...},......

3.6 一键启动

cd /Users/joseph.wang/llm/Langchain-Chatchat
python3 startup.py -a

在这里插入图片描述
内存消耗(会比较消耗内存)
在这里插入图片描述
启动过程如下
在这里插入图片描述
在这里插入图片描述

4. 使用

4.1 对话

示例1: 文字对话

在这里插入图片描述

示例2: 代码编写

在这里插入图片描述
虽然代码中有错误的部分,但是影响不大,运行起来没问题
在这里插入图片描述

示例3: 画图

在这里插入图片描述

在这里插入图片描述

4.2 知识库

创建知识库
在这里插入图片描述
填写知识库的信息和选择向量库的类型、模型(在model_config.py中已经定义了)
在这里插入图片描述
选择本地的文档
在这里插入图片描述
在这里插入图片描述

后台导入数据过程
在这里插入图片描述
想数据存放到向量库中
在这里插入图片描述

示例1: 知识库中搜索

在这里插入图片描述

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

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

相关文章

论文阅读-通过云特征增强的深度学习预测云工作负载转折点

论文名称:Cloud Workload Turning Points Prediction via Cloud Feature-Enhanced Deep Learning 摘要 云工作负载转折点要么是代表工作负载压力的局部峰值点,要么是代表资源浪费的局部谷值点。预测这些关键点对于向系统管理者发出警告、采取预防措施以…

企业动态 | UFAPKU“金融科技”沙龙走进同创永益——前沿技术在金融科技领域的应用

金融科技作为金融发展的驱动力量,对金融行业有着深远的影响。金融行业通过技术创新和数字化转型,极大地提高了金融服务和产品的效率和便捷性。1月21日,UFAPKU“金融科技”第二期沙龙在北大校友企业同创永益北京总部举办,数十位来自…

请问CTF是什么?请介绍一下关于隐水印的知识特点技术原理应用领域技术挑战

目录 请问CTF是什么? 请介绍一下关于隐水印的知识 特点 技术原理 应用领域 技术挑战 请问CTF是什么? CTF(Capture The Flag,夺旗比赛)是一种信息安全竞赛,常见于计算机安全领域。这种比赛模拟各种信…

fastjson 导致的OOM

fastjson 导致的OOM 示例代码 public static void main(String[] args) throws Exception {try {List<Integer> list JSONObject.parseArray("[2023,2024", Integer.class);}catch (Exception e){System.err.println("error");}System.out.println…

一文搞懂 springboot 如何融合数据源

1、简介 springboot 支持关系型数据库的相关组件进行配置&#xff0c;包括数据源、连接池、事务管理器等的自动配置。降低了数据库使用的难度&#xff0c;除了 mysql 还支持 Derby、H2等嵌入式数据库的自动配置&#xff0c;MongoDB、Redis、elasticsearch等常用的 NoSQL 的数据…

BGP邻居故障检测

第一种情况:如果AR2和AR4采用直连建立邻居,则排查步骤如下: 1)在AR2和AR4上使用ping x.x.x.x命令检查AR2和AR4用于建立EBGP邻居关系的直连地址连通性是否正常。如果不能ping通。则需要使用二分法从网络层向下层逐层进行排查,首先检查接口地址及路由的可达性,修改完成后,如…

Codeforces Round 914 (Div. 2)(D1/D2)--ST表

Codeforces Round 914 (Div. 2)(D1/D2)–ST表 D1. Set To Max (Easy Version) 题意&#xff1a; 给出长度为n的数组a和b&#xff0c;可以对a进行任意次数操作&#xff0c;操作方式为选择任意区间将区间内值全部变成该区间的最大值&#xff0c; 是否有可能使得数组a等于数组b…

C# CAD界面-自定义窗体(三)

运行环境 vs2022 c# cad2016 调试成功 一、引用 二、开发代码进行详细的说明 初始化与获取AutoCAD核心对象&#xff1a; Database db HostApplicationServices.WorkingDatabase;&#xff1a;这行代码获取当前工作中的AutoCAD数据库对象。在AutoCAD中&#xff0c;所有图形数…

《短链接--阿丹》--技术选型与架构分析

整个短链接专栏会持续更新。有兴趣的可以关注一下我的这个专栏。 《短链接--搭建解析》--立项+需求分析文档-CSDN博客 阿丹: 其实整套项目中的重点,根据上面的简单需求分析来看,整体的项目难题有两点。 1、快速的批量生成短链,并找到对应的存储。 并且要保持唯一性质。…

【Linux驱动】块设备驱动(二)—— 块设备读写(使用请求队列)

块设备的操作函数并没有类似于字符驱动中的read 和write函数&#xff0c;要实现读写操作&#xff0c;只能在请求处理函数中实现。这就分为两种&#xff0c;是否要使用请求队列&#xff0c;请求队列的主要作用是管理和调度IO请求。在以下情况中&#xff0c;一般需要用到请求队队…

跑路页面HTML源码

简单的HTMLJSCSS&#xff0c;记事本修改内容&#xff0c;喜欢的朋友可以下载 https://download.csdn.net/download/huayula/88811984

vivado RTL综合中的多线程

RTL综合中的多线程 在多处理器系统上&#xff0c;RTL合成默认情况下利用多个CPU核心&#xff08;最多四个&#xff09;来加快编译时间。同时运行的线程的最大数量会有所不同&#xff0c;具体取决于处理器的数量可在系统、操作系统和流程阶段使用&#xff08;请参阅Vivado Desi…

HTTP1.1、HTTP2、HTTP3

HTTP1.1 HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。支持管道&#xff08;pipeline&#xff09;网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&…

在VM虚拟机上搭建MariaDB数据库服务器

例题&#xff1a;搭建MariaDB数据库服务器&#xff0c;并实现主主复制。 1.在二台服务器中分别MariaDB安装。 2.在二台服务器中分别配置my.cnf文件&#xff0c;开启log_bin。 3.在二台服务器中分别创建专用于数据库同步的用户replication_user&#xff0c;并授权SLAVE。&#x…

Matplotlib绘制炫酷柱状图的艺术与技巧【第60篇—python:Matplotlib绘制柱状图】

文章目录 Matplotlib绘制炫酷柱状图的艺术与技巧1. 簇状柱状图2. 堆积柱状图3. 横向柱状图4. 百分比柱状图5. 3D柱状图6. 堆积横向柱状图7. 多系列百分比柱状图8. 3D堆积柱状图9. 带有误差线的柱状图10. 分组百分比柱状图11. 水平堆积柱状图12. 多面板柱状图13. 自定义颜色和样…

c#string方法对比

字符串的截取匹配操作在开发中非常常见&#xff0c;比如下面这个示例&#xff1a;我要匹配查找出来字符串数组中以“abc”开头的字符串并打印&#xff0c;我下面分别用了两种方式实现&#xff0c;代码如下&#xff1a; using System; namespace ConsoleApp23{ class Progra…

aidl复杂流程封装

1 aidl相关困扰点 1 制作步骤复杂&#xff0c;先定义然后编译&#xff0c;然后复制&#xff0c;两边都要一一对应 2 增加回调&#xff0c;自定义对象流程更加麻烦&#xff0c;还要处理对象数据流是 in 还是out。 3 一方异常怎么办&#xff0c;虽然服务端可以用 RemoteCallbackL…

Retrofit源码分析及理解

参考文档&#xff1a; 12W字&#xff1b;2022最新Android11位大厂面试专题&#xff08;一&#xff09; - 掘金 Retrofit 版本号&#xff1a;2.9.0 Retrofit简单来说&#xff0c;就是对OkHttp上层进行了封装&#xff0c;已达到用户方便使用管理网络请求的目的。 Retrofit内部有…

力扣热门100题刷题笔记 - 10. 正则表达式匹配

力扣热门100题 - 10. 正则表达式匹配 题目链接&#xff1a;10. 正则表达式匹配 题目描述&#xff1a; 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配&#xff…

asqlcell,一个超强的 Python 库!

前言 大家好&#xff0c;今天为大家分享一个超强的 Python 库 - asqlcell。 Github地址&#xff1a;https://github.com/datarho/asqlcell Python asqlcell 是一个用于执行异步数据库操作的开源库&#xff0c;它允许开发者通过异步的方式与数据库进行交互&#xff0c;提高了数…