LM(大模型)应用开发利器之LangChain,带你走进AI世界

原文:LLM(大模型)应用开发利器之LangChain,带你走进AI世界 - 简书

LangChain组件图

LangChain 是什么

首先 LangChain 是一个框架,这个框架是用来让开发者进行 LLMs (大语言模型)应用开发的。

可以理解是为各种 LLM 开发的脚手架,将 LLM 的各个组件进行封装和链接。把 LLMs 相关的组件“链接”在一起,简化 LLMs 应用的开发难度,方便开发者快速地开发复杂的 LLMs 应用。

举一个不是很恰当的栗子,从 Java 工程师的角度来看 LangChain 更像是 Spring 或者 SpringBoot 这种框架,帮助开发人员更快的进行应用开发。

LangChain 框架组件

Models(I/O):各种类型的模型集成。

Outline概要

    · Prompts:模板化、动态选择和管理模型输入

    · Language models:通过通用接口调用语言模型

    · Output parsers:从模型输出中提取信息

Models(I/O)

Prompts组件:包含Prompt templates和Example selectors。

Prompts

Prompt templates:

  ·   对语言模型的指令

  ·   一组几个镜头示例来帮助语言模型生成更好的响应

  ·   对语言模型的一个问题

分别举例:TemplateFormat、MessageTemplate、FewShotPromptTemplate、Example selectors

TemplateFormat:

TemplateFormat

MessageTemplate:

MessageTemplate

FewShotPromptTemplate:

FewShotPromptTemplate

Example selectors:

Example selectors

Language models:

  ·   LLMs

  ·   Chat models

LLMs:采用文本字符串作为输入并返回文本字符串的模型。

gpt-3.5-turbo:

gpt-3.5-turbo

Streaming:

Streaming

Chat models:聊天模型是语言模型的变体。

Caching:

Caching

outputparser

  ·   获取格式指令

  ·   解析

  ·   带有提示的解析

分别举例:DateTimeParser、EnumParser、ListParser、OutputParser

DateTimeParser:

DateTimeParser

EnumParser:

EnumParser

ListParser:

ListParser

OutputParser:

OutputParser

Memory:记忆涉及在用户与语言模型的交互过程中保留状态概念。用户与语言模型的交互是在 ChatMessages 的概念中捕获的,因此这可以归结为从一系列聊天消息中摄取、捕获、转换和提取知识。一般来说,对于每种类型的记忆,都有两种理解使用记忆的方法。这些是从一系列消息中提取信息的独立函数,然后您可以通过一种方式在链中使用这种类型的内存。内存可以返回多条信息(例如,最近的 N 条消息和所有先前消息的摘要)。

Memory

Outline概要

    · ConversationBufferMemory

    · ConversationBufferWindowMemory

    · ConversationTokenBufferMemory

    · ConversationSummaryMemory

ConversationBufferMemory:

ConversationBufferMemory

ConversationBufferWindowMemory:

ConversationBufferWindowMemory

ConversationTokenBufferMemory:

ConversationTokenBufferMemory

ConversationSummaryMemory:

ConversationSummaryMemory

Chains:

Chains

Outline概要

    · LLMChain

    · SequentialChain

               · SimpleSequentialChain

               · SequentialChain

    · RouterChain

LLMChain:

LLMChain

SimpleSequentialChain:一般序列链可以将前一个链的输出结果,作为后一个链的输入。一般序列链有唯一输入和输出变量。

SimpleSequentialChain

SequentialChain:序列链中包含多个链,其中一些链的结果可以作为另一个链的输入。序列链可以支持多个输入和输出变量。

SequentialChain流程图

SequentialChain

RouterChain:路由链类似一个while else的函数,根据输入值,选择对应的路由(路径)进行后续的链路。整个路由链一般一个输入,一个输出。

RouterChain流程图

RouterChain(1)

RouterChain(2)

Agents:某些应用程序需要根据用户输入对 LLM 和其他工具进行灵活的调用链。代理接口为此类应用程序提供了灵活性。代理可以访问一套工具,并根据用户输入确定使用哪些工具。代理可以使用多种工具,并使用一个工具的输出作为下一个工具的输入。

Agents

Outline概要

    · 动作代理:在每个时间步,使用所有先前动作的输出来决定下一个动作

    · 计划并执行代理:预先决定完整的操作顺序,然后执行所有操作而不更新计划

分别举例:MathAndWikiAgent、PythonREPLAgent、MultiFunctionsAgent

MathAndWikiAgent:

MathAndWikiAgent

PythonREPLAgent:

PythonREPLAgent

MultiFunctionsAgent:

MultiFunctionsAgent

索引(index):索引是指以最佳方式对文档进行结构化,以便语言模型(LLMs)能够与其进行最佳交互。这个模块包含了处

理文档的实用函数。

索引(index)

