吴恩达《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树)相关,其中每…

SSH特性|组成|SSH是什么?

SSH,全称为Secure Shell,是由Internet Engineering Task Force (IETF)的网络工作小组制定的一种网络安全协议。它旨在为网络服务提供安全的远程登录和其他网络服务,如文件传输,端口转发等,以保护数据的机密性和完整性。…

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

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

从零学习python打卡笔记 第一天

小学生都开始学python了,你还有什么资格不学? 打卡笔记的python版本是3.12.4 一、python能干什么工作? web全栈工程师、大数据分析工程师、爬虫工程师、人工智能工程师、游戏开发工程师、自动化测试工程师、搜索引擎工程师、自动化运维工程师…

RSA加密算法工具类

这里写自定义目录标题 1. RSA加密算法介绍加密和签名**划重点:签名的作用不是防泄密,而是防篡改****对信件内容进行加密****对信息内容追加签名** 为什么在使用非对称加密算法(如 RSA)时,正确的使用方法是公钥加密&…

使用Redisson实现分布式锁详解

摘要 在分布式系统中,保证多个进程或线程对共享资源的互斥访问是非常重要的。本文将介绍如何使用Redisson库来实现分布式锁,以及它的优势和使用场景。 1. 分布式锁的基本概念 在分布式系统中,由于多个节点可能同时访问同一个资源&#xff…

python 的全局列表通过append到别的列表,被append的列表修改元素的值,原来列表元素也跟着改变。

问题: qq [[4],[8]] def test(aa):bb []bb.append(aa[0])bb[0][0] - 2 test(qq) print(qq) [[2],[8]]原因: append 是将存储位置赋值给列表,列表改变意味着原来的列表也要改变。 append() 方法用于在列表末尾添加新的对象。 语法 append(…

插值查找 python

插值查找,也被称为插值搜索,是一种在有序数组中查找某一特定元素的搜索算法。它是对二分查找的一种改进,通过计算元素在数组中的近似位置来减少比较次数,从而提高搜索效率。 原理: 插值查找的基本思想是,根…

Scala的宝藏库:探索常用的第三方库及其应用

Scala的宝藏库:探索常用的第三方库及其应用 Scala,作为一种多范式的编程语言,不仅拥有强大的内置功能,还得益于其丰富的第三方库生态系统。这些库扩展了Scala的能力,帮助开发者在不同领域构建高效、可维护的应用程序。…

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

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

【vue avue】初始化代码 和 增删改查

这里是目录! 一、初始化页面1. 有 avue ,js 补 option2.显隐列二、弹窗1. 新增 - 表单1.1 必填1.2 清除 rules 提示2.编辑三、启用、禁用、删除1.1 菜单左上角1.2 操作栏删除一、初始化页面 Code<template> <basic-container><avue-crud:table-loading="…

Java类的加载过程

加载&#xff08;Loading&#xff09;&#xff1a; 这是类加载过程的第一个阶段。在这个阶段&#xff0c;Java 虚拟机&#xff08;JVM&#xff09;找到并读取类的二进制数据&#xff0c;通常是 .class 文件。这些数据从文件系统、网络、zip 包、jar 文件或其他形式的二进制数据…

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

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

嵌入式问题分析思路

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

Java 位运算详解

位运算是一种直接在二进制位上进行操作的方式。位运算符包括按位与 (&)、按位或 (|)、按位异或 (^)、按位非 (~)、左移 (<<)、右移 (>>) 和无符号右移 (>>>)。这些操作符用于操作整型数据类型&#xff0c;如 int 和 long。 一、按位与 (&) 按位…

如果使用Outlook 2024出现问题

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

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

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

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

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

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

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