LangChain学习笔记与样程

news2024/11/13 13:14:50

LangChain 是一个开源的机器学习工具库,专门用于构建和部署基于语言的应用程序。这个库提供了一系列工具和接口,使开发者能够轻松地整合和使用大型语言模型,例如 OpenAI 提供的 GPT。LangChain 的核心特点包括模块化设计、灵活性和易用性,这些特点让开发者可以针对特定的应用场景定制语言模型的行为。

本blog是根据B站教程的学习笔记,目前概念部分已经更新完毕,希望可以帮助到你们。记得点赞哟(๑ゝω╹๑)

“数字黑魔法”大佬的B站视频教程:九天玩转Langchain!第一讲 课程简介_哔哩哔哩_bilibili


简单应用

llm模块

最基本的功能是根据输入文本返回新的文本

方法名称:

  • predict

参数:

  • tempurature发散程度:控制在每次生成时给出答案的相似程度,为0则每次相同

image.png

Chat module 聊天模块

和llm模块类似,以llm为底层支持,在实现agent的时候有着更加强大的功能支持

方法名称:

  • predict_messages
  • predict(同llm)

特殊类:

  • AIMessage
  • HumanMessage
  • SystemMessage

image.png

链式结构

用于方便链接多个模块而存在

为了避免重复定义功能相似的模块,需要使用提示模板

提示模板

prompt tmeplate

image.png

对象类型:LLMChain
构造模块包括:llm模块+提示模板

image.pngimage.png

运行一个链式结构

image.png

代理人

用以处理链式模式难以独立处理的复杂问题,实现动态决策

  • 本质
    • 是对于一个任务,运用语言模型来决定完成任务所需的行为以及试试这些行为的顺序
  • 行为方式
    • 代理人可以使用一系列预设的工具(tools)
      • 选择工具
      • 实用工具
      • 贯彻并处理工具的使用结果
      • 重复以上步骤

使用步骤

  1. 定义底层的llm模块
  2. 定义代理人允许使用的工具:load_tools
  3. 初始化代理人:initialize_agent
  4. 运行代理人:run

参数设置

  • verbose:是否展示代理人的运行过程

ConversationChain聊天记录

通过反复调用run来实现对话

LLM模块

与语言模型交互的编程方式–prompt

  • 精确地提示->理想的结果
  • 冗余的提示->稳定的结果

提示模板(prompt templates)

  • 对于同一类提示,可以用提示模版封装成接受参数的提示模版
    • 包括
      • 对语言模型的指令
      • 提供一些简单实例给语言模型从而使模型输出更接近理想结果
      • 提给语言模型的问题
生成一个提示模板(input_variables:被替换对象名,template:提示词模板)
  • 无参数
    • image.png
  • 单参数
    • image.png
  • 多参数
    • image.png
  • from_template直接转换字符串为模板
