轻松搭建本地知识库的ChatGLM2-6B

近期发现了一个项目,它的前身是ChatGLM,在我之前的博客中有关于ChatGLM的部署过程,本项目在前者基础上进行了优化,可以基于当前主流的LLM模型和庞大的知识库,实现本地部署自己的ChatGPT,并可结合自己的知识对模型进行微调,让问答中包含自己上传的知识。依托于本项目支持的开源 LLM 与 Embedding 模型,本项目可实现全部使用开源模型离线私有部署。与此同时,本项目也支持 OpenAI GPT API 的调用,并将在后续持续扩充对各类模型及模型 API 的接入。下面具体讲解如何来实现本地部署,过程十分简单,使用起来十分方便。

目录

一、代码下载

二、 模型支持

2.1 LLM 模型支持

2.2 Embedding 模型支持

三、开发部署

3.1 软件需求

3.2 开发环境准备

3.3 下载模型至本地

3.4 设置配置项

3.5 知识库初始化与迁移

3.6 一键启动API 服务或 Web UI

四、添加个人知识库

4.1 本地添加知识库

4.2 通过web页面添加知识库 

4.3 重新微调模型 


一、代码下载

 项目链接 GitHub - chatchat-space/Langchain-Chatchat

将该代码下载到本地。

二、 模型支持

本项目中默认使用的 LLM 模型为 THUDM/chatglm2-6b,默认使用的 Embedding 模型为 moka-ai/m3e-base 为例。

2.1 LLM 模型支持

本项目最新版本中基于 FastChat 进行本地 LLM 模型接入,支持模型如下:

  • meta-llama/Llama-2-7b-chat-hf
  • Vicuna, Alpaca, LLaMA, Koala
  • BlinkDL/RWKV-4-Raven
  • camel-ai/CAMEL-13B-Combined-Data
  • databricks/dolly-v2-12b
  • FreedomIntelligence/phoenix-inst-chat-7b
  • h2oai/h2ogpt-gm-oasst1-en-2048-open-llama-7b
  • lcw99/polyglot-ko-12.8b-chang-instruct-chat
  • lmsys/fastchat-t5-3b-v1.0
  • mosaicml/mpt-7b-chat
  • Neutralzz/BiLLa-7B-SFT
  • nomic-ai/gpt4all-13b-snoozy
  • NousResearch/Nous-Hermes-13b
  • openaccess-ai-collective/manticore-13b-chat-pyg
  • OpenAssistant/oasst-sft-4-pythia-12b-epoch-3.5
  • project-baize/baize-v2-7b
  • Salesforce/codet5p-6b
  • StabilityAI/stablelm-tuned-alpha-7b
  • THUDM/chatglm-6b
  • THUDM/chatglm2-6b
  • tiiuae/falcon-40b
  • timdettmers/guanaco-33b-merged
  • togethercomputer/RedPajama-INCITE-7B-Chat
  • WizardLM/WizardLM-13B-V1.0
  • WizardLM/WizardCoder-15B-V1.0
  • baichuan-inc/baichuan-7B
  • internlm/internlm-chat-7b
  • Qwen/Qwen-7B-Chat
  • HuggingFaceH4/starchat-beta
  • 任何 EleutherAI 的 pythia 模型,如 pythia-6.9b
  • 在以上模型基础上训练的任何 Peft 适配器。为了激活,模型路径中必须有 peft 。注意:如果加载多个peft模型,你可以通过在任何模型工作器中设置环境变量 PEFT_SHARE_BASE_WEIGHTS=true 来使它们共享基础模型的权重。

以上模型支持列表可能随 FastChat 更新而持续更新,可参考 FastChat 已支持模型列表。

除本地模型外,本项目也支持直接接入 OpenAI API,具体设置可参考 configs/model_configs.py.example 中的 llm_model_dict 的 openai-chatgpt-3.5 配置信息。

2.2 Embedding 模型支持

