当前位置: 首页 > news >正文

【LLM】快速开始 LangChain


theme: orange

LangChain是一个软件开发工具包,它通过将组件链接在一起并公开简单统一的API,简化了大型语言模型和应用程序的集成。本篇文章将会简要介绍,让各位开发者对其有一个整体的认识。

前言

如果你是一名软件开发人员,努力跟上有关大型语言模型的最新热点,你可能会感到不知所措或困惑,就像我一样。似乎每天我们都会看到一个新的开源模型的发布,或者一个商业模型提供商宣布的重大新功能。

大型语言模型(LLMs)正迅速成为现代软件技术栈的一个重要组成部分。然而,无论您是想使用像OpenAI这样的提供商提供的模型API,还是将开源模型嵌入到您的应用程序中,构建大型语言模型驱动的应用程序不仅仅是发送一个提示并等待回应。有许多因素需要考虑,从调整参数到增强提示再到适度地回应。

大型语言模型(LLMs)是无状态的,这意味着它们不会记住对话中的先前消息。维护历史记录并将上下文提供给LLM是开发人员的责任。这些对话可能需要存储在一个持久化数据库中,以便在新的对话中恢复上下文。因此,为LLMs添加短期和长期记忆是开发人员的关键责任之一。

另一个挑战是,对于LLMs并没有通用的规则。您可能需要使用针对不同场景的多个专用模型,如情感分析、分类、问答和总结。处理多个LLMs非常复杂,需要相当多的管道工作。

为构建LLM应用程序的统一API层

LangChain是一个旨在简化LLM和应用程序集成的SDK。它解决了我们之前讨论的大部分挑战。LangChain类似于ODBC或JDBC驱动程序,它通过让您专注于标准SQL语句来抽象底层数据库。LangChain通过公开简单统一的API来抽象底层LLM的实现细节。这个API使得开发人员可以轻松地更换模型,而无需对代码进行重大更改。

LangChain与ChatGPT大约同时出现。其创建者Harrison Chase在2022年10月底进行了第一次提交,就在LLM浪潮全面爆发之前。从那时起,社区一直在积极贡献,使LangChain成为与LLM互动的最佳工具之一。

LangChain是一个强大的框架,可以与外部工具集成形成一个生态系统。让我们了解一下它如何协调从LLM获得期望结果的流程。

image.png

数据源 (Data sources)

应用程序需要从外部来源(如PDF、网页、CSV和关系数据库)获取数据,以构建LLM的上下文。LangChain无缝集成了可以访问和检索来自不同来源数据的模块。

词嵌入 (Word embeddings)

从某些外部来源获取的数据必须转换为向量。这是通过将文本传递给与LLM关联的词嵌入模型来完成的。例如,OpenAI的GPT-3.5模型有一个关联的词嵌入模型,需要用它来发送上下文。LangChain会根据选择的LLM选择最佳的嵌入模型,消除了配对模型的猜测。

向量数据库 (Vector databases)

生成的嵌入存储在向量数据库中以进行相似性搜索。LangChain可以轻松地从各种来源(从内存数组到托管的向量数据库,如Pinecone)存储和检索向量。

大型语言模型 (Large language models)

LangChain支持OpenAI、Cohere和AI21提供的主流LLM,以及Hugging Face上可用的开源LLM。支持的模型和API端点的列表正在迅速增长。

image.png

以上流程代表了LangChain框架的核心。位于堆栈顶部的应用程序通过Python或JavaScript SDK与LangChain模块之一进行交互。让我们了解这些模块的作用。

模型I/O (Model I/O)

模型I/O模块处理与LLM的交互。它主要帮助创建有效的提示,调用模型API,并解析输出。作为生成式AI的核心,提示工程得到了LangChain的良好处理。此模块抽象了LLM提供商公开的认证、API参数和端点。最后,它可以将模型发送的响应解析为应用程序可以使用的所需格式。

数据连接(Data connection)

可以将数据连接模块看作是您的LLM应用程序的ETL管道。它处理加载外部文档(如PDF或Excel文件),将它们转换为批量处理成词嵌入的数据块,将嵌入存储在向量数据库中,并通过查询最终检索它们。正如我们之前讨论的,这是LangChain最重要的构建模块。