接收部分参数的提示
  1. 所有的参数无法同步获得。当在链式结构中传递提示模版时,不需要一次性提供所有的参数。
    • image.png
  2. 有的参数你已知是需要特定的方法获得的。(可以指定函数,获得即时数据做诶参数
    • image.png
提供示例给语言模型从而实现逻辑思维
少样本学习(few-shot)
  • 通过少量的样本(案例)让语言模型学会处理某类特定问题**【只是将样本作为prompt一同传进去】**
  • 需要对语言模型本身的微调(fine-tuning)区分【对模型行本身参数进行了改动】
  • Langchain对少样本学习(few-shot)提示的封装:FewShotPromptTemplate

image.png
image.png

利用样本选择器筛选样本
  • 为什么需要样本选择器(exampleselector)
    • 样本数量太多
    • 不是所有样本都能起到提升输出质量的作用
  • SemanticSimilarityExampleSelector 语义相似度筛选器

大型语言模型的封装–llm模块

llm模块基本用法
  • 直接调用
    • 功能上类似于调用predict(),让llm模块根据输入续写文本
  • 批量生成
    • generate()
    • 输入:文本的列表
    • 输出:文本的列表
自定义im模块
  • 用于封装langchain尚未支持的大型语言模型
  • 也可以用来模拟测试
  • 你来定义当该iim模块被调用的时候,如何根据输入的文本来输出

LangChain模块拆解

Data connection数据连接

一些基于大型语言模型的应用经常需要用到模型数据集中没有的数据。针对这一需求,langchain提供了一系列的工具可以让你从各种数据源中加载新的数据,数据,储存数据以及访问数据

  • 文档加载器:从多种不同的数据源加载文档
  • 文档转换器:拆分文档,丢弃冗余文档等
  • 文本embedding模型:将非结构化文本转化为浮点数的列表
  • 向量存储站:存储和搜索embedding数据
  • 检索器:查询向量数据

image.png

csv文件是一种使用逗号作为分隔符的定界文本文件。文件的每一行是一条数据记录。每个记录由一个或多个字段组成,字段之间用逗号分隔。

文本分割器工作方式

  1. 将文本拆分为小的,语义有意义的块(通常是句子).
  2. 开始将这些小块组合成较大的块,直到达到一定的体量。
  3. 一旦达到该大小,将该块作为独立的文本片段,然后开始创建一个新文本块。为了持块之间的连贯性,一般两个文本块之间会有重叠的部分。

image.png

文本词嵌入(wordembedding)

词嵌入是词语的一种数值化表示方式,一般情况下会将一个词映射到一个高维的向量中(词向量vector)

  • 例子
    • “我”->[0,0.3,-0.1]
    • “你”->[-0.6,0.12,0.16]
    • “俺”->[0.01,0.298,-0.99]
  • 不再考虑单词或者句子,对象变成了高维向量->数字化表达
  • 接近的语义接近的高维距离
  • 把文本变成高维向量:嵌入模型
    • openai
    • cohere
    • hugging face

向量存储站(广义上也是个检索器)

嵌入模型导出的向量需要放到一个地方便于存储和查询

  • 文本的数据库
    • 文本以嵌入向量的形式存储

检索器

检索器是一种根据非结构化查询语句返回对应文档的接口

  • 相比向量存储而言,检索器的定义更加宽泛
    • 向量存储可以看作是一种具备存储功能的检索器实现
    • 检索器不一定需要具备存储向量的功能

链结构

image.png

什么是链结构?

  • 概念上,链是在规定的标准下,不同模块的组合。
  • 链是一个抽象出来的概念/标准,并不是一定要用链才能完成对llm的调用。
  • 链提高了模块的标准化,复用性。
  • 链增加了工程的复杂度,冗余度。

链结构分类

  • 基础链结构
    • llm chain
    • router chain
    • sequential chain
    • transformation chain
  • 应用链结构实例
    • document chains
    • retrieval qa

llm chain (单链结构)

  1. 定义prompt
  2. 定义iim
  3. 定义chain
  4. 运行predict

router chain(多链,最少两次LLMcall)

  1. 定义prompts
  2. 定义iims/embeddings
  3. 定义chain(多链并行,选择一条链处理)
  4. 运行predict

image.png

Transformation chain(文本处理)

Document chain type (长文本处理链)

用于总结,文本嵌入

  • stuff
  • refine
  • Map reduce (作业)
  • Map rerank (作业)
Retrieval QA stuff type

image.pngimage.png

历史记录模块

让LLM能够了解之前进行的对话,Prompt engineering

  • 可用于chain,agent等结构
  • 可以对memory进行修改,总结,或自定义操作
  • 可以利用数据库对历史记录进行存取

代理人模块

  • agent的重要性,代表未来
  • agent拓展了llm的边界。从基础设施,到应用。
  • agent还在早期

很多时候,人们并不会给出精准的问题或者描述。人的大部分需求都是模糊并且复杂的。

  • 例如:
    • 帮我明天晚上定一家好吃的餐厅
    • 明天的天气怎么样?
    • 10年后苹果ceo多少岁?

ai需要系统性的对用户的问题/需求进行分析,从而给出针对复杂问题的答案。

人是如何处理这些问题的? (将复杂的问题拆成小块)

10年后苹果ceo多少岁?

  1. 搜索:什么是苹果?答:苹果公司是源自美国的跨国科技公司
  2. 搜索:谁是苹果公司ceo?答:tim cook
  3. 搜索:timcook多少岁?答:62岁
  4. 算数:62加10等于多少?答:72

相关论文

https://ai.googlebloq.com/2022/11/react-synergizing-reasoning-and-acting.html
https://arxiv.org/abs/2305.04091

代理人的类型

  • Action agents
    • zero-shot react
  • plan-and-execute agents

Plan-and-execute agents
通过plan,把目标分成一串小目标,针对小目标进行ReAct

回调函数模块

  • 和其他框架里面的回调函数概念类似,在完成某些指定的操作的时候,指定的回调函数会被启用。
  • 一般来用来做数据检测,debug等操作。

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

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

相关文章

卷积神经网络结构组成与解释

卷积神经网络结构组成与解释 卷积神经网络是以卷积层为主的深度网路结构,网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积(元素相乘再求和)的操作。 1. 卷积层 常见的卷积操作如下&#x…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十一 简单给视频添加水印图片效果 一、简单介绍 二、简单给视频添加水印图片效果实现…

Linux——信号量与基于环形队列的生产者消费者模型

目录 前言 一、信号量 二、信号量的接口 1.初始化 2.销毁 3.申请信号量 4. 释放信号量 三、基于环形队列的生产者消费者模型 1.环形队列的理解 2.生产者消费者的设计 3.单消费者单生产者环形队列的实现 4.多消费者多生产者环形队列的实现 前言 之前,…

MGRE中的OSPF配置

一、实验图 二、实验配置 R1 R2 R3 R4 R5 R6

EXCEL中COUNT和COUNTIF的参数类型有什么不同?

来看一下它们的语法: 1.COUNT(值) COUNT函数是计数数字的个数,注意是数值型数字,可不包括文本型数字,它的参数“值”可以是来自单元格的单一区域,如A1:C2,也可以是来自单元格的复合不规则区域&#xff0c…

技术方案应该这么写

简介 新入职一个华为十年工作经验的老Java。让写一个设计方案,其实也不算难,根据业务需要存取三千万数据,三天没写出来,最后做了辞退处理。其实我相信这个老技术员是有能力的,只是没有合适的机会表达。但是也侧面的说明…

9. Spring Boot 日志文件

本篇文章源码位置延续上个章节:SpringBoot_demo 本篇文章内容源码位于上述地址的com/chenshu/springboot_demo/logging包下 1. 日志的作用 发现和定位问题: 日志是程序的重要组成部分,它在系统、程序出现错误或异常时提供诊断和解决问题的线…

学习经验分享【32】本科/硕士开题报告、中期报告等写作经验分享

本科/硕士阶段首先就是要写开题报告,然后中期报告,这篇博文就是分享一下写报告的经验,避免被老师打回来。本人有丰富的写报告经验,有需要的朋友可添加文末联系方式与我联系。 一、本科开题报告的提纲 课题来源及研究的目的和意义…

C++内存分布

C代码编译过程 预处理 宏定义展开、头文件展开、条件编译,这里并不会检查语法编译检查语法,将预处理后文件编译生成汇编文件汇编将汇编文件生成目标文件(二进制文件)链接将目标文件链接为可执行程序 进程的内存分布 程序运行起来(没有结束前)就是一个…

openjudge_2.5基本算法之搜索_166:The Castle

题目 166:The Castle 总时间限制: 1000ms 内存限制: 65536kB 描述 Figure 1 shows the map of a castle.Write a program that calculates how many rooms the castle hashow big the largest room is The castle is divided into m * n (m<50, n<50) square modules.…

如何应对Android面试官 -> startActivity 流程详解

前言 本章主要讲解下 Activity 的启动流程&#xff1b; 整体概念 点击桌面图标&#xff0c;启动目标应用程序的 Activity&#xff0c;首先会跟 AMS 打交道&#xff0c;也就是 SystemServer 进程中启动的AMS&#xff0c;Launcher 进程和 SystemServer 进程中的 AMS 通信「一次跨…

(九)C++自制植物大战僵尸游戏自定义对话框的实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 对话框在游戏的交互中非常重要。在游戏中&#xff0c;对话框不仅可以提醒用户下达任务指令&#xff0c;而且还可以让用户进行操作&#xff0c;自定义游戏中的各种属性。对话框在游戏的交互中非常常见且大量使用。Co…

树莓集团与天府新区信息职业学院在国际数字影像产业园成功举办授牌仪式

2024年4月12日&#xff0c;树莓集团与天府新区信息职业学院共同在国际数字影像产业园举办授牌仪式。这场仪式不仅标志着双方合作的正式开启&#xff0c;更是为未来的产教融合、学生实训与就业推荐树立了坚实的基石。 仪式上&#xff0c;天府新区信息职业学院领导与树莓集团的代…

Qt QStyle详解

1.简介 QStyle类是 Qt 框架中用于控制应用程序界面元素外观的一个抽象基类。这个类提供了一种方式来定制窗口部件&#xff08;widgets&#xff09;的绘制和行为&#xff0c;可以通过改变主题或风格来更改应用程序的外观&#xff0c;而无需修改窗口部件本身的代码。 Qt包含一组…

抽奖系统设计

如何设计一个百万级用户的抽奖系统&#xff1f; - 掘金 如何设计百万人抽奖系统…… 在实现抽奖逻辑时&#xff0c;Redis 提供了多种数据结构&#xff0c;选择哪种数据结构取决于具体的抽奖规则和需求。以下是一些常见场景下推荐使用的Redis数据结构&#xff1a; 无序且唯一奖…

系统边界图

系统边界图的定义&#xff1a; 系统边界图是系统工程和软件工程中的一种图形化工具&#xff0c;用于描述系统与外部世界之间的交互和界限。它展示了系统的组成部分以及这些组件如何与外部实体进行通信和交互。系统边界图通常包括系统内部的各个组件、外部实体以及它们之间的通信…

【Qt】:事件的处理

系统相关 一.鼠标事件二.键盘事件三.定时器 事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在个同的的刻友出的。当用广投下鼠标、敲下键盘&#xff0c;或者是窗口需要…

掼蛋残局技巧

一、根据对手张数出牌 口诀&#xff1a;十打二来九打一&#xff0c;打成八张不着急&#xff1b; 对手七张或八张&#xff0c;可以反手打一夯&#xff1b; 五打二来六打三&#xff0c;打得对手把眼翻&#xff1b; 枪不打四&#xff1b; 两张&#xff1a;出两张以上的牌&#xff…

AI预测福彩3D第36弹【2024年4月15日预测--第8套算法开始计算第4次测试】

今天咱们继续测试第8套算法和模型&#xff0c;今天是第3次测试&#xff0c;目前的测试只是为了记录和验证&#xff0c;不建议大家盲目跟买。。我的目标仍旧是10次命中3-4次!~废话不多说了&#xff0c;直接上结果&#xff01; 2024年4月15日3D的七码预测结果如下 第一套…

【Leetcode每日一题】 动态规划 - 下降路径最小和(难度⭐⭐)(55)

1. 题目解析 题目链接&#xff1a;931. 下降路径最小和 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了. 2.算法原理 对于这类路径类问题&#xff0c;通常我们首先需要分析状态表示以及状态转移的过程。特别地&#xff0c;本题涉及…