本项目支持调用 HuggingFace 中的 Embedding 模型,已支持的 Embedding 模型如下:

  • moka-ai/m3e-small
  • moka-ai/m3e-base
  • moka-ai/m3e-large
  • BAAI/bge-small-zh
  • BAAI/bge-base-zh
  • BAAI/bge-large-zh
  • BAAI/bge-large-zh-noinstruct
  • sensenova/piccolo-base-zh
  • sensenova/piccolo-large-zh
  • shibing624/text2vec-base-chinese-sentence
  • shibing624/text2vec-base-chinese-paraphrase
  • shibing624/text2vec-base-multilingual
  • shibing624/text2vec-base-chinese
  • shibing624/text2vec-bge-large-chinese
  • GanymedeNil/text2vec-large-chinese
  • nghuyong/ernie-3.0-nano-zh
  • nghuyong/ernie-3.0-base-zh
  • OpenAI/text-embedding-ada-002

三、开发部署

3.1 软件需求

本项目已在 Python 3.8.1 - 3.10,CUDA 11.7 环境下完成测试。已在 Windows、ARM 架构的 macOS、Linux 系统中完成测试。 

3.2 开发环境准备

参见 开发环境准备。

请注意: 0.2.3 及更新版本的依赖包与 0.1.x 版本依赖包可能发生冲突,强烈建议新建环境后重新安装依赖包。

首先要创建虚拟环境,然后在虚拟环境中切换到代码文件目录:

cd /d E:\Demo\Langchain-Chatchat-master   # 切换到代码所在位置

创建虚拟环境:

conda create -n Chat_GLM python=3.9  # 虚拟环境名称为ChatGLM

启用虚拟环境:

conda activate ChatGLM

安装环境依赖:

pip install requirements.txt

安装zh_core_web_sm语言包:

spacy/zh_core_web_sm at main (huggingface.co)

只需下载下方图片目录中的whl文件,然后切换到zh_core_web_sm-any-none-any.whl目录,采用pip 安装 

pip install zh_core_web_sm-any-none-any.whl

3.3 下载模型至本地

如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。

以本项目中默认使用的 LLM 模型 THUDM/chatglm2-6b 与 Embedding 模型 moka-ai/m3e-base 为例。直接点击下载。

网盘下载:

链接:https://pan.baidu.com/s/14vm-yc8EDQ3DqrRAliFWXw?pwd=eaxq 
提取码:eaxq

链接:https://pan.baidu.com/s/1OAqm5sQOUHYyg-YzZu7eCw?pwd=0arh 
提取码:0arh

3.4 设置配置项

复制模型相关参数配置模板文件 configs/model_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 model_config.py

复制服务相关参数配置模板文件 configs/server_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 server_config.py

在开始执行 Web UI 或命令行交互前,请先检查 configs/model_config.py 和 configs/server_config.py 中的各项模型参数设计是否符合需求:

  • 请确认已下载至本地的 LLM 模型本地存储路径写在 llm_model_dict 对应模型的 local_model_path 属性中,如:
