吴恩达《LangChain for LLM Application Development》课程笔记

目录

1. 前言

2. 课程笔记

2.1. 模型、提示和解析器

2.2. LLM记忆,上下文管理

2.3. 链式操作

2.4. 文档问答

2.4.1. stuff 方法

2.4.2. 其他方法

2.5. LLM应用评估

2.6. 代理

2.6.1. 预定义工具

2.6.2. 自定义工具

代码资源:


1. 前言

LangChain是一个用来构建LLM应用的开源框架,主要是为基于大语言模型的应用提供一系列的构建工具包。这个短课程的主要内容有:

  • 模型、提示和解析器:调用LLM,提供提示并解析响应。
  • LLM的记忆:用于存储对话和管理有限上下文空间的记忆。
  • 链式操作:创建操作序列。
  • 文档问答:将LLM应用于您的专有数据和用例需求。
  • 代理:探索将LLM作为推理代理的新兴发展趋势。

原课程地址:LangChain for LLM Application Development - DeepLearning.AI

B站转载:(超爽中英!) 2024吴恩达最好的【LangChain大模型应用开发】教程!附课件代码 DeepLearning.AI

2. 课程笔记

2.1. 模型、提示和解析器

2_L1_model prompt parser.zh_哔哩哔哩_bilibili

这节课的要点有两个:

a. 使用Langchain的模板功能,将需要改动的部分抽象成变量,在具体的情况下替换成需要的内,达到一次定义,多次使用的效果。

书中提到的一个例子是,使用模板,去转化表达的风格。这种方式比fstring要更灵活,特别是模板很长的时候。

prompt

b. 使用一个解析器,将LLM的输出解析成你需要的格式,如字典。

parse

2.2. LLM记忆,上下文管理

这节课主要如何使用不同的内存类来管理与LLM的对话上下文。

memory

  • ConversationBufferMemory:保存所有上下文。
  • ConversationBufferWindowMemory:以对话轮数为单位,设置最大轮数限制。
  • ConversationTokenBufferMemory:以token的个数为单位,设置最大个数限制。
  • ConversationSummaryBufferMemory:可以设置对话token最大个数,但使用llm来总结之前的对话内容。

2.3. 链式操作

链式操作有点像工作流,基本单元是Chain,通过与LLM和提示词结合,可以构建出各种结构的链式操作,对文本及数据执行一系列操作。

a. 基础链

LLMChain,结合提示词,组成一个基本的单位,对输入进行相应,输出结果,是构建复合链的基本单位。

b. 顺序链

将基础链按照顺序前后组合起来,上一个基础链的输出是下一个基础链的输入,又包括以下两种细类:

SimpleSequentialChain:单输入/输出。

简单链

SequentialChain:多输入/输出,通过输入/输出键进行指定。

复杂链

c. 路由链

LLMRouterChain,根据输入的内容,将其路由到不同的链中。

路由链

2.4. 文档问答

给定文档,让LLM根据文档的内容回答问题。

由于LLM一般一次只能处理几千个词,因此基于文档的问答需要使用embedding和向量存储技术。

2.4.1. stuff 方法

a. embeddings

所谓embedding(词嵌入)就是将一段文本,转化成一个能够表征文本语义的向量,语义上相近的文本他们的向量也相似。

embeddings

b. 向量存储

一般将文本分解成一个个块(chunks),然后将每个块转为embedding,最后将这些embedding存入向量数据库中,相当于建立了索引。

向量存储

c. 查询过程

首先将查询文本转为embedding,然后在向量数据库中寻找并返回与这个查询最相似的n个查询。

查询

d. LLM处理

最后将这n个结果输入LLM进行处理,获得最后的答案。

语言模型处理

这就是文档问答最简单的办法,将所有文档都放入上下文中,并对语音模型进行一次调用,这种方法叫stuff method。

stuff qa

前面都是针对相同类型的片段进行回答的方法,但是针对不同类型的片段进行相同类型的问题和回答,则需要用到下面的几种方法。

2.4.2. 其他方法

Map_reduce方法:将每个片段和问题一起传递给LLM,得到各自的回答,然后使用另外一个LLM将所有单独的回答汇总成最后的答案。可以看到每个文档都是独立的,有利于并行执行,缺点是文档与文档之间也没有交互。

mp

Refine方法:当前的回答依赖于上一个文档的回答,对于合并信息和逐步构建答案非常有用,最后的答案长度趋于更长,缺点是并行度差,需要更长的处理时间。

refine

Map_rank方法:一种实验性的方法,为每个文档执行一次LLM调用,并返回回答与评分,选择分数最高的那个回答。这个方法,依赖于语言模型需要知道如何评分以及你关于评分的指导说明。这个方法并行度和MapReduce方法一样。

maprank

2.5. LLM应用评估

这节主要深入介绍一些框架,以及帮助进行评估的工具,亮点是使用LLM和链式操作来评估其他LLM、链式操作或者应用程序。

