Langchain-Chatchat学习

参考:Langchain-Chatchat + 阿里通义千问Qwen 保姆级教程 | 次世代知识管理解决方案 - 知乎 (zhihu.com)

该文档没有安装成功,安装成功的文档 可见:Langchain-Chatchat的安装过程-CSDN博客

中文LLM生态观察

模型

就开源的部分而言,从一开始的MOSS[1] ChatGLM[2] ChatGLM2 [3] 到后来的 baichan [4] 基于LLama2 微调的 中文LLama2 [5] 再到最近开源的 通义千问 Qwen [6] 。 至于更多模型和相关评分榜单可以看一直在维护更新模型汇总的文章。

参考:大语言模型汇总索引帖(持续更新) - 知乎 (zhihu.com)

基于langchain的智能助手

其中比较突出的,之前我觉得是ChatGLM系列 ,不过现在我认为是最近开源的 Qwen 通义千问。
各家都有一个比较好的做法就是去适配一套和OpenAI gpt3.5一致的API 方便大家在测试和搭建不同模型时快速的切换,减少大量阅读接口文档的时间。

通义千问干脆直接默认API部署代码做成OpenAI API 格式

生态

除了大语言模型本身,相关的基建生态也是我们需要持续关注的。 其中最出名的当属基于相当于LLM应用中间件的 LLama Index 、 Langchain框架 和 AIGC时代数据持久化层的 各大向量数据库。

  1. 使用 FastChat 提供开源 LLM 模型的 API,以 OpenAI API 接口形式接入,提升 LLM 模型加载效果;
  2. 使用 langchain 中已有 Chain 的实现,便于后续接入不同类型 Chain,并将对 Agent 接入开展测试;
  3. 使用 FastAPI 提供 API 服务,全部接口可在 FastAPI 自动生成的 docs 中开展测试,且所有对话接口支持通过参数设置流式或非流式输出;
  4. 使用 Streamlit 提供 WebUI 服务,可选是否基于 API 服务启动 WebUI,增加会话管理,可以自定义会话主题并切换,且后续可支持不同形式输出内容的显示;
  5. 项目中默认 LLM 模型改为 THUDM/chatglm2-6b,默认 Embedding 模型改为 moka-ai/m3e-base,文件加载方式与文段划分方式也有调整,后续将重新实现上下文扩充,并增加可选设置;
  6. 项目中扩充了对不同类型向量库的支持,除支持 FAISS 向量库外,还提供 Milvus, PGVector 向量库的接入;
  7. 项目中搜索引擎对话,除 Bing 搜索外,增加 DuckDuckGo 搜索选项,DuckDuckGo 搜索无需配置 API Key,在可访问国外服务环境下可直接使用。

架构

其实LangChain-Chatchat 前身是 langchain-chatglm ,即为chatglm 制作的 langchain 组件

下面是早期项目的流程原理图

简单来说就是把本地的一些文档( doc txt md csv json ...) 先通过一系列处理( 读取 分词 )embedding模型编码成一定数量的高维向量 (下图中 1到6)

而用户原本直接和LLM对话的文本 也会通过embedding 模型编码成高维向量 (下图中 8 9)

然后通过计算余弦相似度的方式 (下图中10和7) 来检索本地文档库中可能提供帮助的相关资料

再和原用户的问题文本 结合 (下图中11)

经过预先我们准备好的提示词模板 Prompt Template 组装成最后的 Prompt 提示词 (下图中12 13)

去问LLM (下图中14 15)

简单来说,embedding模型是一种通过将输入数据转换为稠密的实值向量(也称为嵌入)来解决机器学习问题的技术。这种转换使得原始输入数据可以在一个新的、潜在的空间中表示,其中相似的输入被映射到彼此接近的位置,而不同的输入则被映射到远离的位置。

embedding模型最早在自然语言处理领域得到广泛应用,其中最著名的例子可能是word2vec模型。在这种模型中,每个单词都被映射到一个固定的向量,向量之间的距离可以反映两个单词在语义上的相似程度。

除了自然语言处理之外,embedding模型还广泛应用于计算机视觉、社交网络分析等领域。例如,在图像识别中,我们可以将每张图片映射到一个高维向量,向量之间的距离可以反映两张图片之间的相似度;在社交网络分析中,我们可以将每个用户映射到一个向量,向量之间的距离可以反映两个用户之间的相似度等等。

