Langchain-Chatchat学习

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

中文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模型提供了一种有效的方式来捕获数据中的复杂结构和关联,因此它已经成为许多机器学习应用的重要组成部分。

模型下载方法汇总

如需在本地或离线环境下运行本项目,需要首先将项目所需的模型下载至本地,通常开源 LLM 与 Embedding 模型可以从 HuggingFace 下载。

以本项目中默认使用的 LLM 模型 THUDM/ChatGLM2-6B 与 Embedding 模型 moka-ai/m3e-base 为例:

下载模型需要先安装 Git LFS,然后运行

参考:通义千问部署搭建_代码浪人的博客-CSDN博客

git clone https://www.modelscope.cn/qwen/Qwen-7B-Chat.git

拉代码

git clone https://github.com/QwenLM/Qwen-7B.git

pip install -r requirements.txt

pip install -r requirements_web_demo.txt

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

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

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

相关文章

初刷leetcode题目(8)——数据结构与算法

😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️…

森林无人机高效解决巡查难题,林区防火掀新篇

山东省某市为了强化森林火灾防范,采用了一项新兴手段——复亚智能无人机森林火情监测系统。这套系统在AI飞行大脑的指挥下,让无人机在空中巡逻,实现了无人机森林防火系统的实施落地。 一、AI大脑如何引领森林无人机高空巡逻? 在山…

Appium 2 和 Appium Inspector 环境部署

前言 自 2022 年 1 月 1 日起,Appium 核心团队不再维护 Appium 1.x。官方支持的平台驱动程序的所有最新版本均不兼容 Appium 1.x,需要 Appium 2 才能运行。 Appium 2是一个自动化移动应用程序的开源工具,它带来了以下重要改进:  …

sqli-labs靶场详解less-24(二次注入)

less-24 对于一个像我一样的小白来说这关就像php代码审计 一开始进行判断注入点的时候怎么都找不到一点思路都没有 只能搜教程 说是二次注入 从来没遇见的题型 于是从代码审计开始 先说一下什么叫二次注入 二次注入 二次注入是指通过SQL语句存储到数据库的用户输入被读取后再次…

ESP32-Web-Server编程- JS 基础 4

ESP32-Web-Server编程- JS 基础 4 概述 HTML 内联事件处理器,你永远不应该使用 HTML 事件处理器属性——因为那些已经过时了,使用它们是不好的做法。 在前端编程中,除了将期望发生的事件写为 JS 文件外,还可以使用一些组件自带…

JavaScript 的 DOM 知识点有哪些?

文档对象模型(Document Object Model,简称 DOM),是一种与平台和语言无关的模型,用来表示 HTML 或 XML 文档。文档对象模型中定义了文档的逻辑结构,以及程序访问和操作文档的方式。 当网页加载时&#xff0…

正则表达式回溯陷阱

一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上,英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格(一个或者多个,最后那个单词…

正点原子linux应用编程——入门篇2

系统信息与系统资源 本章重点学习如何通过Linux系统调用或C库函数获取系统信息,譬如获取系统时间、日期 以及设置系统时间、日期等;除此之外,还会学习Linux系统下的/proc虚拟文件系统,包括/proc 文件系统是什么以及如何从/proc文…

【Java Spring】SpringBoot 配置文件

1、Spring Boot配置文件的作用 配置文件的基本作用: 数据库连接信息(包括用户名和密码的设置)项目的启动端口第三方系统的调用密钥等信息用于发现和定位问题的普通日志和异常日志等 2、Spring Boot配置文件的格式 Spring Boot配置文件主要…

二十章 多线程

线程简介 在 Java 中,并发机制非常重要。在以往的程序设计中,我们都是一个任务完成后再进行下一个任务,这样下一个任务的开始必须等待前一个任务的结束。Java 语言提供了并发机制,程序员可以在程序中执行多个线程,每一…

基于Webserver的工业数据采集控制

http协议 http简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于Web Browser(浏览器)到Web Server(服务器)进行数据交互的传输协议。 HTTP是应用层协议 HTTP是一个基于…

打破限制!MySQL 5.7至8.0跨版本迁移,1分钟搞定多版本数据迁移

在上个月,MySQL 5.7 正式结束了生命周期,即EOL(End of Life),意味着Oracle将不再为 MySQL 5.7 提供技术支持,包括Bug修复或安全漏洞,大大增加了使用数据库的风险。在全球关系型数据库市场中&…