Coder Social home page Coder Social logo

flemingcc / langchain-chatglm-6b Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ming-zch/langchain-chatglm-6b

0.0 0.0 0.0 36.4 MB

langchain-ChatGLM-6B, local knowledge based ChatGLM with langchain | LangChain + GLM =本地知识库

License: Apache License 2.0

Shell 0.07% JavaScript 0.12% Python 36.05% TypeScript 10.09% CSS 0.01% HTML 0.32% Batchfile 0.04% Vue 26.44% Jupyter Notebook 21.09% Dockerfile 0.22% Less 5.57%

langchain-chatglm-6b's Introduction

langchain-ChatGLM-6B

介绍

🚀 READ THIS IN ENGLISH

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

💡 受 GanymedeNil 的项目 document.aiAlexZhangji 创建的 ChatGLM-6B Pull Request 启发,建立了全流程可使用开源模型实现的本地知识库问答应用。现已支持使用 ChatGLM-6B 等大语言模型直接接入,或通过 fastchat api 形式接入 Vicuna, Alpaca, LLaMA, Koala, RWKV 等模型。

✅ 本项目中 Embedding 默认选用的是 GanymedeNil/text2vec-large-chinese/rocketqa-zh-dureader-query,LLM 默认选用的是 ChatGLM-6B。依托上述模型,本项目可实现全部使用开源模型离线私有部署

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

📺 原理介绍视频

实现原理图

从文档处理角度来看,实现流程如下:

实现原理图2

🚩 本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。

🌐 AutoDL 镜像

📓 ModelWhale 在线运行项目

🚀Paddle百度 在线运行项目

支持模型

若存在网络问题可在此找到本项目涉及的所有模型:

large language model Embedding model
ChatGLM-6B text2vec-large-chinese
ChatGLM-6B-int8 ernie-3.0-base-zh
ChatGLM-6B-int4 ernie-3.0-nano-zh
ChatGLM-6B-int4-qe ernie-3.0-xbase-zh
Vicuna-7b-1.1 simbert-base-chinese
Vicuna-13b-1.1 paraphrase-multilingual-MiniLM-L12-v2
BELLE-LLaMA-7B-2M
BELLE-LLaMA-13B-2M
Minimax

变更日志

参见 变更日志

硬件需求

  • ChatGLM-6B 模型硬件需求

    注:如未将模型下载至本地,请执行前检查$HOME/.cache/huggingface/文件夹剩余空间,模型文件下载至本地需要 15 GB 存储空间。 注:一些其它的可选启动项见项目启动选项 模型下载方法可参考 常见问题 中 Q8。

    量化等级 最低 GPU 显存(推理) 最低 GPU 显存(高效参数微调)
    FP16(无量化) 13 GB 14 GB
    INT8 8 GB 9 GB
    INT4 6 GB 7 GB
  • Embedding 模型硬件需求

    本项目中默认选用的 Embedding 模型 GanymedeNil/text2vec-large-chinese 约占用显存 3GB,也可修改为在 CPU 中运行。

Docker 部署

为了能让容器使用主机GPU资源,需要在主机上安装 NVIDIA Container Toolkit。具体安装步骤如下:

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

安装完成后,可以使用以下命令编译镜像和启动容器:

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

开发部署

软件需求

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

vue前端需要node18环境

从本地加载模型

请参考 THUDM/ChatGLM-6B#从本地加载模型

1. 安装环境

参见 安装指南

2. 设置模型默认参数

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

如需通过 fastchat 以 api 形式调用 llm,请参考 fastchat 调用实现

3. 执行脚本体验 Web UI 或命令行交互

注:鉴于环境部署过程中可能遇到问题,建议首先测试命令行脚本。建议命令行脚本测试可正常运行后再运行 Web UI。

执行 cli_demo.py 脚本体验命令行交互

$ python cli_demo.py

或执行 webui.py 脚本体验 Web 交互

$ python webui.py

或执行 api.py 利用 fastapi 部署 API

$ python api.py

或成功部署 API 后,执行以下脚本体验基于 VUE 的前端页面

$ cd views 

$ pnpm i

$ npm run dev

VUE 前端界面如下图所示:

  1. 对话 界面
  2. 知识库问答 界面
  3. Bing搜索 界面

WebUI 界面如下图所示:

  1. 对话 Tab 界面
  2. 知识库测试 Beta Tab 界面
  3. 模型配置 Tab 界面

Web UI 可以实现如下功能:

  1. 运行前自动读取configs/model_config.pyLLMEmbedding模型枚举及默认模型设置运行模型,如需重新加载模型,可在 模型配置 Tab 重新选择后点击 重新加载模型 进行模型加载;
  2. 可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节;
  3. 对话 Tab 具备模式选择功能,可选择 LLM对话知识库问答 模式进行对话,支持流式对话;
  4. 添加 配置知识库 功能,支持选择已有知识库或新建知识库,并可向知识库中新增上传文件/文件夹,使用文件上传组件选择好文件后点击 上传文件并加载知识库,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答;
  5. 新增 知识库测试 Beta Tab,可用于测试不同文本切分方法与检索相关度阈值设置,暂不支持将测试参数作为 对话 Tab 设置参数。
  6. 后续版本中将会增加对知识库的修改或删除,及知识库中已导入文件的查看。

常见问题

参见 常见问题

🙇‍ ‍感谢

  1. langchain-ChatGLM提供的基础框架

langchain-chatglm-6b's People

Contributors

imclumsypanda avatar glide-the avatar fxjhello avatar calcitem avatar fengyunzaidushi avatar ming-zch avatar keenzhu avatar sysalong avatar changxubo avatar liangtongt avatar ykk648 avatar yawudede avatar zhenkaivip avatar raingather avatar cocomany avatar liunux4odoo avatar roydcai avatar yizxiy avatar brightxiaohan avatar dingjunyao avatar etachgu avatar eltociear avatar oushu1zhangxiangxuan1 avatar jsl9208 avatar drunken-boat avatar thaumstrial avatar winterggg avatar mokeyish avatar hikariming avatar cinience avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.