什么是 Langchain 以及其核心组件

LangChain

官方文档:LangChain

一、什么是Langchain

LangChain 是一个用于构建基于LLM的应用框架,它提供了对 LLM API 的封装和扩展,使开发者能够更方便地构建复杂的应用。

个人理解:用类比的方法来说,LangChain类似vue框架,因为vue高度封装,用户只需要调用对应的方法就能实现页面的构建路由的管理,而LangChain也是,用户不需要关注底层实现,只需要按顺序调用对应的方法,保证事件处理的逻辑就行。

看到这,可能有一个问题,我必须要用LangChain来实现LLM吗?

其实LLM不借助Langchain也能实现相应的功能,只不过实现起来很复杂,就像页面不用vue或react框架只用html,css也能构建,但是实现起来比较复杂,总的来说LangChain 简化了 LLM 应用程序生命周期的每个阶段。

二、LangChain 核心组件

  1. Prompt 模板: 将用户的输入格式化,在不同的模型下都使用。
    不同的模型可能期望不同的数据格式。在可能的情况下,我们希望允许在不同的模型类型中使用相同的提示,而prompt相当于对不同模型的输入格式进行处理和封装,保证最终输入到不同模型的提示是一致的。
  2. Chains(链): 将多个模块组件组合成一个流程,例如:加载文档 → 分割文本 → 向量化 → 检索 → 生成回答。
  3. Agents(代理): 根据用户输入动态选择工具和操作,实现更智能的交互。根据用户的输入,代理来决定调用哪些工具
  4. Tool(工具): 集成外部 API 或功能模块,如搜索引擎、计算器等,扩展 LLM 的能力。
  5. Memory(记忆/内存): 分为短期内存和长期内存。
    • 短期内存是在单个对话中传递以前的信息(如最近几条对话记录)。
    • 长期内存是维护对话历史,实现多轮对话(如用户偏好,历史对话摘要),长期内存通常需要依赖外部存储(如数据库,Redis)。
  6. Models (模型):
    • 大型语言模型:输入的是字符串,返回的输出的也是字符串。
    • 聊天模型:以聊天消息列表作为输入,并返回聊天消息。
    • 文本嵌入模型:模型以文本作为输入,并返回浮点数列表。这个更多的是用于文档、文本或者大量数据的总结、问答场景,一般是和向量库一起使用,实现向量匹配。其实就是把文本等内容转成多维数组,可以后续进行相似性的计算和检索。
  7. Document Loaders(文档加载器): 支持从多种格式的文件中提取文本内容,供 LLM 使用。比如从 PDF 文件中提取文本。
  8. Vectorstore(向量存储库): 将文本转换为向量,存储在向量数据库中,实现高效的语义搜索。

主要列举了一些比较常用的组件,其实还有其他的组件,可以参考官方文档。

大型语言模型的流程

  1. 假设我们在使用一个智能问答系统,用户提出了一个问题,例如:“请告诉我法国巴黎的天气情况。”​
  2. Agent 接收到用户的问题后,识别出需要获取“法国巴黎天气”的信息。
  3. Agent 决定调用一个天气查询工具(Tool),例如一个调用天气 API 的函数。
  4. 工具执行之后返回查询到的结果,然后代理将工具的输出结果与用户问题一起作为 Prompt 传递给语言模型。
  5. 语言模型结合工具的输出和原始用户输入,生成最终的回答。
  6. 如果用户又问了“那明天呢?”,这个时候 Memory 就能根据上下文识别出“那”指的是“法国巴黎的天气”,在长期使用过程中,内存模块还可以记录用户的个性化偏好,例如喜欢的回答风格、常询问的主题等,Memory也可以会根据个性化偏好生成符合用户风格的回答。
  7. 在这个过程中,Chain 将多个组件(如提示模板、LLM、输出解析器等)按照特定顺序组合,形成一个完整的处理流程。并在各个组件之间传递数据。例如,将用户输入传递给提示模板,生成的提示再传递给 LLM,LLM 的输出再传递给输出解析器。

