浅聊langchain-chatchat

个人的一点经验和总结,希望能帮助到大家。有不对的地方请留言和指正!

langchain-GLM是什么

        langchain-GLM是一个本地知识库应用解决方案,支持以cli、web、api方式提供以本地知识库在线资源为知识素材的对话服务,对中英文场景对话支持友好。它由LLM(大语言模型,例如:ChatGLM-6B、星火、文心一言)和Embedding 模型组成,支持私有化部署。

原理

  1. 加载文件
  2. 读取文本
  3. 文本分割
  4. 文本向量化(将文本表示成计算机可以识别的实数向量的过程)
  5. 问句向量化(问句向量化是自然语言处理中的一种技术,其目标是将问句转化为计算机可以解析的向量形式。这一过程通常发生在文本向量化之后,作为更复杂任务如问题回答、对话系统等的一部分。)
  6. 在文本向量中匹配出与问句向量最相似的top k
  7. 匹配出的文本作为上下文和问题一起添加到prompt中 
  8. 提交给LLM生成回答。

为什么要选择langchain

优点

  1. 支持私有化部署
  2. 几乎支持国内市面上开源的在线或本地模型
  3. 消费级GPU或者CPU上即可安装并运行
  4. 支持api方式提供服务,解决了大模型对话嵌入自有应用难的问题

缺点

  1. 大多数家用电脑配置不够运行大模型。需要 money 购买GPU
  2. 国内下载镜像难。模型镜像大,好几十G

解决了什么问题

稍微对大模型运行原理了解的童靴们可能都了解,大模型也不是生来什么领域的知识都懂的。需要给它喂数据,不断训练。

企业要想用大模型高效利用数据,把企业数据给大模型,那肯定是不可能的。

这个时候大模型本地部署,私有数据自己管控就是必要条件了。恰恰langchain就解决了这个问题。

langchain-GLM版本0.1.* 和0.2.*区别

  1. 安装方式:0.1.* 既支持docker方式部署,也支持本地加载模型,0.2.*版本目前仅支持从本地加载模型方式部署;
  2. 功能上:0.2.*版本支持LLM 更加全面。既包含在线开源大模型,也支持本地模型。

硬件、软件配置以及私有化部署方式

硬件配置要求:

  • python >=3.10 

第一种:安装0,1.*版本【建议使用docker方式部署】:

1.运行环境安装

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit-base
sudo systemctl daemon-reload 
sudo systemctl restart docker

2.查看GPU编号,命令:nvidia-smi

 

3.安装langchain-chatchat镜像

#方式1
docker run -d -p 80:7860 --gpus all registry.cn-beijing.aliyuncs.com/isafetech/chatmydata:1.0

#参数解释:
--gpus all  指定给该设备所有可用的GPU
--gpus '"device=1"'  指定设备编号为1的GPU

#方式2
git clone -b 0.1.17 --single-branch https://github.com/chatchat-space/Langchain-Chatchat.git

docker build -f Dockerfile-cuda -t chatglm-cuda:latest .
docker run --gpus all -d --name chatglm -p 7860:7860  chatglm-cuda:latest

#若要使用离线模型,请配置好模型路径,然后此repo挂载到Container
docker run --gpus all -d --name chatglm -p 7860:7860 -v ~/github/langchain-ChatGLM:/chatGLM  chatglm-cuda:latest

3.查看启动日志

docker logs 容器ID

 4.启用后台服务

docker exec -it 容器ID /bin/bash

#命令行服务
python cli_demo.py

#接口服务
python api.py

#web服务
python webui.py