Outline概要

    · 嵌入(Embeddings):嵌入是对信息(例如文本、文档、图像、音频等)的数值表示。通过嵌入,可以将信息转换为向量形式,以便计算机能够更好地理解和处理。

    · 文本拆分器(Text Splitters):当需要处理较长的文本时,有必要将文本分割成多个块。文本拆分器是用于将长文本分割成更小片段的工具。

    · 向量数据库(Vectorstores):向量数据库存储和索引来自自然语言处理模型的向量嵌入,用于理解文本字符串、句子和整个文档的含义和上下文,从而获得更准确和相关的搜索结果。请参阅可用的向量数据库。

代码示例如下:

index

应用实例langchain-chatglm-6B流程图如下:

langchain-chatglm-6B(1)

langchain-chatglm-6B(2)

evaluation:

Outline概要

    · 示例生成:Example generation

    · 手动评估(和调试):Manual evaluation (and debugging)

    · LLM辅助评估:LLM-assisted evaluation

Example generation:

Example generation(1)

Example generation(2)

Manual evaluation (and debugging):

Manual evaluation (and debugging)

LLM-assisted evaluation:

LLM-assisted evaluation

最后编辑于 :2023.06.30 18:53:55

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

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

相关文章

利用ETLCloud自动化流程实现业务系统数据快速同步至数仓

现代企业有不少都完成了数字化的转型,而还未转型的企业或商铺也有进行数字化转型的趋势,由此可见,数据已经成为企业决策的重要依据。企业需要先获取数据,将业务系统数据同步至数仓进行整合,然后再进行数据分析。为了更…

Vue3 插槽 v-slot

插槽 视频链接:尚硅谷vue-插槽章节 不使用插槽的情况下 结果: 1 默认插槽 在子组件中只能有一个 结果: 2 具名插槽 #b是v-slot:b 的缩写 顾名思义就是指着名字去插入 结果: 3 作用域插槽 可以传递数据的插槽&#…

“轻松实现文件夹批量重命名:使用顺序编号批量改名“

你是否曾经遇到过需要批量重命名文件夹,却因为繁琐的手动操作而感到困扰?现在,我们为你带来了一款全新的工具——轻松实现文件夹批量重命名,使用顺序编号批量改名。这款工具将帮助你轻松解决文件夹重命名的问题,提高工…

Vue3 shallowRef 和 shallowReactive

一、shallowRef 使用shallowRef之前需要进行引入: import { shallowRef } from vue; 使用方法和ref 的使用方法一致,以下是二者的区别: 1. 如果ref 和 shallowRef 都传入的是普通数据类型的数据,那么他们的效果是一样的&#x…

python基础练习题库实验1

题目1 使用以下变量 product_code“377B” product_name“牛肉汤” product_size“250mL” product_price2.15 使用字符串加法编写一个print语句,以便生成以下精确输出: 377B:牛肉汤,250mL 代码 product_code "377B"…

图像分类(二) 全面解读复现ZFNet

网络详解 前言:ZF网络是2013年提出的,网上有很多关于它的介绍和讲解,但是很多内容讲的不太好(个人感觉),于是花时间收集了一些资料,整理了一些比较好的文章,从头到尾把ZFNet说了一遍…

【Python自动化】定时自动采集,并发送微信告警通知,全流程案例讲解!

文章目录 一、概要二、效果演示三、代码讲解3.1 爬虫采集行政处罚数据3.2 存MySQL数据库3.3 发送告警邮件&微信通知3.4 定时机制 四、总结 一、概要 您好!我是马哥python说,一名10年程序猿。 我原创开发了一套定时自动化爬取方案,完整开…

Echarts柱状图配置代码详解,含常用图例代码

一、初识柱状图 从echarts官网引入基础的柱状图后,可以看到他有如下的配置项。我们可以改变各个配置项的属性,将图例调整为我们期望的效果。 二、常用配置项 因为引入echarts图例后,改变图例的东西都在option配置项中,所以其他部…

【电路笔记】-最大功率传输

最大功率传输 文章目录 最大功率传输1、概述2、最大功率传输定理 (MPTT)3、示例4、阻抗匹配5、总结 当工程师设计电子电路时,他们会跟踪许多不同的参数,但最重要的参数之一是功率。 在现代电路中,功率在多个阶段中不断变化,有时由…

CF1899 G. Unusual Entertainment [二维数点/二维偏序]

传送门:CF [前题提要]:没什么好说的,区域赛爆炸之后发愤加训思维题.秒了div3 A~F的脑筋急转弯,然后被G卡了,树剖dfs序的想法已经想到了,题目也已经化简为两个线段是否存在一个合法位置了.但是MD不会二维数点,用一个树剖扫描线搞来搞去最后还是Tle.果然如下图所说:科技还是十分…

详谈动态规划问题并解最大子数组和

今天刷力扣又学会了一种算法----动态规划,经过我查阅不少资料后,这些我总结的分享给大家 动态规划是什么? 动态规划(Dynamic Programming)是一种求解最优化问题的数学方法,它通常用于解决具有重叠子问题和…

学习模拟简明教程【Learning to simulate】

深度神经网络是一项令人惊叹的技术。 有了足够的标记数据,他们可以学习为图像和声音等高维输入生成非常准确的分类器。 近年来,机器学习社区已经能够成功解决诸如对象分类、图像中对象检测和图像分割等问题。 上述声明中的加黑字体警告是有足够的标记数…