链(Chains)

在很多方面,与LLM交互就像使用Unix管道。一个模块的输出被作为另一个模块的输入发送。我们通常需要依赖LLM来澄清和提炼响应,直到我们得到期望的结果。LangChain中的链旨在构建高效的管道,利用构建模块和LLM获得预期的响应。一个简单的链可能有一个提示和一个LLM,但也可以构建高度复杂的链,多次调用LLM(如递归)以实现结果。例如,一个链可能包括一个提示来总结一个文档,然后对同一个文档进行情感分析。

内存(Memory)

LLM是无状态的,但需要上下文来准确响应。LangChain的内存模块使得向模型添加短期和长期记忆变得容易。短期内存通过简单机制保持对话历史。消息历史可以持久化到外部资源,如Redis,代表长期记忆。

回调(Callbacks)

LangChain为开发者提供了一个回调系统,允许他们挂接到LLM应用程序的各个阶段。这对于日志记录、监控、流处理和其他任务非常有用。可以编写自定义回调处理程序,在管道内发生特定事件时调用。LangChain的默认回调指向stdout,它只是将每个阶段的输出打印到控制台。

代理(Agents)

代理是迄今为止LangChain最强大的模块。LLM具有推理和行动能力,称为ReAct提示技术。LangChain的代理简化了制作利用LLM将提示提炼为行动计划的ReAct提示。代理可以被认为是动态链。代理背后的基本思想是使用LLM选择一组操作。一系列操作在链中(在代码中)硬编码。在代理中,语言模型用作推理引擎,以确定采取哪些行动以及以何种顺序。

结论

LangChain正迅速成为GenAI驱动的应用程序中最重要的组件。得益于不断扩展的繁荣生态系统,它可以支持各种各样的构建模块。对开源和商业LLM、向量数据库、数据源和嵌入的支持使得LangChain成为开发者不可或缺的工具。

相关文章:

【LLM】快速开始 LangChain

theme: orange LangChain是一个软件开发工具包,它通过将组件链接在一起并公开简单统一的API,简化了大型语言模型和应用程序的集成。本篇文章将会简要介绍,让各位开发者对其有一个整体的认识。 前言 如果你是一名软件开发人员,努力…...

Unity中立体声平移的应用