第二种部署方式:

  1. 下载并安装anaconda。为什么要安装anaconda?【见本文-常见问题2】
    wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh
    bash Anaconda3-2023.03-1-Linux-x86_64.sh
    
    conda create -n ai python=3.11  #创建虚拟环境
    conda activate ai  #激活虚拟环境
    conda list  #查看已安装的包
    conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia #安装依赖包
  2. 下载源码,安装依赖
    
    # 拉取仓库
    $ 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 中相应依赖取消注释再安装。
  3. 下载模型
    $ git lfs install
    
    $ git clone https://huggingface.co/THUDM/chatglm2-6b
    $ git clone https://huggingface.co/moka-ai/m3e-base
    
    ###建议:上面地址下载慢的话,访问https://e.aliendao.cn/,搜索 chatglm2-6b和m3e-base,然后按照下面方式下载
    
    git clone https://github.com/git-cloner/aliendao
    cd aliendao
    pip install -r requirements.txt -i https://pypi.mirrors.ustc.edu.cn/simple --trusted-host=pypi.mirrors.ustc.edu.cn
    
    python model_download.py --e --repo_id  模型ID
    
    
  4. 初始化配置模型
    $ python copy_config_example.py
  5. 修改配置文件,找到配置文件(路径:/configs/model_config.py),修改模型加载路径。
    # 如果模型目录名称和 MODEL_PATH 中的 key 或 value 相同,程序会自动检测加载,无需修改 MODEL_PATH 中的路径。
    MODEL_ROOT_PATH = "/usr/local/"
    
    
    #配置LLM线上模型参数
    ONLINE_LLM_MODEL = {
    }
    
    #配置本地模型参数,模型的相对路径,相对 MODEL_ROOT_PATH 所配置的路径
    MODEL_PATH = {
    "embed_model":{
    "m3e-base": "moka-ai/m3e-base"
    }, 
    "llm_model":{
    "chatglm2-6b": "THUDM/chatglm2-6b",
    }
    
    
    #### 
    #注意:线上模型和本地模型只需要配置一个即可。

  6. 初始化数据库
    python init_database.py --recreate-vs
  7. 一键启动
    python startup.py -a

选择适合你的方式安装即可。 

常见问题

部署方式一常见问题:

1、docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]].或者 apt-get install -y nvidia-container-toolkit找不到或者下载失败

解决方案:

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey

apt-key add gpgkey

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

apt-get update && apt-get install -y nvidia-container-toolkit
systemctl restart docker

2、为什么要使用anaconda?

       anaconda是什么?

        Anaconda是Python的一个发行版本,专注于数据分析,能够对包和环境进行管理。它内置了conda、pip等管理工具,以及Jupyter Notebook、Spyder等开发工具

  • 避免已安装但是不满足运行大模型的python版本受影响;
  • 隔离python运行环境和依赖;
  • anaconda的基本操作
    conda env list  #查看已有的环境
    conda create -n ai python=3.11  #创建虚拟环境
    conda activate ai  #激活虚拟环境
    conda list  #查看已安装的包
    conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia #安装依赖包
    
    conda deactivate #退出虚拟环境

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ESP32-Web-Server编程- 通过文本框向 Web 提交数据

ESP32-Web-Server编程- 通过文本框向 Web 提交数据 概述 前述章节我们通过简单 HTML、AJAX、Websocket、SSE 在网页上显示数据,通过网页上的按钮控制 ESP32 的行为。从本节开始,我们将进一步了解通过网页与 ESP32 进行交互的方法。 实现更复杂的交互功…

软件工程--需求工程--学习笔记(超详细)

软件需求工程是软件开发周期的第一个阶段,也是关系到软件开发成败最关键阶段,本章讲解需求的基础知识和需求工程的关键活动。这些知识对于结构化方法、面向对象方法、面向服务方法等都是适用的 本文参考教材:沈备军老师的《软件工程原理》 目…

ERP软件对Oracle安全产品的支持

这里的ERP软件仅指SAP ECC和Oracle EBS。 先来看Oracle EBS: EBS的认证查询方式,和数据库认证是一样的。这个体验到时不错。 结果中和安全相关的有: Oracle Database VaultTransparent Data Encryption TDE被支持很容易理解,…

什么是PDN的交流阻抗?

什么是PDN的交流阻抗? 在电力电子领域,PDN(Power Distribution Network)的交流阻抗是一个重要的概念,它反映了PDN在交流电源和负载之间传输电能的能力。了解PDN的交流阻抗对于优化电源设计、提高系统性能和可靠性具有重…

Linux 如何在文件中查找指定内容,grep的用法

Linux 如何在文件中查找指定内容 1、 如我们 查找 log_file_catalina.out 文件中,包含 ‘总数:900’ 的字符内容 2、 在日志中查看 83910_law_21CFBC7EB25B1FF60255FE7F4BE1BCCF1CE726F6_0.bdyhf 的相关内容 grep 83910_law_21CFBC7EB25B1FF60255FE7…

猜-MISC-bugku-解题步骤

——CTF解题专栏—— 题目信息: 题目:猜 作者:harry 提示: 解题附件:flag格式key{图中人物名字全拼} 解题思路: 这......头都没有,让我guess???详细信息看…

【重点文章】将Java程序打包成exe文件,无Java环境也可以运行(解决各种疑难杂症)