llm_model_dict={"chatglm2-6b": {"local_model_path": "E:\Demo\chatglm2-6b",   # 只需该这里"api_base_url": "http://localhost:8888/v1",  # "name"修改为 FastChat 服务中的"api_base_url""api_key": "EMPTY"},}

  • 请确认已下载至本地的 Embedding 模型本地存储路径写在 embedding_model_dict 对应模型位置,如:
embedding_model_dict = {"m3e-base": "E:\Demo\m3e-base",   # 只需改这里}

如果你选择使用OpenAI的Embedding模型,请将模型的 key写入 embedding_model_dict中。使用该模型,你需要能够访问OpenAI官的API,或设置代理。

3.5 知识库初始化与迁移

当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库(我们强烈建议您在执行操作前备份您的知识文件)。

  • 如果您是从 0.1.x 版本升级过来的用户,针对已建立的知识库,请确认知识库的向量库类型、Embedding 模型与 configs/model_config.py 中默认设置一致,如无变化只需以下命令将现有知识库信息添加到数据库即可:

  • python init_database.py
  • 如果您是第一次运行本项目,知识库尚未建立,或者配置文件中的知识库类型、嵌入模型发生变化,或者之前的向量库没有开启 normalize_L2,需要以下命令初始化或重建知识库:

  • python init_database.py --recreate-vs

3.6 一键启动API 服务或 Web UI

1. 一键启用默认模型

一键启动脚本 startup.py,一键启动所有 Fastchat 服务、API 服务、WebUI 服务,示例代码:

python startup.py -a

自动跳转到web页面,若不能跳转记得在代码末尾按一下Enter键,即可一键启动web页面。 

并可使用 Ctrl + C 直接关闭所有运行服务。如果一次结束不了,可以多按几次。

可选参数包括 -a (或--all-webui)--all-api--llm-api-c (或--controller)--openai-api-m (或--model-worker)--api--webui,其中:

--all-webui 为一键启动 WebUI 所有依赖服务;
--all-api 为一键启动 API 所有依赖服务;
--llm-api 为一键启动 Fastchat 所有依赖的 LLM 服务;
--openai-api 为仅启动 FastChat 的 controller 和 openai-api-server 服务;
其他为单独服务启动选项。

2. 启用非默认模型 

若想指定非默认模型,需要用 --model-name 选项,示例:

python startup.py --all-webui --model-name Qwen-7B-Chat

更多信息可通过 python startup.py -h查看。

四、添加个人知识库

如果当前回答结果并不理想,如下图所示,可添加知识库,对知识进行优化

4.1 本地添加知识库

将文档添加到knowledge_base——samples——content目录下:

4.2 通过web页面添加知识库 

4.3 重新微调模型 

知识库添加完成之后,按照3.5-3.6重新运行程序,即可实现本地知识库更新。如下图所示,添加完《天龙八部》电子书之后,回答结果变得精准。 

提升回答速度,把CPU改为GPU:

model_config.py文件中,修改 

# Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
EMBEDDING_DEVICE = "auto"

为:

# Embedding 模型运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
EMBEDDING_DEVICE = "cuda"

修改

# LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
LLM_DEVICE = "auto"

为:

# LLM 运行设备。设为"auto"会自动检测,也可手动设定为"cuda","mps","cpu"其中之一。
LLM_DEVICE = "cuda"

提示:

若上述部署中遇到问题,可关注我dy:dyga9uraeovh 

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

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

相关文章

GC 算法与种类

对于垃圾收集(GC), 我们需要考虑三件事情:哪些内存需要回收?如何判断是垃圾对象?垃圾回收算法有哪些? 一、GC的工作区域 1、不是GC的工作区域 (1)程序计数器、虚拟机栈和本地方法栈三个区域是线程私有的&…

python excel 读取及写入固定格式

import xlrd import xlwt import re import pandas as pd from datetime import date,datetimefile_path "C:\\Users\\function_model.xls" def readexcel():df pd.read_excel(file_path ,"配置")# e_id# id# expression# name# freq# column_data df[e…

yolov8 模型部署--TensorRT部署-c++服务化部署

写目录 yolov8 模型部署--TensorRT部署1、模型导出为onnx格式2、模型onnx格式转engine 部署 yolov8 模型部署–TensorRT部署 1、模型导出为onnx格式 如果要用TensorRT部署YOLOv8,需要先使用下面的命令将模型导出为onnx格式: yolo export modelyolov8n.p…

FPGA时序分析与约束(2)——时序电路时序

一、前言 在之前的内容中,我们介绍了组合电路的时序问题和可能导致的毛刺,强烈推荐在阅读前文的基础上再继续阅读本文, 前文链接:FPGA时序分析与约束(1)——组合电路时序 这篇文章中,我们将继续…

解决微信小程序动态生成表单情况下,遍历picker,并无法修改列表里面下标key的解决访方案

需求描述: 通过请求后端接口,动态获取表单的数据源(json格式,数组),使用小程序wx:for循环遍历,对接口返回的数组中的一个字段存为picker组件选择器,并允许用户进行选择修改该值。 …

MySQL表空间

MySQL表空间 文章目录 MySQL表空间1. MySQL中的表1.1 IOT表1.2 InnoDB逻辑存储结构2. 独立表空间2.1 段 segment2.1.1 段的概念2.1.2 段的分类2.1.2.1 叶子节点段主要结构2.1.2.2 非叶子节点段2.1.3 碎片区2.2 区2.2.1 区的概念2.2.2 区的结构2.2.2.1 XDES Entry结构2.3 页2.3.…

tpwe兼容微擎小程序前端请求写法

当使用TPWe兼容微擎小程序前端时,可以按照以下方式编写前端请求: 修改siteinfo.js下面的配置文件。 var e {uniacid: "10001",acid: "10001",multiid: "0",version: "1.0",siteroot: "https://域名/inde…

基于51单片机的称重电子秤proteus仿真设计

一、设计背景 随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题,在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制,测量物体重量部分使用称重传…

springCloud bean的加载流程

Spring Cloud是Spring的一个子项目,用于构建基于Spring Boot的分布式系统。在Spring Cloud中,Bean的加载过程与Spring框架的Bean加载过程相似,主要包括以下几个步骤: 1、读取配置文件:Spring Cloud从配置文件中加载Be…

Activiti7工作流引擎:在线流程编辑器Activiti Modoler5.x

一&#xff1a;简介 有的时候我们的流程图需要业务人员自己绘制&#xff0c;然后使用自己绘制的流程图&#xff0c;此时就需要一个在线流程图编辑器需要集成到我们的web系统中。Activiti Modoler是Activiti官方推出的在线流程编辑器。 二&#xff1a;pom.xml <dependency…

飞书公式总结

文本处理函数 飞书中的表格&#xff0c;需要实现 内容内容1条件1内容2条件2内容3条件3今天是周一;可以出去玩今天是周一能今天天气不错不能可以出去玩能 条件1&#xff0c;2&#xff0c;3为能时&#xff0c;把对应的内容1&#xff0c;内容2&#xff0c;内容3复制到内容 TEX…

Golang项目实战(三)

Golang项目实战&#xff08;三&#xff09; 该项目是使用grpcgin来构建的一个电商微服务项目&#xff0c;使用consul来注册和发现微服务。 项目简介创建项目架构创建货币服务创建货币微服务处理器将货币微服务注册到consul下载安装consul并发布服务创建商品微服务准备商品数据…

HNU小学期工训-STC15单片机模型大作业实验报告

STC15单片机模型大作业实验报告 全称&#xff1a;基于STC15单片机与OLED显示模块&PC端演示的多功能声光温振时钟智能手表模型 计科210X 甘晴void 202108010XXX 【请注意&#xff1a;本作业入选优秀范例&#xff0c;直接照抄源码有很大风险】 【建议理解原理之后作改动】 …

基于SSM框架的德云社票务系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

C#之位运算

符号&#xff1a;<< >> & | ^ ~ 作用&#xff1a;用于二进制数据的操作 表达式&#xff1a; 表达式 运算符 表达式 ~表达式或者是变量 优先级&#xff1a;~高于<< , >> 高于 & 高于 | ^ 结合性&#xff1a;左结合 说明&#xff1…

2024届校招-Java开发笔试题-S4卷

有三种题型&#xff1a;单项选择题&#xff08;10道&#xff09;、不定项选择题&#xff08;10道&#xff09;、编程题&#xff08;3道&#xff09; 下面是一些回忆的题目&#xff1a; 1.哪种设计模式将对象的创建与使用分离&#xff0c;通过工厂类创建对象 答&#xff1a;工…

Linux入门教程||Linux系统目录结构

登录系统后&#xff0c;在当前命令窗口下输入命令&#xff1a; ls / 你会看到如下图所示: 树状目录结构&#xff1a; 以下是对这些目录的解释&#xff1a; /bin&#xff1a; bin是Binary的缩写, 这个目录存放着最经常使用的命令。 /boot&#xff1a; 这里存放的是启动Linux时…

RP9学习-1

一.基础 1.10个面板位置示意图&#xff1a; 2.常用英文 1.鼠标点击&#xff1a;click or tap 3.工作区 1.恢复默认工作区&#xff1a; view-->reset view 2.自定义工作区&#xff1a; 可以用鼠标左键拖动面板到独立的位置或者吸附到其他面板上 3.自定义工具栏 view-->T…

优漫动游 常见的AI视频生成网站的官方网站:

1、Lumen5 Lumen5是一款在线视频制作工具&#xff0c;利用人工智能技术能够迅速将文本、和音乐转换为视频。它可以帮助你把博客文章、社交媒体内容等转化为吸引人的视频&#xff0c;从而提高你的品牌曝光率和社交媒体的参与度。 2.Animoto Animoto是一个视频制作平台&…

使用element-ui导航,进入对应的三级页面菜单保持点击状态

1.注意事项 01.路由中使用了keepAlive属性&#xff0c;要用keepAlive&#xff1a;true&#xff0c;不能等于false&#xff0c;使用false页面会刷新 2.使用的方法 NavMenu 导航菜单 3.项目实例 <template><div class"policy-home"><div class"…