Langchain-ChatGLM:基于本地知识库问答

文章目录

  • ChatGLM与Langchain简介
    • ChatGLM-6B简介
      • ChatGLM-6B是什么
      • ChatGLM-6B具备的能力
      • ChatGLM-6B具备的应用
    • Langchain简介
      • Langchain是什么
      • Langchain的核心模块
      • Langchain的应用场景
  • ChatGLM与Langchain项目介绍
    • 知识库问答实现步骤
    • ChatGLM与Langchain项目特点
    • 项目主体结构
    • 项目效果优化方向
    • 项目后续开发计划
  • ChatGLM与Langchain项目实战过程
    • 实战(一)
    • 实战(二)

ChatGLM与Langchain简介

ChatGLM-6B简介

ChatGLM-6B是什么

ChatGLM-6B地址:https://github.com/THUDM/ChatGLM-6B
ChatGLM-6B 是⼀个开源的、⽀持中英双语的
对话语⾔模型,基于 General Language
Model (GLM) 架构,具有 62 亿参数。结合模型量化技术,用户可以在消费级的显卡上进行本地部署(INT4 量化级别下最低只需 6GB 显存)。

ChatGLM-6B 使用了和 ChatGPT 相似的技术,针对中文问答和对话进行了优化。经过约 1T 标识符的中英双语训练,辅以监督微调、反馈自助、人类反馈强化学习等技术的加持,62 亿参数的 ChatGLM-6B 已经能生成相当符合人类偏好的回答。

更新 v1.1 版本 checkpoint, 训练数据增加英⽂
指令微调数据以平衡中英⽂数据⽐例,解决英
⽂回答中夹杂中⽂词语的现象。

ChatGLM-6B具备的能力

  • 自我认知(可以对自己进行介绍,优点缺点等)
  • 提纲写作(比如:帮我写一个介绍ChatGLM的博客提纲)
  • 文案写作(根据一段话来生成一段文案)
  • 信息抽取(抽取一段文本的人物,时间,地点等实体信息)
  • 角色扮演(指定ChatGLM为一个角色,进行对话)

ChatGLM-6B具备的应用

大语言模型通常基于通识知识进行训练的,而在
⾯向某些领域的具体场景时,常常需要借助模型微调提示
词⼯程
提升语言模型应用效果:
常见的场景如:

  • 垂直领域知识的特定任务(金融领域,法律领域)
  • 基于垂直领域知识库的问答

模型微调与提示词工程的区别:

模型微调:针对预训练好的语言模型,在特定任务的数据集上进行进一步的微调训练,需要有标记好的特定任务的数据。

提示工程:核心是设计自然语言提示或指定,引导模型完成特定任务,适合需要明确输出的任务。

Langchain简介

Langchain是什么

LangChain 是一个用于开发由语言模型驱动的应用程序的框架。他主要拥有 3个能力:

  • 可以调用LLM模型
  • 可以将 LLM 模型与外部数据源进行连接
  • 允许与 LLM 模型进行交互

Langchain的核心模块

Langchain的核心模块如下:

  • Modules:支持的模型类型和集成,如:openai,huggingface等;
  • Prompt:提示词管理、优化和序列化,支持各种自定义模板;
  • Memory:内存管理(在链/代理调用之间持续存在的状态);
  • Indexes:索引管理,方便加载、查询和更新外部数据;
  • Agents:代理,是一个链,可以决定和执行操作,并观察结果,直到指令完成;
  • Callbacks:回调,允许记录和流式传输任何链的中间步骤,方便观察、调试和评估。

Agents代理执行过程如下:
在这里插入图片描述

Langchain的应用场景

  • 文档问答
  • 个人助理
  • 查询表格
  • 与API交互
  • 信息提取
  • 文档总结

ChatGLM与Langchain项目介绍

知识库问答实现步骤

基于Langchain思想实现基于本地知识库的问答应用。实现过程如下:
1、加载文件
2、读取文本
3、文本分割
4、文本向量化
5、问句向量化
6、在文本向量中匹配出与问句向量最相似的top k个
7、匹配出的文本作为上下文和问题一起添加到prompt中
8、提交给LLM生成回答。
在这里插入图片描述
还有另一个版本(本质是一样的)
在这里插入图片描述

ChatGLM与Langchain项目特点

  • 依托 ChatGLM 等开源模型实现, 可离线部署
  • 基于 langchain 实现,可快速实现接入多种数据源
  • 在分句、文档读取等方面,针对中文使用场景优化
  • 支持pdf、 txt、 md、 docx等⽂件类型接⼊,具备命令行demo、 webui 和 vue 前端。

项目主体结构

  • models: llm的接⼝类与实现类,针对开源模型提供流式输出⽀持。
  • loader: 文档加载器的实现类。
  • textsplitter: 文本切分的实现类。
  • chains: 工作链路实现,如 chains/local_doc_qa 实现了基于本地⽂档的问答实现。
  • content:用于存储上传的原始⽂件。
  • vector_store:用于存储向量库⽂件,即本地知识库本体。
  • configs:配置文件存储。

