LangChain+LLM实战---Langchain-Chatchat概述

LangChain介绍

LangChain是个开源的框架,它可以让AI开发人员把像GPT-4这样的大型语言模型(LLM)和外部数据结合起来。可以简单认为LangChain是LLM领域的Spring,以及开源版的ChatGPT插件系统。

LangChain的强大之处不仅能通过API调用语言模型,还可以执行如下功能:

  • 数据感知:将语言模型连接到其他数据源
  • 具有代理性质:允许语言模型与其环境交互

例如:GPT模型是用到2021年的数据训练的,这可能会有很大的局限性,如果能让GPT模型连接到自定义的数据和计算,就就会产生更多的可能性。LangChain可以让LLM在回答问题时参考整个数据库,可以让GPT模型访问最新的数据,比如报告、文档和网站信息。

LangChian可以将LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起,进而可以自由构建 LLM 应用。

LangChain组件

LangChain提供了各种不同的组件来帮助使用LLM。其核心组件有Models、Indexes、Chains、Memory、Prompts以及Agent,如图所示:

将LangChain的核心组件按照逐渐增加的复杂性排列如下:

  • 模型(models):LangChain支持的各种模型类型以及模型集成。
  • 提示(prompts):LangChain提供了PromptTemplates,允许可以根据用户的输入来动态地更改提示。包括提示管理、提示优化和提示序列化。
  • 记忆(memory):内容记忆。记忆是在链/代理调用之间保持状态的概念。LangChain提供了标准的记忆接口、记忆实现及使用记忆的链/代理示例。
  • 索引(indexes):索引是指对文档进行结构化的方法,以便 LLM 能够更好的与之交互。该组件主要包括:Document Loaders(文档加载器)、Text Splitters(文本拆分器)、VectorStores(向量存储器)以及Retrievers(检索器)。
  • 链(chains):链不仅仅是单个LLM调用,还包括其他系列调用(无论是调用LLM还是不同的实用工具)。LangChain提供了标准的链接口、许多与其他工具的集成。LangChain提供了用于常见应用程序的端到端的链调用。
  • 代理(agents):代理涉及LLM做出行动决策、执行该行动、查看观察结果,并重复该过程直到完成。LangChain提供了标准的代理接口,许多可供选择的代理,以及端到端代理的示例。

LangChain实现原理

  • 通过将大文档进行向量化表示,然后就可以用它和LLM一起工作,只检索需要引用的信息,来创建相关的提示-完成(prompt-completion)对。
  • 当把提示输入到新的聊天机器人里,LangChain就会在向量存储里查询相关的信息,然后将信息和提示一起提供给LLM,生成需要的答案。

Langchain-Chatchat实现原理 

  • LangChain-Chatchat:基于Langchain与ChatGLM等大语言模型的本地知识库问答应用实现。
  • 其实现流程:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> query问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到 prompt中 -> 提交给 LLM生成回答,如图所示:

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

Docker虚拟磁盘文件迁移

使用Docker来实现LangChain+LLM的功能时,通常所使用的镜像比较大,即Docker虚拟磁盘文件ext4.vhdx会比较大。在Windows本地安装Docker Desktop时,ext4.vhdx默认在C盘下,随着docker run项目的增多会变得更大,所以往往会需要迁移到其他盘符,过程如下:

  • 打开Windows CMD
    • 查看docker状态和版本:wsl -l -v
    • 其中docker-desktop-data需要迁移到其他盘
  • wsl --shutdown
  • 导出docker-desktop-data
    • wsl --export docker-desktop-data D:\docker_data\docker-desktop-data.tar
  • 注销 docker-desktop-data
    • wsl --unregister docker-desktop-data
  • 重新导入docker-desktop-data
    • wsl --import docker-desktop-data E:\docker_data\data\ E:\docker_data\docker-desktop-data.tar --version 2 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Panda3d 介绍

Panda3d 介绍 文章目录 Panda3d 介绍Panda3d 的安装Panda3d 的坐标系统介绍Panda3d 的运行Panda3d 加载一个熊猫父节点和子节点之间的关系 验证Panda3d 的坐标系统X 轴的平移Y 轴的平移Z 轴的平移X 轴的旋转Y 轴的旋转Z 轴的旋转 Panda3D是一个3D引擎:一个用于3D渲染和游戏开发…

为什么看了那么多测试技术帖,感觉自己还是菜?

作为测试新手,最爱莫过于看各大牛发的技术贴,这篇很牛叉,那篇也很有道理,似乎自己看着看着也会成为高手。然而几年后,发现自己对专业知识的理解乱的很,里面更有很多自相矛盾的地方,这到底是哪里…

iTransformer: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING

#论文题目:ITRANSFORMER: INVERTED TRANSFORMERS ARE EFFECTIVE FOR TIME SERIES FORECASTING #论文地址:https://arxiv.org/abs/2310.06625 #论文源码开源地址:https://github.com/thuml/Time-Series-Library #论文所属会议:Mach…

Flask基本教程以及Jinjia2模板引擎简介