一种做法是,查看数据,提出示例问题,并提供正确答案以便评估,这个过程可以使用QAGenerateChain类来实现自动化。

另外,可以使用QAEvalChain类,来自动评估LLM对问题的回答是否是正确的,这个很重要,因为很多时候,可能正确答案跟回答的意思是一样的,但是表述却区别很大,无法单纯使用字符串匹配或者正则来比较。

为了调试中间过程,可以将langchain.debug = True,这样中间的提示,QA的检索过程,输入输出,token的使用情况等信息都可以打印出来。

另外本节还简单介绍了一下LangChain评估平台,可以将上述过程持久化并在用户界面中展示出来,另外还可以查看中间的调试信息,并且可以将生成的问答整理成新的数据集。

2.6. 代理

代理的目的,是将LLM视为一个推理引擎,你可以提供文本块或者其他信息源给它,然后这个LLM可以利用互联网上学到的背景知识,帮助回答问题和推理内容。

本节主要内容包括如何创建和使用代理,如何为其配备内在LangChain中的搜索引擎等不同类型的工具,让代理可以与任何数据存储,任何API和函数进行交互。

2.6.1. 预定义工具

  • llm-math:实际是个Chain,使用语言模型和计算器来解决数学问题。
  • wikipedia:维基百科工具,连接到维基百科的API,允许对维基百科进行搜索查询并返回结果。
  • PythonREPLTool:python执行环境,根据输入提示,使用python进行推理,并对推理结果进行相应处理,如打印出来。

初始化代理后,代理能够自动根据问题的类型,选择合适的工具进行推理,开了verbose标志后,可以看到代理每一步的推理过程。

0b96692903ac36bb517972c0ab53962

image

2.6.2. 自定义工具

另外,还可以将代理连接到自己的信息源、API和数据,需要自定义自己的工具,操作步骤:

在自己的工具函数前加上LangChain库中的@tool装饰器,然后写一个非常详细的文档,用来让代理了解一些约束及如何调用该工具。

image

(完)