文本嵌入模型的流程

在这里插入图片描述

  1. 当用户上传一段长文本或 PDF 文档时,会先用 LangChain 提供的文档加载器(Document Loaders)将 PDF 文件读取并解析生成 Document 对象,将长文本切分为较小的片段(Text Splitters),将切分后的文档片段转换为向量表示,并存储在向量数据库(Vectorstore)中,以便后续检索。
  2. 将检索器与语言模型结合,构建一个问答链。​当用户提出问题时,系统将:使用检索器查找相关文档片段。​
  3. 将检索到的内容与用户问题一起作为 Prompt 传递给语言模型。​
  4. 语言模型生成最终的回答。

三、LangChain 的具体应用场景

LangChain 适用于需要复杂逻辑、多步骤处理或与外部系统集成的应用,如智能助理、问答系统。

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

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

相关文章

博客系统功能测试

博客系统网址:http://8.137.19.140:9090/blog_list.html 主要测试内容 功能测试、界面测试、性能测试、易用性测试、安全测试、兼容性测试、弱网测试、安装卸载测试、压力测试… 测试方法及目的 利用selenium和python编写测试脚本,对博客系统进行的相关…

项目制作流程

一、使用 CRA 创建项目 npx create-react-app name 二、按照业务规范整理项目目录 (重点src目录) 三、安装插件 npm install sass -Dnpm install antd --savenpm install react-router-dom 四、配置基础路由 Router 1. 安装路由包 react-router-dom …

ngx_http_random_index_module 模块概述

一、使用场景 随机内容分发 当同一目录下存放多份等价内容(如多张轮播图、不同版本静态页面等)时,可通过随机索引实现负载均衡或流量分散。A/B 测试 通过目录请求自动随机分配用户到不同测试组,无需后端逻辑参与。动态“首页”选…

智能权限守护者:基于Python描述符的动态角色控制实现

智能权限守护者:基于Python描述符的动态角色控制实现 引言:当描述符遇见权限管理 在Python的魔法方法体系中,描述符(Descriptor)以其优雅的属性访问控制机制著称。当我们将描述符与RBAC(基于角色的访问控制)模型结合,就能创造出既灵活又安全的动态权限管理系统。本文…

Linux 的 UDP 网络编程 -- 回显服务器,翻译服务器

目录 1. 回显服务器 -- echo server 1.1 相关函数介绍 1.1.1 socket() 1.1.2 bind() 1.1.3 recvfrom() 1.1.4 sendto() 1.1.5 inet_ntoa() 1.1.6 inet_addr() 1.2 Udp 服务端的封装 -- UdpServer.hpp 1.3 服务端代码 -- UdpServer.cc 1.4 客户端代码 -- UdpClient.…

Linux 内核等待机制详解:prepare_to_wait_exclusive 与 TASK_INTERRUPTIBLE

1. prepare_to_wait_exclusive 函数解析 1.1 核心作用 prepare_to_wait_exclusive 是 Linux 内核中用于将进程以独占方式加入等待队列的关键函数,其主要功能包括: 标记独占等待:通过设置 WQ_FLAG_EXCLUSIVE 标志,表明此等待条目是独占的。 安全入队:在自旋锁保护下,将条…

【Android构建系统】了解Soong构建系统

背景介绍 在Android7.0之前,Android使用GNU Make描述和执行build规则。Android7.0引入了Soong构建系统,弥补Make构建系统在Android层面变慢、容易出错、无法扩展且难以测试等缺点。 Soong利用Kati GNU Make克隆工具和Ninja构建系统组件来加速Android的…

信息学奥赛一本通 1539:简单题 | 洛谷 P5057 [CQOI2006] 简单题

【题目链接】 ybt 1539:简单题 洛谷 P5057 [CQOI2006] 简单题 【题目考点】 1. 树状数组 模板题及讲解:洛谷 P3374 【模板】树状数组 【解题思路】 解法1:树状数组 该有01构成数组初值都为0。 某位置的元素被修改奇数次后值为1&#x…