flask基本使用 直接看代码吧,非常容易上手: # 创建flask应用 app Flask(__name__)# 路由 app.route("/index", methods[GET]) def index():return "FLASK:欢迎访问主页!"if __name__ "__main__"…

vulnhub靶机Venus

下载地址:The Planets: Venus ~ VulnHub 主机发现 arp-scan -l 端口扫描 nmap --min-rate 1000 -p- 192.168.21.132 端口版本扫描 nmap -sV -sT -O -p22,8080 192.168.21.132 对于http-alt HTTP Alternative Services 介绍 | JerryQu 的小站 (imququ.com) 总结…

[迁移学习]UniDAformer域自适应全景分割网络

原文的标题为:UniDAformer: Unified Domain Adaptive Panoptic Segmentation Transformer via Hierarchical Mask Calibration,发表于CVPR2023。 一、概述 域自适应全景分割是指利用一个或多个相关域中的现成标注数据来缓解语义分割数据标注复杂的问题。…

MyBatis的增删改查

2023.10.29 本章学习MyBatis的基本crud操作。 insert java程序如下: ①使用map集合传参 Testpublic void testInsertCar(){SqlSession sqlSession SqlSessionUtil.openSession();//先将数据放到Map集合中,在sql语句中使用 #{map集合的key} 来完成传…

Steger算法实现结构光光条中心提取(python版本)

Steger算法原理 对结构光进行光条中心提取时,Steger算法是以Hessian矩阵为基础的。它的基础步骤如下所示: 从Hessian矩阵中求出线激光条纹的法线方向在光条纹法线方向上将其灰度分布按照泰勒多项式展开,求取的极大值即为光条在该法线方向上…

【Flutter】自定义分段选择器Slider

【Flutter】ZFJ自定义分段选择器Slider 前言 在开发一个APP的时候,需要用到一个分段选择器,系统的不满足就自己自定义了一个; 可以自定义节点的数量、自定义节点的大小、自定义滑竿的粗细,自定义气泡的有无等等… 基本上满足你…

Springboot的Container Images,docker加springboot

Spring Boot应用程序可以使用Dockerfiles容器化,或者使用Cloud Native Buildpacks来创建优化的docker兼容的容器映像,您可以在任何地方运行。 1. Efficient Container Images 很容易将Spring Boot fat jar打包为docker映像。然而,像在docke…

合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)

订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 作者:爱吃饼干的小白鼠。Python领域优质创作者,2022年度博客新星top100入围,荣获多家平台专家称号。…

信号去噪之卡尔曼滤波

在前面的文章 卡尔曼滤波 中曾讲解过卡尔曼滤波在惯性导航和飞行姿态控制中的应用,今天来聊一聊卡尔曼滤波在信号去噪中的应用。 卡尔曼滤波(Kalman Filtering)是一种用于估计系统状态的数学方法,它通过考虑系统的动态模型和传感…

86 最小栈

最小栈 题解1 STL大法好题解2 辅助最小栈(直观,空间换时间)题解3 不需要额外空间(!!!差值!!!) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初…

树莓派 qt 调用multimedia、multimediawidgets、serialport、Qchats

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、测试11.命令安装出现错误 二、测试21. 安装 Qt Charts:2. 安装 Qt Multimedia 和 Qt MultimediaWidgets:3. 安装 Qt SerialPort&…

重磅新闻-国内首家八类网线认证分析仪上市了

伴随USA对国内某些敏感企业的非常不友好,设置层层障碍,技术堡垒。使得一些网线基础制造研发、线缆线束厂、汽车生产生产厂、军工用途的线缆品质的认证、以及相关高校的研发受到了不同的程度的阻碍。重磅消息,国内首家八类网线认证测仪-维信仪…

几个常用的nosql数据库的操作方式

dynamoDB 键 partition key:分区键 定义:分区键是用于分布数据存储的主键,每个项(Item)在表中都必须有一个唯一的分区键值。 特点: 唯一性:每个分区键值在表中必须是唯一的,这是因为…

【Java 进阶篇】Java HTTP 请求消息详解

HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的应用层协议,广泛用于构建互联网应用。在Java中,我们经常需要发送HTTP请求来与远程服务器进行通信。本文将详细介绍Java中HTTP请求消息的各个部分,包括请求行、…

基于纵横交叉算法的无人机航迹规划-附代码

基于纵横交叉算法的无人机航迹规划 文章目录 基于纵横交叉算法的无人机航迹规划1.纵横交叉搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用纵横交叉算法来优化无人机航迹规划。 …

vscode 通过ssh 连接虚拟机vmware(ubuntu)

1.网络连接是否ping的通(ubuntu虚拟机使用的是net 连接方式) 2.配置环境 ubuntu 需要安装ssh server 服务 (1): 安装(Ubuntu安装ssh server) apt-get install openssh-server 检查是否ssh server 是否启动…

PostMan 之 Mock 接口测试

在测试的时候经常会碰到后端开发工程师的接口还没有开发完成,但是测试任务已经分配过来。没有接口怎么测试呢? 测试人员可以通过 mock server 自己去造一个接口来访问。mock server 可用于模拟真实的接口。收到请求时,它会根据配置返回对应的…