基于LangChain+GLM搭建知识本地库

基于LangChain+GLM搭建知识本地库点击蓝字 关注我们 关注并星标 从此不迷路 计算机视觉研究院 公众号 ID 计算机视觉研究院 学习群 扫码在主页获取加入方式 计算机视觉研究院专栏 Column of Computer Vision Institute 一种利用 langchain 思想实现的基于本地知识库的问答应用

大家好,我是讯享网,很高兴认识大家。

点击蓝字 关注我们

关注并星标

从此不迷路

计算机视觉研究院

5541622ca2a89643d450a695ff18ac99.gif
讯享网

f327dc2d57e64e5c69cce64f759e468b.gif

公众号ID计算机视觉研究院

学习群扫码在主页获取加入方式

计算机视觉研究院专栏

Column of Computer Vision Institute

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

f3fd7c753c549400f8456e0f6209c0f1.gif

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

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

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

07f0464dc36e7689138c237a02f8ecde.png

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

7cbd8fd1ebcf27d340d7edb0df674e9d.png

本项目未涉及微调、训练过程,但可利用微调或训练对本项目效果进行优化。核心部分代码为:

执行初始化 init_cfg(LLM_MODEL, EMBEDDING_MODEL, LLM_HISTORY_LEN) # 使用 ChatGLM 的 readme 进行测试 vector_store = init_knowledge_vector_store("/home/mw/project/test_chatglm_readme.md")

讯享网

中vector_store的初始化可以传递 txt、docx、md 格式文件,或者包含md文件的目录。更多知识库加载方式可以参考langchain文档,通过修改 init_knowledge_vector_store 方法进行兼容。

官方注:ModelWhale GPU机型需要从云厂商拉取算力资源,耗时5~10min,且会预扣半小时资源价格的鲸币。如果资源未启动成功,预扣费用会在关闭编程页面后五分钟内退回,无需紧张,如遇问题欢迎提报工单,客服会及时处理。

硬件需求

  • ChatGLM-6B 模型硬件需求

注:如未将模型下载至本地,请执行前检查$HOME/.cache/huggingface/文件夹剩余空间,模型文件下载至本地需要15GB存储空间。 

28b176db1f55ef849cd5f8fcfe53c9d6.png

  • MOSS 模型硬件需求

注:如未将模型下载至本地,请执行前检查$HOME/.cache/huggingface/文件夹剩余空间,模型文件下载至本地需要70GB存储空间

279503b324fdff8428d38aececb5e6e3.png

  • 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. 安装环境

环境检查

讯享网# 首先,确信你的机器安装了 Python 3.8 及以上版本 $ python --version Python 3.8.13 # 如果低于这个版本,可使用conda安装环境 $ conda create -p /your_path/env_name python=3.8 # 激活环境 $ source activate /your_path/env_name $ pip3 install --upgrade pip # 关闭环境 $ source deactivate /your_path/env_name # 删除环境 $ conda env remove -p /your_path/env_name

项目依赖

# 拉取仓库 $ git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git # 进入目录 $ cd langchain-ChatGLM # 项目中 pdf 加载由先前的 detectron2 替换为使用 paddleocr,如果之前有安装过 detectron2 需要先完成卸载避免引发 tools 冲突 $ pip uninstall detectron2 # 检查paddleocr依赖,linux环境下paddleocr依赖libX11,libXext $ yum install libX11 $ yum install libXext # 安装依赖 $ pip install -r requirements.txt # 验证paddleocr是否成功,首次运行会下载约18M模型到~/.paddleocr $ python loader/image_loader.py

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 前端界面如下图所示:
  • 对话界面

84292c45f644b8dbc58021b14e823252.png

  • 知识问答界面

dcf807f8c6bdeac71b3469c695bf862e.png

  • bing搜索界面

62f2640dd27fab9f9a0392400f0b312e.png

WebUI 界面如下图所示:

  • 对话Tab界面

c0d9139ef7241e0907f3547c8d1d9e09.png

  • 知识库测试Beta Tab界面

40273da0303ed288b945c7e8e48e5f2d.png

  • 模型配置Tab界面

c94a4fbdadd54a46d8ac1a5f7e9376ea.png

Web UI 可以实现如下功能:

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

© THE END 

转载请联系本公众号获得授权

3be469b04628853e0c60f9502457e9b1.gif

计算机视觉研究院学习群等你加入!

ABOUT

计算机视觉研究院

计算机视觉研究院主要涉及深度学习领域,主要致力于目标检测、目标跟踪、图像分割、OCR、模型量化、模型部署等研究方向。研究院每日分享最新的论文算法新框架,提供论文一键下载,并分享实战项目。研究院主要着重”技术研究“和“实践落地”。研究院会针对不同领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

VX:

e195ef5813470b81747cdcaca354d4fc.png

 往期推荐 

🔗

  • All Things ViTs:在视觉中理解和解释注意力
  • OVO:在线蒸馏一次视觉Transformer搜索
  • 最近几篇较好论文实现代码(附源代码下载)
  • AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)
  • CVPR 2023|EfficientViT:让ViT更高效部署实现实时推理(附源码)
  • VS Code支持配置远程同步了
  • 基于文本驱动用于创建和编辑图像(附源代码)
  • 基于分层自监督学习将视觉Transformer扩展到千兆像素图像
  • 霸榜第一框架:工业检测,基于差异和共性的半监督方法用于图像表面缺陷检测
  • CLCNet:用分类置信网络重新思考集成建模(附源代码下载)
  • YOLOS:通过目标检测重新思考Transformer(附源代码)
  • 工业检测:基于密集尺度特征融合&像素级不平衡学习框架(论文下载)
  • Fast YOLO:用于实时嵌入式目标检测(附论文下载)
小讯
上一篇 2025-03-30 16:34
下一篇 2025-01-27 20:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47942.html