当前位置: 首页 > 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…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...