项目效果优化方向

  • 模型微调:一个是对embedding模型的基于垂直领域的数据进行微调;一个是对LLM模型的基于垂直领域的数据进行微调;
  • 文档加工:一种是使用更好的文档拆分的方式(如项目中已经集成的达摩院的语义识别的模型及进行拆分);一种是改进填充的方式,判断中心句上下文的句子是否和中心句相关,仅添加相关度高的句子;另一种是文本分段后,对每段分别及进行总结,基于总结内容语义及进行匹配;
  • 借助不同模型的能力:在 text2sql、text2cpyher 场景下
    需要产生代码时,可借助不同模型能力。

项目后续开发计划

  • 扩充数据源:增加库表、图谱、网页等数据接入;
  • 知识库管理:完善知识库中增删改查功能,并支持更多向量库类型;
  • 扩充文本划分方式:针对中文场景,提供更多文本划分与上下文扩充方式;
  • 探索Agent应用:利用开源LLM探索Agent的实现与应用。

ChatGLM与Langchain项目实战过程

实战(一)

https://github.com/imClumsyPanda/langchain-ChatGLM
由于之前已经对ChatGLM进行过部署,所以考虑可以直接在原有环境中安装新的所需的包即可,同样也可以使用之前下载好的模型文件:ChatGLM部署

但看了下requirements.txt文件后还有不少需要安装的包,索性直接新建一个python3.8.13的环境(模型文件还是可以用的)

conda create -n langchain python==3.8.13

拉取项目

git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git

进入目录

cd langchain-ChatGLM

安装requirements.txt

conda activate langchain
pip install -r requirements.txt

当前环境支持装langchain的最高版本是0.0.166,无法安装0.0.174,就先装下0.0.166试下。
修改配置文件路径:

vi configs/model_config.py