总之,embedding模型提供了一种有效的方式来捕获数据中的复杂结构和关联,因此它已经成为许多机器学习应用的重要组成部分。

模型下载方法汇总

通义千问 Qwen-7B-Chat-Int4 模型本地化部署-CSDN博客

git clone https://www.modelscope.cn/Jerry0/m3e-base.git

2.0版本在原有基础上

增加了支持的大语言模型 比如我们今天要讲的通义千问 。

增加了支持的向量数据库 比如本文中使用的Milvus。

增加了搜索引擎能力的集成 让LLM能利用外部实时信息 比如本文中使用的DuckDuckGO。

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

cat requirements.txt

pip install -r requirements.txt

配置文件修改

复制模型相关参数配置模板文件 configs/model_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 model_config.py

复制服务相关参数配置模板文件 configs/server_config.py.example 存储至项目路径下 ./configs 路径下,并重命名为 server_config.py

参考:win10 安装 Langchain-Chatchat 避坑指南(2023年9月18日v0.2.4版本,包含全部下载内容!)-CSDN博客

embedding模型 、llm模型、 向量数据库 、 prompt template (后面这俩我们先使用默认即可)

llm模型

将local_model_path 的值改为你机器上存放千问模型的路径

感觉配置的不对 待验证

参考:大模型部署手记(16)ChatGLM2+Ubuntu+LongChain-ChatChat-CSDN博客

cp basic_config.py.example basic_config.py

cp kb_config.py.example kb_config.py

cp prompt_config.py.example prompt_config.py

知识库初始化

当前项目的知识库信息存储在数据库中,在正式运行项目之前请先初始化数据库

cd ..

python init_database.py --recreate-vs

从给出的错误信息来看,PyTorch和torchvision是用不同的CUDA主要版本编译的PyTorch使用的是CUDA 12.1版本,而torchvision使用的是CUDA 11.8版本为了解决这个问题,你需要重新安装与PyTorch版本相匹配的torchvision

pip uninstall torchvision

pip install torchvision -f https://download.pytorch.org/whl/cu121/torch_stable.html
 

python init_database.py --recreate-vs

还是有些问题 GPU版本不对

启动:

python startup.py --all-webui

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

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

相关文章

Servlet概念视频笔记

学习地址:121-尚硅谷-Servlet-什么是Servlet_哔哩哔哩_bilibili 目录 1.Servlet技术 a.什么是Servlet b.手动实现Servlet程序 c.url地址如何定位到Servlet程序去访问 d.Servlet的生命周期 e.GET 和 POST 请求的分发处理 f.通过继承 HttpServlet 实现 Servlet程序 g.使用…

如何在财税行业查找批量客户?

现在市场上代记账公司也不算少,做过这行的都知道,最初呢行业竞争不强,都是靠地推、老客户转介绍,或者长期以往的蹲守各个地区的工商注册服务中心,找那些才注册企业的老板或者创业者。但是,随着市场经济的发…

Python+Requests模块_设置代理、超时设置、重定向设置