实现的效果 若从左声道开始,播放效果逐渐从左声道过渡到右声道,再从右声道过渡到左声道,具体效果请戴上耳机播放下列视频。 StereoPanning 代码实现 public class AudioInfo {[HideInInspector] public float[] StereoTranslationValues;//立…...

jupyter常用的方法以及快捷键

选中状态 蓝色 按enter 进入编辑状态 编辑状态 绿色 按Esc 进入选中状态 Code模式运行是运行代码 Markdown模式运行是进入预览状态 - - - 是文本格式的一种精简的语法形式 Raw NBConvert 是默认文本状态 - - - 输入什么样 展示什么样 Y - - - 切换code模式 M - - - 切换Markdo…...

SQL Server 操作JSON数据库列

Sql Server 从 2016 开始支持了一些 json 操作,但在SqlServer中Json还是被存储为字符串,如下: use [tempdb]declare JSON nvarchar(max) set JSONN{"id": "WakefieldFamily","parents": [{ "familyName&q…...

拼多多开放平台的API接口可以获取拼多多电商数据。以下是API接口流程

使用拼多多开放平台的API接口可以获取拼多多电商数据。以下是一般的API接口流程: 1. 注册开发者账号:首先,您需要在拼多多开放平台注册一个开发者账号。通过开发者账号,您可以获得API密钥和其他必要的信息。 2. 鉴权与认证&…...

使用Docker安装和部署kkFileView

🎈1 参考文档 kkFileView官方文档 🚀2 安装kkFileView 拉取Redis镜像。 docker pull keking/kkfileview启动docker容器。 docker run -it -d -p 8012:8012 keking/kkfileview --restart always解释: docker run redis # 从kkfileview镜像运行…...

胆囊结石3mm严重吗(解析胆囊结石的危害和处理方法)

胆囊结石是指胆囊内形成的固体结晶,大小不一,主要由胆固醇、胆汁色素和钙盐等物质组成。胆囊结石是一种比较常见的疾病,据统计,我国胆囊结石的患病率约为5%~10%左右。那么,胆囊结石3mm严重吗?下面就来一起了解一下。 …...

全新UI站长在线工具箱系统源码带后台开源版

该系统的全开源版本可供下载,并且支持暗黑模式。 系统内置高达72种站长工具、开发工具、娱乐工具等功能。此系统支持本地调用API,同时还自带免费API接口, 是一个多功能性工具程序,支持后台管理、上传插件、添加增减删功能。 环…...

maven的依赖下载不下来的几种解决方法

前言 每次部署测试环境,从代码库拉取代码,都会出现缺少包的情况。然后找开发一通调试,到处拷包。 方案一:pom文件注释/取消注释 注释掉pom.xml里的报红色的依赖(同时可以把本地maven库repo里对应的包删除)&…...

CAR-T商品化的第一步

1、CAR-T细胞的体外扩增能力 CAR-T细胞疗法需要先从患者体内获得T淋巴细胞,然后通过体外转基因技术 transduce CAR靶向结构域。这一过程需要在细胞培养体系中得到充分的扩增,以获得足够的治疗CAR-T细胞数量。因此,CAR-T细胞的体外扩增能力直…...

yolov2相较于yolov1的改进

目录 前言 BN层取代了Dropout 使用了高分辨率分类器 K-means选定先验框的尺寸 网络结构—darknet19 细粒度的特征 前言 yolov2是在yolov1的基础上进行改进的,主要解决了yolov1定位不准确以及检测重叠的物体极差的情况,总的来说,它有以下…...

如何在Spring Boot应用中使用Nacos实现动态更新数据源

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...

代码随想录算法训练营day1~18总结

时间、空间复杂度,解题过程中运用的函数补充说明 数组 day1: http://t.csdn.cn/dBSgY day2: http://t.csdn.cn/JTDvH 数组总结 链表 day3:http://t.csdn.cn/mJx9V day4:http://t.csdn.cn/qiGqz 链表总结 哈希表 day6:…...

【炼气境】HashMap原理以及如何使用

系列文章目录 文章目录 系列文章目录前言1、数据结构2、工作原理3、当两个对象的 hashCode 相同会发生什么?4、你知道 hash 的实现吗?为什么要这样实现?5、为什么要用异或运算符?6、HashMap 的 table 的容量如何确定?l…...

QT基础教程之七Qt消息机制和事件

QT基础教程之七Qt消息机制和事件 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c…...

Python入门自学进阶-Web框架——40、redis、rabbitmq、git——3

git,一个分布式的版本管理工具。主要用处:版本管理、协作开发。 常见版本管理工具: VSS —— Visual Source Safe CVS —— Concurrent Versions System SVN —— CollabNet Subversion GIT GIT安装:下载安装文件:…...

skywalking agent监控java服务

一、前言 skywalking agent可以监控的服务类型有多种,python、go、java、nodejs服务等都可以监控,现在通过java服务来演示skywalking agent的使用,并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意,skywalking…...

LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER

本文是LLM系列文章,针对《LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER》的翻译。 作为自主决策者的大语言模型 摘要1 引言2 前言3 任务形式化4 方法5 实验6 相关工作7 结论 摘要 尽管大型语言模型(LLM)表现出令人印象深刻的语言理解…...

【Unity-Cinemachine相机】Cinemachine Brain属性详解

在Package Manager中下载Cinemachine 创建一个Virtual Camera,然后会发现Main Camera后面多出了个标志,而且属性也不能再修改了 因为绑定了CinemachineBrain,它会读取场景中某个虚拟相机的配置,并以此配置来控制相机的行为&#x…...

使用Python对数据的操作转换

1、列表加值转字典 在Python中,将列表的值转换为字典的键可以使用以下代码: myList ["name", "age", "location"] myDict {k: None for k in myList} print(myDict) 输出: {name: None, age: None, loca…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

消息队列系统设计与实践全解析

文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...