将chatglm-6b的路径设置成自己的。
“chatglm-6b”: {
“name”: “chatglm-6b”,
“pretrained_model_name”: “/data/sim_chatgpt/chatglm-6b”,
“local_model_path”: None,
“provides”: “ChatGLM”

修改要运行的代码文件:webui.py,

vi webui.py

将最后launch函数中的share设置为True,inbrowser设置为True。
执行webui.py文件

python webui.py

在这里插入图片描述
可能是网络问题,无法创建一个公用链接。可以进行云服务器和本地端口的映射,参考:https://www.cnblogs.com/monologuesmw/p/14465117.html
在这里插入图片描述
对应输出:
在这里插入图片描述
占用显存情况:大约15个G
在这里插入图片描述

实战(二)

项目地址:https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui
HUggingFace社区在线体验:https://huggingface.co/spaces/thomas-yanxin/LangChain-ChatLLM
在这里插入图片描述
另外也支持ModelScope魔搭社区、飞桨AIStudio社区等在线体验。

下载项目

git clone https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui.git

进入目录

cd LangChain-ChatGLM-Webui

安装所需的包

pip install -r requirements.txt
pip install gradio==3.10

修改config.py

init_llm = "ChatGLM-6B"llm_model_dict = {"chatglm": {"ChatGLM-6B": "/data/sim_chatgpt/chatglm-6b",

修改app.py文件,将launch函数中的share设置为True,inbrowser设置为True。

执行webui.py文件

python webui.py

在这里插入图片描述
显存占用约13G。
在这里插入图片描述

参考
https://github.com/imClumsyPanda/langchain-ChatGLM
https://liaokong.gitbook.io/llm-kai-fa-jiao-cheng/
https://github.com/thomas-yanxin/LangChain-ChatGLM-Webui

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

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

相关文章

别再为练习接口测试和JMeter压测烦恼了,我为你们搭建了一个环境快来看看(最后还规划了自动化测试的学习路线)

目录 前言 福利来了 详见接口文档 其它 最后再给大家分享一下自动化测试的学习路线,希望可以帮助到初学的朋友。 一、学习自动化测试之前,必须学会一门编程语言 二、熟悉被测系统,掌握前端的知识,数据库的学习 ​四、自动…

Cursor攻略,吃个螃蟹

Cursor攻略,吃个螃蟹 1.1 工具下载与安装1.2 工具的原理 2、Api key生成与配置2.1 生成Api key2.2 设置Api key 3、工具插件多元化使用手册3.1 汉化插件3.2 SpringBoot、Maven插件(ctrl shit x)3.3 Git插件(ctrl shit x&#…

无代码玩转GIS应用,我也在行

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

【nvidia jetson】AGX ORIN 开箱配置

目录 SDK managerjtopDeepstream SDKDeepstream pythonBase dependenciesInitialization of submodulesInstalling Gst-pythonBuilding the bindingsinstalling the pip wheel Reference 为了方便我直接用nvidia 提供的 SDK manager 进行安装 SDK manager 首先在你的电脑(ubu…

旅游信息管理系统的设计与实现

开发环境: Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库: MySQL 适用于: 课程设计,毕业设计,学习等等 系统介绍

十一假期旅游如何规划路线,让python带你玩转各景点

livandata 数据EDTA创始人,没有之一 现担任数据EDTA个人公众号董事长兼CEO兼财务兼创作人 口号:让大数据赋能每一个人 前言 数据EDTA的读者们,大家好~ 国庆将至大家有没有安排出行呢? 有没有翻遍了网站,为出行计…

2021地理设计组一等奖:面向游客的旅游路线优化设计——以丹霞山景区为例

作品简介 一、背景与意义 随着旅游业的快速发展与人们对旅行质量要求的提升,旅游者对旅游服务的内容要求也越来越高,其中的旅游导航便是一项需求率极高的服务。然而传统的导航服务多是基于时间或距离成本进行网络分析而提供的路径设计,极少考…

python去哪儿网的旅游景点信息

爬取过程分析: 1、网站url:‘https://piao.qunar.com/ticket/list.htm?keyword北京&page1’ 2、http请求方法为get方法 3、用beautifulsoup提取所需要的信息 4、将爬取的信息存至本地 具体代码如下: import requests from bs4 import B…

基于python+django框架+Mysql数据库的旅游景区景点售票系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的景区景点购票系统,整个网站项目使用了B/S架构,基于python的Django框架下开发;管理员通过后台录入信息、管理信息,设置网站信息,管理会…

基于微信小程序的旅游社微信小程序

文末联系获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.…

基于大数据分析的旅游平台的设计与实现

摘 要 随着旅游业的发展,旅游平台作为旅游行业的重要组成部分已经逐渐受到了越来越多的关注。在这样的背景下,基于大数据分析的旅游平台应运而生。本文旨在研究基于大数据分析的旅游平台。 本文根据旅游行业目前的发展趋势,提出了一种可…

用Python爬取了全国近5000家旅游景点,分析国庆去哪玩

双节同庆,小长假如约而至 我想今年大家在家都憋坏了 这么长的假期,当然是出去 玩玩玩! 每当长假的时候,有没有想起被人山人海支配的恐惧! 该去哪些地方呢? 我用 Python 爬取了全国近 5000 个旅游景点&#…

景区旅游管理系统

1、项目介绍 基于SSH的景区旅游管理系统6拥有两种角色:管理员和用户 管理员:景点管理、酒店管理、客房管理、用户管理等 用户:查看搜索景点、酒店景点预定、订单查看、评论打分等 2、项目技术 后端框架:SSH(Strut…

基于大数据架构实现景点游客数据分析平台,全国景点游客数据管理系统

随着最近几年旅游行业的兴起,越来越多的景区景点将传统模式的线下统计模式变更成为了线上分析统计模式,线上对景区游客数据的管理与监督的新型模式。很多的景点采用游客数据分析平台系统,在线上对不同景点内部的游客数据进行管理,…

基于python下django框架 实现旅游景区景点售票系统详细设计

前言介绍(开发目的和意义) 本课题主要目标是设计并能够实现一个基于web网页的景区景点购票系统,整个网站项目使用了B/S架构,基于python的Django框架下开发;管理员通过后台录入信息、管理信息,设置网站信息…

旅游景点咨询系统的设计与实现

【实验目的】 熟悉图数据结构的基本特征、构造方法理解迪杰斯特拉算法、弗洛伊德算法寻找最小路径的原理练习上述数据结构与算法的实现。 【实验原理】 图的创建与遍历算法迪杰斯特拉算法从给定的一点出发,求该点到所有其他顶点的最短路径,我们将顶点…

旅游景区景点订票售票系统设计与实现

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于java的景区景点预约购票系统,整体使用javaMySql的B/S架构,技术上采用了springboot框架;通过后台添加景区资讯、景点介绍,管理用户订单;用户通过…

【WordNet】词典——omw-1.4下载

from nltk.corpus import wordnet syns wordnet.synsets("bank") print(syns[0].name())运行这段代码时,编译器会提示找不到【omw-1.4】这个东西 官方地址 官方NLTK网址 但是要科学上网… 分享一个已经下载好的 链接:https://pan.baidu.c…

【翻译】【词典】【词库】(PC版)离线词典GoldenDict+离线词库--地表最强 (by shany shang)

(PC版)离线词典–地表最强 一、下载 GoldenDict 客户端 (windows) (1)下载网址:(点不开 ,记得用谷歌哟) https://sourceforge.net/projects/goldendict/fi…

quicker + Golden Dict 实现比欧陆词典更好用的免费查词翻译神器

免费、纯净无广告、界面简洁,Golden Dict 搭配词库文件,就成为桌面端的查词翻译神器。 然而有时候遇到阅读外文文档、源码注释时,Golden Dict 不支持整句翻译,不支持OCR 文字识别,体现了它的短板。 于是,…