设置代理 代理(英语:Proxy),也称网络代理,是一种特殊的网络服务,英文全称是(Proxy Server),其功 能就是代理网络用户去取得网络信息。形象的说:它是网络信息…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言,天然存在跨平台的属性,我们在编译完成后,可以再不暴露源代码的情况下,运行在对应的平台中,但是 还是架不住有逆向工程师的反编译、反汇编的情形;(当然我们写的都不希望被别人偷了…

国内高速下载huggingface上的模型

目录 前言 modelscope huggingface安装 Windows设置环境变量 Linux设置环境变量 设置国内镜像 Windows(cmd.exe) 当前窗口有效 永久生效 Linux 当前窗口有效 永久生效 下载模型 前言 国内优先使用modelscope,hugging face镜像站下载…

MySQL字符函数

在数据库中,字符函数是一组用于处理字符串的函数。这些函数可以帮助我们执行各种操作,如连接、比较、替换等。本文将介绍一些常用的MySQL字符函数,并演示如何在查询中使用它们。 1.concat() 函数 CONCAT() 函数用于连接两个或多个字符串。它…

【C/PTA —— 13.指针2(课内实践)】

C/PTA —— 13.指针2(课内实践) 一.函数题6-1使用函数实现字符串部分复制6-2 拆分实数的整数部分和小数部分6-3 存在感 二.编程题7-1 单词反转 一.函数题 6-1使用函数实现字符串部分复制 void strmcpy(char* t, int m, char* s) {int len 0;char* ret …

【C/PTA —— 13.指针2(课外实践)】

C/PTA —— 13.指针2(课外实践) 一.函数题6-1 鸡兔同笼问题6-2 冒泡排序6-3 字符串反正序连接6-4 计算最长的字符串长度6-5 查找星期 二.编程题7-1 C程序设计 实验5-7 数组指针作函数参数7-2 查找奥运五环色的位置 一.函数题 6-1 鸡兔同笼问题 int Chic…

CSS新手入门笔记整理:CSS图片样式

图片大小 语法 width:像素值; height:像素值; 图片边框:border 语法 边框:宽度值 样式值 颜色值; border:1px solid red; 图片对齐 水平对齐:text-align 语法 text-align:取值; 属性值 说明 left 左对齐(默认值) cent…

csp 现值计算 C语言

号: 202212-1 试题名称: 现值计算 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 问题描述 评估一个长期项目的投资收益,资金的时间价值是一个必须要考虑到的因素。简单来说,假设…

Unittest(1):unittest单元测试框架简介setup前置初始化和teardown后置操作

unittest单元测试框架简介 unittest是python内置的单元测试框架,具备编写用例、组 织用例、执行用例、功能,可以结合selenium进行UI自动化测 试,也可以结合appium、requests等模块做其它自动化测试 官方文档:https://docs.pytho…

JS逆向-mytoken之code参数

前言 本文是该专栏的第60篇,后面会持续分享python爬虫干货知识,记得关注。 本文以mytoken为例,通过js逆向获取其code参数的生成规律。具体的“逆向”思路逻辑,笔者将会详细介绍每个步骤,并且将在正文结合“完整代码”进行详细说明。 接下来,跟着笔者直接往下看正文详细…

OpenOffice 4.1.14的安装以及与数据库进行连接

起因:因为MS Office的Access只能和自家的数据库连接,感觉不太舒服,因此尝试使用Openoffice组件中的Base进行替换。这里记录一下从安装到进行数据库连接的过程。 1.下载地址 https://www.openoffice.org/download/index.html 我这里是Debian1…

(C++)三数之和--双指针法

个人主页:Lei宝啊 愿所有美好如期而遇 算法原理 双指针法,不一定是说就要使用指针,只是一种形象的说法,在数组中,我们一般将数组下标当做指针。我们首先对数组进行排序,从左向右标定一个下标i&#xff0…

CentOS7根分区扩容之二

Centos根分区快接近100%,如果根分区是逻辑卷,那么可以增加额外的磁盘,通过逻辑卷扩容的方式增加到根分区空间。 1.检查当前根分区大小 df -Th2.检查额外的磁盘 3.把磁盘格式化为lvm类型的文件分区。 [rootlocalhost ~]# fdisk /dev/sdb We…

数据结构:带头双向循环链表的实现

引言 单链表存在缺陷:需要从头开始找前一个节点 解决方法:双向链表 链表的结构(8种): 1. 单向,双向 2. 带头、不带头 带头即为带哨兵位的头节点,第一个节点不存储有效数据。带头节点&#…

leetcode刷题详解—— 环形子数组的最大和

1. 题目链接:918. 环形子数组的最大和 2. 题目描述: 给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(…

VUE语法-(readonly的用法)将数据设置成只读模式

1、功能概述 在Vue中定义一个变量,这个变量的值不允许被修改,核心是通过readonly设置成只读。 如果不会使用ref和reactive响应式数据参考如下博客: https://blog.csdn.net/tangshiyilang/article/details/134701103 2、具体实现 如下案例…

迭代器 iterator

一、什么是 iterator? C中,iterator也被称为迭代器,其主要作用就是指向并访问容器中的元素,其像指针但不是指针。 PS: begin()函数返回一个指向容器第一个元素的迭代器;end()函数返回一个指向容器最后一个元素之后位…

红队攻防实战之某商城Getshell

此后如竟没有炬火,我便是唯一的光 信息收集 端口扫描 nmap -T4 -A -p 1-65535 可以看到目标系统开放22、80、888、3306、8800端口 敏感文件扫描 http:///admin/login.html 后台登陆地址泄露 漏洞挖掘 phpinfo信息泄露 phpinfo信息泄露,此站为Linu…