轻松搭建自己本地专有的ChatGPT

news2025/2/27 17:30:32

近期发现了一个项目,它的前身是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重新运行程序,即可实现本地知识库更新。如下图所示,添加完《天龙八部》电子书之后,回答结果变得精准。 

提示:

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

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

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

相关文章

Web of Science怎么用有哪些功能

Web of Science你不可不知道的数据库。作为全球最大的学术搜索引擎之一,Web of Science涵盖了众多学科领域,为科研人员提供了全面、高品质的学术资源。本文将详细介绍Web of Science的主要功能及使用步骤,希望可以帮助您更好地利用这一强大的…

揭秘人物稿件写作技巧:如何让你的文字生动起来?

如何写出一篇高质量的人物稿件,让读者沉浸其中,感受到稿件中人物的生动形象呢?本文伯乐网络传媒将从以下几个方面进行探讨:选材、结构、语言和深度。 一、选材:选取热门而有吸引力的话题或爆点 人物稿件的选材至关重要…

React 类式组件

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 类式组件 1.创建类式组件 这里需要注意的是需要继承一下React.Component class MyComponent extends React.Component{}实现render方法 class MyCompone…

一文带你抢先了解腾讯云AI代码助手

背景 随着近年来人工智能技术的广泛应用,各个领域和行业纷纷探索如何利用AI辅助生产与开发。软件开发者也在努力提升开发体验,借助AI的能力进行编码、调试、测试和评审。Github Copilot、Codeium、Amazon CodeWhisperer等都是这个领域的杰出代表。为了满…

关于测试的思考-质量保障体系

一、质量保障体系 1、质量保障体系说明 2、如何构建质量保障体系 3、质量保障案例 二、敏捷开发下的软件测试 1、互联网公司敏捷流程的实践 2、提升测试上线质量(质量右移): 灰度方式:根据机器,根据用户画像&#xff…

RTPV70-30、RTPV72-30电磁比例插装阀放大器

RTSP08-20、RTSP10-20、RTSP12-20、RTSP08-22、RTHSP09-30、RTPV70-30、RTPV72-30电磁比例插装阀额定电磁线圈适合连续工作,应急手控选件,外置式比例放大器,效湿式衔铁结构,可选IP69K防水E型线圈,工业通用阀孔。

vcpkg方式安装zlmediakit

主要参考: https://github.com/ZLMediaKit/ZLMediaKit/wiki/vcpkg%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85zlmediakit vcpkg的相关配置不在本文论述。很多库或源码下载不下来,通过第三方下载后放在download目录下,名称要和vcpkg期望的一致。可通过云服务器…

“五度晟企通”企业发展服务平台正式发布,帮扶企业行稳致远!

在数字中国建设的大背景下,“五度易链”以企业实际发展需求为牵引,以帮扶企业行稳致远为目标,基于全体量产业大数据,运用NLP、AI等新一代信息技术,打造了数字化ToB企业发展服务平台“五度晟企通”,旨在以数…

Java重要知识点

Java JVM 参考:https://www.kuangstudy.com/bbs/1557549426359590914 请你谈谈你对jvm的理解?Java8虚拟机和之前的变化更新?什么是OOM?什么是栈溢出StackOverFlowError?怎么分析?jvm的常见调优参数有哪些&…

大数据如何应用于业务和决策?_光点科技

大数据已经成为当今商业和决策制定中的一个关键因素。随着互联网的普及和技术的不断进步,我们生产的数据量呈指数级增长。这些数据不仅包括来自社交媒体、传感器、移动设备等各种来源的信息,还包括过去难以存储和分析的结构化和非结构化数据。如何利用这…

spring boot 使用AOP+自定义注解+反射实现操作日志记录修改前数据和修改后对比数据,并保存至日志表

一、添加aop starter依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>二&#xff1a;自定义字段翻译注解。&#xff08;修改功能时&#xff0c;需要显示如…

高压放大器在制备功能材料中的应用

高压放大器在制备功能材料中具有广泛的应用。功能材料是一类具有特殊性能和功能的材料&#xff0c;可以在各个领域中发挥重要作用&#xff0c;如能源存储、电子、光电、催化等。高压放大器在制备功能材料的研究和应用中起到关键的作用&#xff0c;本文将介绍高压放大器在制备功…

快速查询快递单号物流,跟踪物流详情

如果你是一位经常网购的人&#xff0c;那么你一定对快递单号物流查询的过程不陌生。每次收到快递&#xff0c;我们都会在快递官网或者第三方平台上输入快递单号进行查询&#xff0c;整个过程比较繁琐。但是&#xff0c;现在有一款名为“固乔快递查询助手”的软件&#xff0c;可…

WRFDA资料同化实践技术应用

数值预报已经成为提升预报质量的重要手段&#xff0c;而模式初值质量是决定数值预报质量的重要环节。资料同化作为提高模式初值质量的有效方法&#xff0c;成为当前气象、海洋和大气环境和水文等诸多领域科研、业务预报中的关键科学方法。资料同化新方法的快速发展&#xff0c;…

向量数据库Milvus Cloud 核心组件Knowhere升级,支持 GPU 索引和 Cosine 相似性类型

熟悉我们的朋友都知道,在 Milvus Cloud和 Zilliz Cloud 中,有一个至关重要的组件——Knowhere。 Knowhere 是什么?如果把向量数据库整体看作漫威银河护卫队宇宙,那么 Knowhere 就是名副其实的总部,它的主要功能是对向量精确搜索其最近邻或通过构建索引进行低延迟、近似…

解决Microsoft Edge无法正常运行的有效方案分享!

Microsoft Edge打不开或不能加载网页是用户在Windows 10、Android、Mac和iOS设备上的网络浏览器上遇到的许多错误之一。其他Microsoft Edge问题可能包括浏览器窗口和选项卡冻结、网站崩溃、互联网连接错误消息以及丢失Microsoft Edge书签、收藏夹、密码和收藏。 Microsoft Edg…

树的基本概念和存储结构

一、树的基本概念 1、树的定义 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 1、有且仅有一个特定的称为根的结点。 2、当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09…

AFL模糊测试

一、AFL简介 AFL&#xff08;American Fuzzy Lop&#xff09;号称是当前最高级的Fuzzing 测试工具之一 &#xff0c;是由安全研究员Michał Zalewski&#xff08;lcamtuf&#xff09;开发的一款 基于覆盖引导&#xff08;Coverage-guided&#xff09;的 模糊测试工具&#xff0…

CentOS系统环境搭建(十九)——CentOS7安装chat GPT

centos系统环境搭建专栏&#x1f517;点击跳转 CentOS7安装chat GPT Welcome to the AI era! 基于上一篇文章CentOS系统环境搭建&#xff08;十八&#xff09;——CentOS7安装Docker20.10.12和docker compose v2&#xff0c;你已经安装了docker20以上的版本。那么&#xff0…

代码随想录第30天 | ● 860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球

860.柠檬水找零 /*** param {number[]} bills* return {boolean}*/ var lemonadeChange function(bills) {let d50let d100let d200for(let i0;i<bills.length;i){if(bills[i]5){d51}else if(bills[i]10){if(d5>1){d5--d10}elsereturn false}else{if(d5>1&&…