仓颉开发语言入门教程:搭建开发环境

仓颉开发语言作为华为为鸿蒙系统自研的开发语言,虽然才发布不久,但是它承担着极其重要的历史使命。作为鸿蒙开发者,掌握仓颉开发语言将成为不可或缺的技能,今天我们从零开始,为大家分享仓颉语言的开发教程,…

玉米籽粒发育

成熟玉米籽粒的结构 玉米籽粒的组成 成熟的玉米籽粒主要由以下三部分组成: 母体组织:包括种皮、胎座和花梗。种皮由珠被发育而来,起到保护种子的作用,并在种子的休眠和萌发中发挥重要作用。胚:包含根分生组织、茎分…

sherpa-ncnn:音频处理跟不上采集速度 -- 语音转文本大模型

目录 1. 问题报错2. 解决方法 1. 问题报错 报错: An overrun occurred, which means the RTF of the current model on your board is larger than 1. You can use ./bin/sherpa-ncnn to verify that. Please select a smaller model whose RTF is less than 1 fo…

Postman一直打不开的解决办法

Postman 是一款非常流行的开源 API 开发工具,主要用于构建、测试、调试和文档化应用程序接口(API)。但有时它的性能不会特别稳定,功能限制和扩展性不足;应用于开发、测试、运维等环节,尤其在开发 RESTful A…

问题|对只允许输入的变量是否进行了更改

“对只允许输入的变量是否进行了更改”这一问题的核心是:在编程中,某些变量被设计为仅用于输入(只读),但在代码中可能被意外修改,导致潜在错误。以下是详细解释: 1. 什么是“只允许输入的变量”…

RPC与SOAP的区别

一.RPC(远程过程调用)和SOAP(简单对象访问协议)均用于实现分布式系统中的远程通信,但两者在设计理念、协议实现及应用场景上存在显著差异。 二.对比 1.设计理念 2.协议规范 3.技术特性 4.典型应用场景 5.总结 三.总结…

c#的内存指针操作(仅用于记录)

c#也可以直接操作内存指针,如下为示例: unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…

Jsp技术入门指南【十三】基于 JSTL SQL 标签库实现 MySQL 数据库连接与数据分页展示

Jsp技术入门指南【十三】基于 JSTL SQL 标签库实现 MySQL 数据库连接与数据分页展示 前言一、回顾SQL标签的内容1. 什么是JSTL SQL标签?2.为什么要用SQL标签?3.第一步:引入SQL标签库4. SQL标签的核心功能:连接数据库标签常用属性&…

羽毛球订场小程序源码介绍

基于ThinkPHP、FastAdmin以及UniApp开发的羽毛球订场小程序源码,这款小程序旨在为羽毛球爱好者提供便捷的场地预订服务。 该小程序前端采用UniApp框架开发,具有良好的跨平台兼容性,可以一键发布至iOS和Android平台,极大地提高了开…

Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目

环境: Windows: win10, UE4.27, Visual Studio 2022 Community.Linux: 22.04 windows环境安装教程: 链接遇到的问题(问题:解决方案) 点击Linux打包按钮,跳转至网页而不是执行打包流程:用VS打开项…

SpringBoot 3.x 集成 MyBatisPlus

文章目录 集成 MyBatisPlus第 1 步:创建 SpringBoot 项目第 2 步:添加 MyBatisPlus 依赖第 3 步:编写 CRUD 代码创建 Entity创建 Mapper创建 Service编写 Controller第 4 步:执行初始化 SQL第 5 步:配置第 6 步:测试测试 ControllerMapper 层单元测试参考🚀 目标 1:基…

java基础-抽象类和抽象方法

1.abstract 可以修饰:类、方法 (1)修饰类: 类不能被实例化; 抽象类一定有构造器,便于子类实例化时调用; (2)修饰方法:抽象方法 只有方法的声明&#xff…