好书安利 | LangChain入门指南:构建高可复用、可扩展的LLM应用程序(送PDF)轻松入门LangChain

《LangChain入门指南》

LangChain作为大模型集成框架鼎鼎大名,这本《LangChain入门指南》是一本很及时的书,值得推荐~

图片

01

为什么需要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。

02

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的LIMIT子句来限制查询结果,最多返回top_k条记录。你可以对结果进行排序,以返回数据库中最有信息价值的数据。

3 绝对不要查询表中的所有列。你只能查询回答问题所需的列。用双引号(")将每个列名包裹起来,表示它们是界定的标识符。

4 注意只使用你在表中可以看到的列名,不要查询不存在的列。此外,要注意哪一列在哪个表中。

5 如果问题涉及“今天”,请注意使用CURRENT_DATE函数获取当前日期。

6

7 使用以下格式:

8

9 问题:这里的问题

10 SQL查询:要运行的SQL查询

11 SQL结果:SQL查询的结果

12 答案:这里的最终答案

13

14 只使用以下表:

15

16 {table_info}

17

18 问题:{input}

想象一下,如果没有LangChain提供的这个提示词模板,当你要开始编写一段SQL查询代码时,会走多少弯路?

LLM应用开发的最后1公里,其意义是确保开发者无须为了一个小细节而多走弯路,正如居民无须跑很远坐公交车一样, 每一个关键的细节都能得到及时而准确的处理,使得整个开发过程更为高效。

03

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应用自然而然地融入人们的日常生活,达到设计初衷。

04

LangChain的3个场景

LangChain正在重新定义LLM应用的开发方式,尤其是在问答系统、数据处理与管理、自动问答与客服机器人这3个场景下。以下是对LangChain在这3个场景下作用的分析。

第1个场景是问答系统。 问答系统已经成为许多LLM应用的重要组成部分,从简单的搜索工具到复杂的知识库查询工具。LangChain在这方面展现了其出色的能力。当开发者面临需要从长篇文章或特定数据源中提取信息的挑战时,LangChain 可以轻松地与这些外部数据源交互,迅速提取关键信息,然后执行生成操作,以生成准确的回答。

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

LEDVR工作流将数据处理的每一个步骤标准化,确保了数据从输入到输出的完整性和准确性。首先,开发者会使用文档加载器,如WebBaseLoader,从外部数据源导入所需的数据。这一步确保了数据的完整性和原始性。

接着,数据会被传输到嵌入包装器,如OpenAIEmbeddings中。这一步的主要目的是将每一份文档转化为一个能够在机器学习模型中使用的向量。这个向量能够捕获文档的主要特征,使得后续的处理更为高效。

为了更好地处理大量的数据,LangChain中引入了分块转化步骤。通过使用如RecursiveCharacterTextSplitter这样的工具,文档被切割成更小的数据块。这不仅提高了处理速度,还使得每一个数据块都能得到更为精准的处理。

当所有的数据块都被处理完毕,它们会被存储到向量存储系统,如FAISS中。这个存储系统能够确保数据的安全,同时也能提供一个高效的查询接口。

最后,检索器(如ConversationalRetrievalChain)被用来从向量存储系统中检索相关的文档。这一步结合了用户查询和向量存储系统中的数据,为用户提供了最为相关的回答。

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

LangChain已经在这3个关键场景中展现了强大的潜力,为开发者提供了实用且强大的工具,使开发者可以更加高效地实现各种开发需求。

05

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选择操作序列。在链中,操作序列是硬编码的,而在Agent代理中,大语言模型被用作推理引擎,确定执行哪些操作,以及它们的执行顺序。

6. 回调处理器(Callback): LangChain提供了一个回调系统,允许开发者在LLM应用的各个阶段对状态进行干预。这对于日志记录、监视、流处理等任务非常有用。通过API提供的callbacks参数,开发者可以订阅这些事件。

如果你想更多了解这门迅速发展的大模型技术框架,这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本书由LangChain中文网联合创始人李特丽与创始人康轶文共同编著!

本书专门为那些对自然语言处理技术感兴趣的读者提供了系统的LLM应用开发指南。

全书分为11章,从LLM基础知识开始,通过LangChain这个开源框架为读者解读整个LLM应用开发流程。

  • 第1~2章概述LLM技术的发展背景和LangChain框架的设计理念。
  • 从第3章开始,分章深入介绍LangChain的6大模块,包括模型I/O、数据增强、链、记忆等,通过大量代码示例让读者了解其原理和用法。
  • 第9章通过构建PDF问答程序,帮助读者将之前学习的知识应用于实践。
  • 第10章则介绍集成,可拓宽LangChain的用途。
  • 第11章为初学者简要解析LLM的基础理论,如Transformer模型等。

本书以LangChain这个让人熟悉的框架为主线,引导读者一步一步掌握LLM应用开发流程,适合对大语言模型感兴趣的开发者、AI应用程序开发者阅读。

图片

这本书籍以及完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

不使用canvs也能创建出点状背景

div{ height: 100%; touch-action: none; background: radial-gradient(circle, #e6e6e6 1px, transparent 1px); /* 创建一个点状背景 */ background-size: 15px 15px; /* 控制点的大小和间距 */ padding: 20px; /* 添加内边距使内容不靠边 */ position: relative; /* 让内部内…

树形DP——AcWing 323. 战略游戏

树形DP 定义 树形动态规划(Tree Dynamic Programming,简称树形DP)是一种在树形结构上应用动态规划算法的技术。它利用树的递归结构,通过定义状态和状态转移方程,来求解与树相关的最优化问题,如树上的最长…

不使用cmake,如何在vs2019对cpp项目进行文件夹分类?

不使用cmake,如何在vs2019对cpp项目进行文件夹分类? 1.不使用cmake的根目录指的是哪里?2.什么时候进行项目管理?3.应该分成什么样的文件夹?4.如何分类? 1.不使用cmake的根目录指的是哪里? 查看项…

最新AI智能聊天对话问答系统源码(图文搭建部署教程)+AI绘画,文生图,TTS语音识别输入,文档分析

一、人工智能语言模型和AI绘画在多个领域广泛应用 人工智能语言模型和AI绘画在多个领域都有广泛的应用。以下是一些它们的主要用处: 人工智能语言模型 内容生成 写作辅助:帮助撰写文章、博客、报告、剧本等。 代码生成:自动生成或补全代码&…

sudo: /etc/init.d/ssh: command not found

在 WSL 中尝试启动 SSH 服务时遇到 sudo: /etc/init.d/ssh: command not found 错误 安装 OpenSSH 服务器 更新软件包列表 sudo apt update安装 OpenSSH 服务器 sudo apt install openssh-server启动 SSH 服务 在 WSL 2 上,服务管理与传统 Linux 系统有所不同。你可以手动启动…

C++之STL(十)

1、适配器 2、函数适配器 #include <iostream> using namespace std;#include <algorithm> #include <vector> #include <functional>bool isOdd(int n) {return n % 2 1; } int main() {int a[] {1, 2, 3, 4, 5};vector <int> v(a, a 5);cou…

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作

在数字化办公日益普及的今天&#xff0c;一款高效、便捷且功能强大的桌面编辑器成为了职场人士不可或缺的工具。ONLYOFFICE 8.1版本桌面编辑器凭借其卓越的性能和丰富的功能&#xff0c;成功吸引了众多用户的目光。今天&#xff0c;我们将对ONLYOFFICE 8.1版本桌面编辑器进行全…

使用el-amap-info-window遇到的问题

使用的这个库https://github.com/yangyanggu/vue-amap 想要滚动amapInfoWindow里的内容&#xff0c;但不触发地图缩放 默认滚动amapInfoWindow里的内容&#xff0c;会触发地图缩放。看了C站一个大佬的文章解决了。 amapInfoWindow会自动滚动到顶部 我的amapInfoWindow里面用了…

【智能制造-4】机器人控制器

机器人控制器中分哪几个模块&#xff1f; 机器人控制器通常由以下几个主要模块组成: 运动控制模块: 负责机器人各轴电机的位置、速度、加速度等控制 实现机器人末端执行器的精确定位和运动控制传感器接口模块: 负责机器人各种传感器信号的采集和处理 为运动控制、环境感知等提…

Python-正则表达式

目录 一、打开正则表达式 二、正则表达式的使用 1、限定符 &#xff08;1&#xff09;x*&#xff1a;*表示它前面的字符y 可以有0个或多个&#xff1b; &#xff08;2&#xff09;x&#xff1a;表示它前面的字符可以出现一次以上&#xff1b;&#xff08;只可以匹配多次&…

2024年6月大众点评深圳餐饮店铺POI分析18万家

2024年6月大众点评深圳餐饮店铺POI共有178720家 店铺POI点位示例&#xff1a; 店铺id G9TSD2JvdLtA7fdm 店铺名称 江味龙虾馆(南山店) 十分制服务评分 8.8 十分制环境评分 8.8 十分制划算评分 8.6 人均价格 128 评价数量 12840 店铺地址 南山大道与桂庙路交叉口西北角…

RAG开发中常见的12个痛点及解决方案

受到 Barnett 等人论文《构建检索增强生成系统的七大挑战》启发&#xff0c;本文将探讨论文中提及的七大挑战及在开发 RAG&#xff08;检索增强生成&#xff09;流程中常遇到的五个额外难题。更为重要的是&#xff0c;我们将深入讨论解决这些 RAG 难题的策略&#xff0c;以便我…

使用 WebGL 创建 3D 对象

WebGL Demohttps://mdn.github.io/dom-examples/webgl-examples/tutorial/sample5/index.html 现在让我们给之前的正方形添加五个面从而可以创建一个三维的立方体。最简单的方式就是通过调用方法 gl.drawElements() 使用顶点数组列表来替换之前的通过方法gl.drawArrays() 直接…

检测SD NAND文件系统异常和修复的方法

目录 1、打开命令提示符&#xff1a; 2、运行chkdsk命令&#xff1a; 3、命令参数说明&#xff1a; chkdsk是Windows中的一个命令行工具&#xff0c;用于检查磁盘上的文件系统错误和修复坏块。MK米客方德为您提供指导&#xff0c;以下是使用chkdsk的步骤&#xff1a; 1、打开…

综合IT运维管理解决方案

综合IT运维管理解决方案 在信息化和数字化高速发展的时代&#xff0c;企业的IT运维管理已经成为保障业务连续性和提升运营效率的关键环节。高效的IT运维管理不仅能够降低运维成本&#xff0c;还能提升服务质量和用户满意度。本文将详细介绍综合IT运维管理解决方案&#xff0c;…

eBPF技术揭秘:DeepFlow如何引领故障排查,提升运维效率

DeepFlow 实战&#xff1a;eBPF 技术如何提升故障排查效率 目录 DeepFlow 实战&#xff1a;eBPF 技术如何提升故障排查效率 微服务架构系统中各个服务、组件及其相互关系的全景 零侵扰分布式追踪&#xff08;Distributed Tracing&#xff09;的架构和工作流程 关于零侵扰持…

华为od 2024 | 什么是华为od,od 薪资待遇,od机试题清单

目录 专栏导读华为OD机试算法题太多了&#xff0c;知识点繁杂&#xff0c;如何刷题更有效率呢&#xff1f; 一、逻辑分析二、数据结构1、线性表① 数组② 双指针 2、map与list3、队列4、链表5、栈6、滑动窗口7、二叉树8、并查集9、矩阵 三、算法1、基础算法① 贪心思维② 二分查…

Spring Session将HttpSession保存到Redis中,实现重启应用会话不丢失

这篇文章介绍一下在springboot项目中整合Spring Session&#xff0c;将session会话信息保存到Redis中&#xff0c;防止重启应用导致会话丢失。 第一步 创建一个springboot项目&#xff0c;添加spring-session-redis的依赖&#xff0c;因为要用到reids&#xff0c;所以要把redi…

扩散模型中的UNET

目录 一、为什么UNET模型可以用于去噪网络二、扩散模型中的UNET是一个条件去噪网络&#xff0c;怎么实现的三、UNET用于分割和用去去噪的区别 一、为什么UNET模型可以用于去噪网络 下采样部分: 能够提取图像的深层次特征&#xff0c;这些特征往往包含图像的重要结构和信息&…

原型开发:加速需求验证与设计优化

目录 前言1. 原型开发的意义1.1 定义与概述1.2 原型的类型 2. 原型开发的优势2.1 明确需求2.2 提升用户满意度2.3 降低开发风险 3. 原型开发的挑战3.1 过多的原型开发3.2 资源投入与管理3.3 期望管理 4. 优化原型开发流程4.1 明确目标与范围4.2 选择合适的工具和方法4.3 加强用…