文章目录 一、将Java程序打成jar包二、将Jar打成exe三、加壳改造成安装包 编译器为IDEA 一、将Java程序打成jar包 2. 3. 你打的包一般会出现在根目录下面的out文件夹下面  当然你也可以用maven的package功能打包,效果是一样的   二、将Jar打成exe 使用工具e…

低代码平台在数字化转型过程中的定位

内容来自演讲:郭昊东 | 上海外服 | 流程分析工程师 摘要 本文介绍了外服集团的 IT 共享中心在低代码平台应用开发方面的实践经验。他们选择低代码平台的原因包括开发成本低、快速看到实际产品以及能够解决数据孤岛和影子 IT 等问题。他们在应用开发中面临的挑战包括…

[iOS开发]UITableView的性能优化

一些基础的优化 (一)CPU 1. 用轻量级对象 比如用不到事件处理的地方,可以考虑使用 CALayer 取代 UIView CALayer * imageLayer [CALayer layer]; imageLayer.bounds CGRectMake(0,0,200,100); imageLayer.position CGPointMake(200,200…

如何在 Web 应用程序中查找端点?

如何在 Web 应用程序中查找端点? 这篇文章主要讲述了如何在网络应用中找到端点。以下是文章的主要要点: 端点是网络服务的访问地址,通过引用这个URL,客户可以访问服务提供的操作。端点提供了寻址Web服务端点所需的信息。 HTTP消息是服务器和客户端之间交换数据的方式,包…

原生GPT本地及云端部署方式保姆级教程

前提条件 部署必须要有一个超过1年的Github账号 本地服务部署 运行效果 部署方法 下载安装包 暂时无法在飞书文档外展示此内容 GitHub授权登录: https://dash.pandoranext.com/ 登录后是这个样子: 复制下面红框里面这个License Id 编辑Config.js…

Linux下删除当前目录下的所有目录

Linux下删除当前目录下的所有目录 Linux下删除当前目录下的所有目录,可以使用命令:rm -rf ./* rm -rf ./*可以得知rm -rf ./命令是删除当前目录下的所有文件和文件夹,但不会删除根目录下的文件。其中,".“代表当前目录&…

智能优化算法应用:基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于纵横交叉算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.纵横交叉算法4.实验参数设定5.算法结果6.参考…

[蓝桥杯习题]———位运算、判断二进制1个数

⭐Hello!这里是欧_aita的博客。 ⭐今日语录:行动胜过一切。 ⭐个人主页:欧_aita ψ(._. )>⭐个人专栏: 数据结构与算法(内含蓝桥杯习题) MySQL数据库 位运算 位运算位运算的定义简单运用 实战刷题题目思路代码实现声…

【C++】string模拟

string讲解&#xff1a;【C】String类-CSDN博客 基本框架 #pragma once #include <iostream> using namespace std; ​ namespace wzf {class string{public:// 默认构造函数string(): _str(new char[1]), _size(0), _capacity(0){_str[0] \0; // 在没有内容时仍要有终…

计算虚拟化之内存

有了虚拟机&#xff0c;内存就变成了四类&#xff1a; 虚拟机里面的虚拟内存&#xff08;Guest OS Virtual Memory&#xff0c;GVA&#xff09;&#xff0c;这是虚拟机里面的进程看到的内存空间&#xff1b;虚拟机里面的物理内存&#xff08;Guest OS Physical Memory&#xf…

融资经理简历模板

这份简历内容&#xff0c;以综合柜员招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴。 融资经理简历在线编辑下载&#xff1a;百度幻主简历 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;融资经理 …

因为jsp for循环的一个空格引起的错误

<c:forEach items"${user.role} " var"role"> <c:forEach items"${user.role}" var"role"> 去掉空格正确显示 &#xff0c;为此排查了2个小时代码逻辑

DB2—03(DB2中常见基础操作 ➕ DB2实现递归查询 ➕ DB2中自定义递归函数)

DB2—03&#xff08;DB2中常见基础操作 ➕ DB2实现递归查询 ➕ DB2中自定义递归函数&#xff09; 1. 前言1.1 oracle和mysql相关 2. db2中的"dual"2.1 SYSIBM.SYSDUMMY12.2 使用VALUES2.3 SYSIBM.SYSDUMMY1 "变" dual 3. db2中常用函数3.1 nvl()、value()、…

maven 基础

maven常用命令 clean &#xff1a;清理 compile&#xff1a;编译 test&#xff1a;测试 package&#xff1a;打包 install&#xff1a;安装 maven坐标书写规范 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</ar…