LangChain概述

news2025/1/30 15:21:49

文章目录

    • 为什么需要LangChain
    • LLM应用开发的最后1公里
    • LangChain的2个关键词
    • LangChain的3个场景
    • LangChain的6大模块

为什么需要LangChain

    首先想象一个开发者在构建一个LLM应用时的常见场景。当你开始构建一个新项目时,你可能会遇到许多API接口、数据格式和工具。对于一个非AI领域的开发者来说,要去研究每一个工具、接口都有着巨大的负担。现在,假设你要构建一个涉及语言处理的应用,比如一个智能聊天机器人,你可能会想:我难道要一步步去学习如何训练一个语言模型,如何处理各种数据,还要解决所有的兼容性问题吗?这就是LangChain的价值所在。LangChain是一个集成框架,它为开发者提供了一系列的工具和组件,使得与语言模型中各种数据(如Google Analytics、Stripe、SQL、PDF、CSV等)的连接、语言模型的应用和优化变得简单直接。其实,LangChain就好比一把“瑞士军刀”,你不再需要为每一个任务找一个新工具,它提供了一站式的解决方案。正如你要修理一个小小的家用电器,而你已经拥有了一个完整的工具箱。不管你遇到什么问题,打钉子、拧螺丝、剪线,工具箱里总有一个合适的工具等着你。

LangChain为你提供了这样的工具箱,不仅涵盖了基础工具,还为个性化需求提供了自定义组件解决方案。现在,随着LangChain在开发者社区中的受欢迎程度逐渐上升,可以明显地看到使用LangChain的开发者数量呈现激增的趋势。2023年8月,LangChain开源框架已经收获了惊人的数据:5.82万个星标、557位专注开发者,以及7800位积极的分支开发者。这些数字从深层次上代表了众多开发者对LangChain实用性和未来潜力的坚定认可。正是因为LangChain连接了开发者和复杂的LLM应用,因此,开发变得更为简单、高效。也因为这种受欢迎程度和媒体报道的广泛传播,越来越多的开发者,不论是LLM领域的还是非LLM领域的,都选择使用LangChain。

LLM应用开发的最后1公里

想象一下,一个对编程完全陌生的初学者,正面临着如何与模型进行交互的诸多问题,哪怕是简单的GET或POST请求,都可能成为其开发路上的第一道门槛。而LangChain的存在恰恰能跨越这道门槛,使得LLM应用开发变得触手可及。

首先,LangChain的简洁性让它脱颖而出。开发者只需要写儿行代码,就能运行一个大型LLM程序,甚至快速构建一个响应式的机器人。这种简洁性意味着,无论是对于有经验的开发者还是初人此领域的新手,LangChain都能为他们进入LLM应用开发的世界铺平道路。

LangChain还为开发者集成了丰富的内置链组件,为开发者解决了重复编写代码的问题。面对特定的任务,如摘要或问答,LangChain提供了专门的摘要链和问答链,简化了开发流程。Agent的引入将工具和数据库的整合提升到了一个新的层次,使得开发者可以全心投人任务。

借助LangChain,开发者除了可以实现LLM与真实世界的在线数据增强,即RAG(检索增强生成),还能在私有环境中部署模型,或是针对特定任务选择更精确的模型平台及型号,甚至随时切换各大平台推出的新模型。而对于那些未选择使用LangChain的开发者来说,他们很可能会被各模型平台的接口选择、提示词的编写,以及输出格式的处理等问题所困扰,这些复杂的问题会成为开发过程中的巨大障碍,甚至导致开发者“从人门到放弃”。

在LLM应用开发中,一个经常被遗漏但至关重要的环节是,如何为LLM编写合适的提示词,确保LLM能够准确理解开发者的意图。对于许多开发者,特别是初学者来说,这可能是一个具有挑战性的任务。然而,LangChain为这一问题提供了有力的解决方案。

对于那些在模型提示词编写上感到困惑的开发者来说,LangChain提供了多种模板供选择。这并不仅仅是一些随意整合的模板,而是与各种应用、工具紧密集成的组件,其中包含了大量已经经过实际验证的提示词模板。这意味着开发者无须从零开始编写程序,只需要在LangChain提供的模板中找到与任务相匹配的部分,并进行相应的调整即可。