本文版权归作者(https://www.cnblogs.com/harrymore/)和博客园共有,欢迎转载


配套代码:

由于资源时常更新,链接不稳定,可以在助理处自取该文章配套代码

【一】上千篇CVPR、ICCV顶会论文
【二】动手学习深度学习、花书、西瓜书等AI必读书籍
【三】机器学习算法+深度学习神经网络基础教程
【四】OpenCV、Pytorch、YOLO等主流框架算法实战教程

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

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

相关文章

文心一言 VS 讯飞星火 VS chatgpt (293)-- 算法导论21.4 2题

二、证明:每个结点的秩最多为 ⌊lgm⌋ 。如果要写代码,请用go语言。 文心一言: 在数据结构和算法中,当我们谈论“结点的秩”时,这通常与某些特定的数据结构(如B树或B树)相关,其中每…

代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

518. 零钱兑换 II 题目链接:518. 零钱兑换 II 文档讲解:代码随想录 状态:不会 思路: 和494.目标和类似,这题属于组合问题,当我们有一个硬币coin时,对于每个金额j,通过添加这个硬币&a…

平安养老险陕西分公司参加2024上半年省级单位驻富平帮扶团联席会

6月28日,平安养老险陕西分公司工会副主席武媛携驻村工作队赴富平县庄里镇永安村参加2024上半年度省级单位驻富平帮扶团联席会议。 会议由省委金融办副主任、省委金融工委委员李嘉辉及省委金融办选派挂职干部、富平县副县长席玮共同主持。 会上,席玮县长带…

吴恩达机器学习 第三课 week2 推荐算法(下)

目录 01 学习目标 02 基于内容的过滤算法 03 实现“电影推荐系统” 3.1 问题描述 3.2 算法实现 04 大项目(数据很大)的推荐方法※ 4.1 方法原理 4.2 实施示例 05 总结 01 学习目标 (1)理解基于内容的过滤算法&#xff08…

嵌入式问题分析思路

BUG解决总体思路: 1.1 定位bug范围及性质 要有效解决问题,首先要缩小范围,集中关注最近的代码变化。这有助于迅速定位可能引入问题的部分,避免无谓的时间浪费。检查最近的代码提交记录和修改日志,找出可能影响现有功能的变更。然…

如果使用Outlook 2024出现问题

大家好,才是真的好。 很多企业使用Domino服务器当作POP/IMAP邮箱服务器来使用,虽然这不能发挥Domino最佳效能,但也不失为一种简单用法。 另一种企业则使用Domino仅作为应用app平台,邮箱早已迁移至O365或其他平台,他们…

报销又乱又慢,财务如何解决报销困局?

费用报销是企业频繁发生的业务场景,不同的企业在费用报销的流程、标准、制度、管理上各有不同。作为一些公司日常运作中的薄弱环节,费用报销环节存在着较大的内控风险,如:费用报销滞后,造成会计信息的失真,…

【YOLOv5/v7改进系列】更换损失函数为CIOU、GIOU、SIOU、DIOU、EIOU、WIOUv1/v2/v3、Focal C/G/S/D/EIOU等

一、导言 在目标检测任务中,损失函数的主要作用是衡量模型预测的边界框(bounding boxes)与真实边界框之间的匹配程度,并指导模型学习如何更精确地定位和分类目标。损失函数通常由两部分构成:分类损失(用于…

我的世界服务器-高版本服务器-MC服务器-生存服务器-RPG服务器-幻世星辰

生存为主,RPG乐趣为辅,重视每位玩家的建议,一起打造心目中的服务器,与小伙伴一起探险我的世界! 服务器版本: 1.18.2 ~ 1.20.4 Q群: 338238381 服务器官网: 星辰毛毛雨-Minecraft高版本生存服务器我的世界…

springboot是否可以代替spring

Spring Boot不能直接代替Spring,但它是Spring框架的一个扩展和增强,提供了更加便捷和高效的开发体验。以下是关于Spring Boot和Spring关系的详细解释: Spring框架: Spring是一个广泛应用的开源Java框架,提供了一系列模…

EDI是什么?与ERP有何关系

EDI的发展过程 电子数据交换(Electronic Data Interchange,EDI)是一种通过电子方式传输商业文件的技术。EDI的历史可以追溯到20世纪60年代,当时企业开始使用计算机进行数据处理。最早的EDI系统是为解决大型企业间的信息交换问题而…

nccl 04 nvidia 官方小程序

1,代码重新编辑 为了地毯式地检查结果的正确性,这里修改了代码 主要步骤为 step1: data_p指向的空间中,分别生成随机数; step2: 分别拷贝到gpu的sendbuff的显存中; step3: 通过nccl_all_reduce sum;…

掌握 Python 中 isinstance 的正确用法

👋 简介 isinstance() 函数用于判断一个对象是否是一个特定类型或者在继承链中是否是特定类型的实例。它常用于确保函数接收到的参数类型是预期的。 📖 正文 1 语法 isinstance(object, classinfo) object参数是要检查的对象;classinfo参数…

【工具推荐】ONLYOFFICE8.1版本编辑器测评——时下的办公利器

文章目录 一、产品介绍1. ONLYOFFICE 8.1简介2. 多元化多功能的编辑器 二、产品体验1. 云端协作空间2. 桌面编辑器本地版 三、产品界面设计1. 本地版本2. 云端版本 四、产品文档处理1. 文本文档(Word)2. 电子表格(Excel)3. PDF表单&#xff0…

【C++ | 继承】|概念、方式、特性、作用域、6类默认函数

继承 1.继承的概念与定义2.继承的方式2.1继承基本特性2.2继承的作用域2.2.1隐藏赋值兼容 派生类的创建和销毁构造函数拷贝构造赋值重载 1.继承的概念与定义 继承是面向对象编程中的一个重要概念。它的由来可以追溯到软件开发中的模块化设计和代码复用的需求。 在软件开发过程…

【Android面试八股文】性能优化相关面试题: 什么是内存抖动?什么是内存泄漏?

文章目录 一、什么是内存抖动?内存抖动的问题卡顿OOM(Out Of Memory)二、什么是内存泄漏(Memory Leak)?引用计数法可达性分析法一、什么是内存抖动? 在Java中,每创建一个对象,就会申请一块内存,存储对象信息; 每分配一块内存,程序的可用内存也就少一块; 当程序…

什么是协程?协程和线程的区别

文章目录 前置知识应用程序和内核阻塞和非阻塞同步和异步并发和并行IO 发展历史同步编程异步多线程/进程异步消息 回调函数(响应式编程) 协程协程基本概念go 示例代码协程和线程的区别 个人简介 前置知识 在了解协程前,我们先理解一些相关的…

强化学习原理入门-1绪论

1 绪论 1.1 这是一本什么书 强化学习算法? AlphaGo大胜世界围棋冠军李世石和柯洁事件,核心算法就用到了强化学习算法。 1.2 强化学习解决什么问题 案例1 非线性系统二级倒立摆 案例2 AlphaGo与柯洁的第二局棋 案例3 机器人学习站立 ...... 智能…

沙箱在“一机两用”新规下的价值体现

在数字化时代,随着企业信息化建设的深入,数据安全问题愈发凸显其重要性。一机两用新规的出台,旨在通过技术创新和管理手段,实现终端设备的安全可控,确保敏感数据的安全存储与传输。SDC沙箱技术作为一种创新的安全防护手…

springcloud-config服务器,同样的配置在linux环境下不生效

原本在windows下能争取的获取远程配置但是部署到linux上死活都没有内容,然后开始了远程调试,这里顺带讲解下获取配置文件如果使用的是Git源,config service是如何响应接口并返回配置信息的。先说问题,我的服务名原本是abc-abc-abc…