以SQL查询为例,这是一个对许多开发者来说相对熟悉,但在与LLM结合时可能存在困惑的领域。如果一个开发者刚开始接触如何为SQL编写提示词,他可以轻松地在LangChain中找到SQL组件的提示词模板。这些模板中包括如何编写语法正确的PostgreSQL查询、如何查看查询结果,以及如何返回针对输入问题的答案。更进一步,LangChain提供的提示词模板也包括各种查询的最佳实践,如限制PostgreSQL查询结果、正确使用列名、注意使用当前日期的函数等。例如,LangChain提供了以下格式化SQL提示词模板(翻译):

1 你是一个PostgreSQL专家。给定一个输人问题,首先创建一个语法正确的PostgreSQL查询来运行,然后查看查询结果,并返回针对输人问题的答案。
2 除非用户明确指定了要返回的结果数量,否则应使用PostgreSQL的LIMT子句来限制查询结果,最多返回topk条记录。你可以对结果进行排序,以返回数据库中最有信息价值的数据。
3 绝对不要查询表中的所有列。你只能查询回答问题所需的列。用双引号(")将每个列名包裹起来,表示它们是界定的标识符。
4 注意只使用你在表中可以看到的列名,不要查询不存在的列。此外,要注意哪一列在哪个表中。
5 如果问题涉及“今天”,请注意使用CURRENT DATE函数获取当前日期。
6 
7 使用以下格式:
8 
9 问题:这里的问题
10 SQL查询:要运行的SQL查询
11 SQL结果:SQL查询的结果
12 答案:这里的最终答案
13 
14 只使用以下表:
15
16 {table info)
17
18 问题:{inpu}

t想象一下,如果没有LangChain提供的这个提示词模板,当你要开始编写一段SQL查询代码时,会走多少弯路?LLM应用开发的最后1公里,其意义是确保开发者无须为了一个小细节而多走弯路,正如居民无须跑很远坐公交车一样,每一个关键的细节都能得到及时而准确的处理,使得整个开发过程更为高效。

LangChain的2个关键词

在现代软件工程中,如何将庞大复杂的系统划分为更小、更易于管理和使用的部分,已经成了设计和开发的核心考量。在这个背景下,LangChain以“组件”和“链”作为2个关键概念,为LLM应用开发者提供了便利。

首先来谈谈“组件”。在LangChain中,组件不是代码的拼凑,而是一个具有明确功能和用途的单元。组件包括LLM模型包装器、聊天模型包装器及与数据增强相关的一系列工具和接口。这些组件就是LangChain中的核心,你可以把它们看作数据处理流水线上的各个工作站。每个组件都有其特定的职责,如处理数据的输入输出、转化数据格式。

然而,单纯的组件还不足以满足复杂应用的需求,这时“链”便显得尤为关键。在LangChain的体系中,链是将各种组件连接在一起的纽带,它能够确保组件之间的无缝集成和在程序运行环境中的高效调用。无论是对于LLM还是其他工具,链都扮演着至关重要的角色。举个例子,LLMChain,这是LangChain中最常用的链,它可以整合LLM模型包装器和记忆组件,让聊天机器人拥有“记忆”。

值得一提的是,LangChain并没有止步于提供基础的组件和链。反之,它进一步为这些核心部分提供了标准的接口,并与数据处理平台及实际应用工具紧密集成。这样的设计不仅强化了LangChain与其他数据平台和实际工具的连接,也确保了开发者能在一个开放且友好的环境中轻松地进行LLM应用开发。

以最常见的聊天机器人为例,为了在各种场景中为用户提供自然、流畅的对话体验,聊天机器人需要具备多种功能,包括与用户进行日常交流、获取天气信息及实时搜索。这一设计目标意味着要处理的任务范围覆盖了从简单的日常对话到复杂的信息查询,因此,一个结构化、模块化的设计方案是必要的。

在此背景下,LangChain的“组件”和“链”提供了极大的帮助。利用LangChain的组件,开发者可以为聊天机器人设计不同的模块,如与用户进行日常交流的模块、获取天气信息的模块及进行实时搜索的模块。每个模块中的组件都具备特定的功能,并专门处理与之相关的任务。例如,当需要回答关于天气的问题时,机器人可以调用“搜索工具组件”来获取天气信息数据。

但是,单纯的组件无法满足机器人的整体运作。为了确保组件之间可以协同工作并为用户提供顺畅的体验,需要用到LangChain的“链”来整合这些组件。例如,当用户询问一个涉及多个组件的问题时,如“今天天气怎么样,同时告诉我量子力学是什么”,LangChain的链就可以确保“搜索工具组件”和“维基百科查询组件”协同工作,为用户提供完整的回答。

具体来说,当用户提出问题时,LangChain提供的API允许机器人执行以下操作:

  1. 请求LLM解释用户的输人,并根据输人内容生成对应的查询请求,这可能涉及一个或多个组件;
  2. 根据生成的查询请求,激活对应的组件以获取必要的数据或信息;
  3. 利用LLM生成基于自然语言的回答,将各组件的返回结果整合为用户可以理解的回答。

通过这种方式,开发者无须深人每一个复杂的处理细节,只需要利用LangChain的API输人用户的问题,并将得到的答案呈现给用户即可。这不仅使聊天机器人能够提供丰富的信息服务,还能确保LLM应用自然而然地融人人们的日常生活,达到设计初衷。

LangChain的3个场景

LangChain正在重新定义LLM应用的开发方式,尤其是在问答系统、数据处理与管理、自动问答与客服机器人这3个场景下。以下是对LangChain在这3个场景下作用的分析。第1个场景是问答系统。问答系统已经成为许多LLM应用的重要组成部分,从简单的搜索工具到复杂的知识库查询工具。LangChain在这方面展现了其出色的能力。

当开发者面临需要从长篇文章或特定数据源中提取信息的挑战时,LangChain可以轻松地与这些外部数据源交互,迅速提取关键信息,然后执行生成操作,以生成准确的回答。

第2个场景是数据处理与管理,如RAG。在数据驱动的当下,RAG成了一个非常热门的LLM应用落地方向。RAG结合了检索和生成两个阶段,为用户提供了更为精准和富有深度的回答。LangChain采用了LEDVR工作流,实现了RAG的功能。

LEDVR工作流将数据处理的每一个步骤标准化,确保了数据从输入到输出的完整性和准确性。首先,开发者会使用文档加载器,如WebBaseLoader,从外部数据源导人所需的数据。这一步确保了数据的完整性和原始性。接着,数据会被传输到嵌人包装器,如OpenAIEmbeddings中。这一步的主要目的是将每一份文档转化为一个能够在机器学习模型中使用的向量。这个向量能够捕获文档的主要特征,使得后续的处理更为高效。

为了更好地处理大量的数据,LangChain中引入了分块转化步骤。通过使用如RecursiveCharacter TextSplitter这样的工具,文档被切割成更小的数据块。这不仅提高了处理速度,还使得每一个数据块都能得到更为精准的处理。当所有的数据块都被处理完毕,它们会被存储到向量存储系统,如FAISS中。这个存储系统能够确保数据的安全,同时也能提供一个高效的查询接口。最后,检索器(如ConversationalRetrievalChain)被用来从向量存储系统中检索相关的文档。这一步结合了用户查询和向量存储系统中的数据,为用户提供了最为相关的回答。

第3个场景是自动问答与客服机器人。在许多在线平台上,客服机器人已经成为用户与公司之间的首要交互点。利用LangChain,开发者成功构建了能够实时响应用户查询的客服机器人。这种实时响应得益于LangChain的Agent功能,其中涉及LLM决策,并根据反馈不断优化交互的过程。这样的设计使客服机器人不仅能够及时响应,还能提供更加精确的信息或解决方案。LangChain已经在这3个关键场景中展现了强大的潜力,为开发者提供了实用且强大的工具,使开发者可以更加高效地实现各种开发需求。

LangChain的6大模块

针对LLM应用开发者的需求,LangChain推出了6大核心模块。如下图所示,这些模块覆盖了从模型I/O到数据增强,从链到记忆,以及从Agent到回调处理器的全方位功能。借助这些模块中的包装器和组件,开发者能够更为方便地搭建LLM应用。

图片名称
  1. 模型I/O(Model IO):对于任何大语言模型应用来说,其核心无疑都是模型自身。LangChain提供了与任何大语言模型均适配的模型包装器(模型I/O的功能),分为LLM和聊天模型包装器(Chat Model)。模型包装器的提示词模板功能使得开发者可以模板化、动态选择和管理模型输人。LangChain自身并不提供大语言模型,而是提供统一的模型接口。模型包装器这种包装方式允许开发者与不同模型平台底层的API进行交互,从而简化了大语言模型的调用,降低了开发者的学习成本。此外,其输出解析器也能帮助开发者从模型输出中提取所需的信息。
  2. 数据增强(Data Connection):许多LLM应用需要的用户特定数据并不在模型的训练集中。LangChain提供了加载、转换、存储和查询数据的构建块。开发者可以利用文档加载器从多个来源加载文档,通过文档转换器进行文档切割、转换等操作。
    矢量存储和数据检索工具则提供了对嵌人数据的存储和查询功能。
  3. 链(Chain):单独使用LLM对于简单应用可能是足够的,但面对复杂的应用,往往需要将多个LLM模型包装器或其他组件进行链式连接。LangChain为此类“链式”应用提供了接口。
  4. 记忆(Memory):大部分的LLM应用都有一个对话式的界面,能够引用之前对话中的信息是至关重要的。LangChain提供了多种工具,帮助开发者为系统添加记忆功能。记忆功能可以独立使用,也可以无缝集成到链中。记忆模块需要支持两个基本操作,即读取和写入。在每次运行中,链首先从记忆模块中读取数据,然后在执行核心逻辑后将当前运行的输人和输出写人记忆模块,以供未来引用。
  5. Agent:核心思想是利用LLM选择操作序列。在链中,操作序列是硬编码的,而在Aget代理中,大语言模型被用作推理引擎,确定执行哪些操作,以及它们的执行顺序。
  6. 回调处理器(Callback):LangChain提供了一个回调系统,允许开发者在LLM应用的各个阶段对状态进行干预。这对于日志记录、监视、流处理等任务非常有用。通过API提供的callbacks参数,开发者可以订阅这些事件。

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

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

相关文章

Java基于SSM框架的互助学习平台小程序【附源码、文档】

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

lightweight-charts-python 包 更新 lightweight-charts.js 的方法

lightweight-charts-python 是 lightweight-charts.js 的 python 包装,非常好用 lightweight-charts 更新比较频繁,导致 lightweight-charts-python 内置的 lightweight-charts 经常不是最新的。 新的 lightweight-charts 通常可以获得性能改进和bug修复…

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制,其核心理念是在组件加载或数据获取过程中,先展示一个占位符(loading state),从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载:通过代码分包实现组件…

解决报错“The layer xxx has never been called and thus has no defined input shape”

解决报错“The layer xxx has never been called and thus has no defined input shape”(这里写自定义目录标题) 报错显示 最近在跑yolo的代码时遇到这样一个错误,显示“the layer {self.name} has never been called”.这个程序闲置了很久,每次一遇到…

【AI论文】FilmAgent: 一个用于虚拟3D空间中端到端电影制作自动化的多智能体框架

摘要:虚拟电影制作涉及复杂的决策过程,包括剧本编写、虚拟摄影以及演员的精确定位和动作设计。受近期基于语言智能体社会的自动化决策领域进展的启发,本文提出了FilmAgent,这是一个新颖的、基于大型语言模型(LLM&#…

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具,主要用于批处理和大数据分析,而不是为OLTP(在线事务处理)操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…

VUE之路由Props、replace、编程式路由导航、重定向

目录 1、路由_props的配置 2、路由_replaces属性 3、编程式路由导航 4、路由重定向 1、路由_props的配置 1)第一种写法,将路由收到的所有params参数作为props传给路由组件 只能适用于params参数 // 创建一个路由器,并暴露出去// 第一步…

【开源免费】基于Vue和SpringBoot的社区智慧养老监护管理平台(附论文)

本文项目编号 T 163 ,文末自助获取源码 \color{red}{T163,文末自助获取源码} T163,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

excel如何查找一个表的数据在另外一个表是否存在

比如“Sheet1”有“张三”、“李四”“王五”三个人的数据,“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列,修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的,就能找到两…

当AI学会“顿悟”:DeepSeek-R1如何用强化学习突破推理边界?

开篇:一场AI的“青春期叛逆” 你有没有想过,AI模型在学会“推理”之前,可能也经历过一段“中二时期”?比如,解题时乱写一通、语言混搭、答案藏在火星文里……最近,一支名为DeepSeek-AI的团队,就…

(Java版本)基于JAVA的网络通讯系统设计与实现-毕业设计

源码 论文 下载地址: ​​​​c​​​​​​c基于JAVA的网络通讯系统设计与实现(源码系统论文)https://download.csdn.net/download/weixin_39682092/90299782https://download.csdn.net/download/weixin_39682092/90299782 第1章 绪论 1.1 课题选择的…

STM32调试手段:重定向printf串口

引言 C语言中经常使用printf来输出调试信息,打印到屏幕。由于在单片机中没有屏幕,但是我们可以重定向printf,把数据打印到串口,从而在电脑端接收调试信息。这是除了debug外,另外一个非常有效的调试手段。 一、什么是pr…

基于Flask的哔哩哔哩评论数据可视化分析系统的设计与实现

【Flask】基于Flask的哔哩哔哩评论数据可视化分析系统的设计与实现(完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 该系统可以搜索查看作者、播放量、评论等相关信息,并将相关的分析…

YOLO目标检测4

一. 参考资料 《YOLO目标检测》 by 杨建华博士 本篇文章的主要内容来自于这本书,只是作为学习记录进行分享。 二. 环境搭建 (1) ubuntu20.04 anaconda安装方法 (2) 搭建yolo训练环境 # 首先,我们建议使用Anaconda来创建一个conda的虚拟环境 conda cre…

​ONES 春节假期服务通知

ONES 春节假期服务通知 灵蛇贺岁,瑞气盈门。感谢大家一直以来对 ONES 的认可与支持,祝您春节快乐! 「2025年1月28日 ~ 2025年2月4日」春节假期期间,我们的值班人员将为您提供如下服务 : 紧急问题 若有紧急问…

Redis部署方式全解析:优缺点大对比

Redis部署方式全解析:优缺点大对比 一、引言 Redis作为一款高性能的内存数据库,在分布式系统、缓存、消息队列等众多场景中都有着广泛的应用。选择合适的Redis部署方式,对于系统的性能、可用性、可扩展性以及成本等方面都有着至关重要的影响…

【新春不断更】数据结构与算法之美:二叉树

Hello大家好,我是但凡!很高兴我们又见面啦! 眨眼间已经到了2024年的最后一天,在这里我要首先感谢过去一年陪我奋斗的每一位伙伴,是你们给予我不断前行的动力。银蛇携福至,万象启新程。蛇年新春之际&#xf…

Linux环境基础开发工具的使用(apt, vim, gcc, g++, gbd, make/Makefile)

什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安 装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的…

渗透测试之WAF规则触发绕过规则之规则库绕过方式

目录 Waf触发规则的绕过 特殊字符替换空格 实例 特殊字符拼接绕过waf Mysql 内置得方法 注释包含关键字 实例 Waf触发规则的绕过 特殊字符替换空格 用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格 这个方法也可以部分绕过最新版本的…

Harmony Next 跨平台开发入门

ArkUI-X 官方介绍 官方文档:https://gitee.com/arkui-x/docs/tree/master/zh-cn ArkUI跨平台框架(ArkUI-X)进一步将ArkUI开发框架扩展到了多个OS平台:目前支持OpenHarmony、Android、 iOS,后续会逐步增加更多平台支持。开发者基于一套主代码…