LangChain学习笔记与样程

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等操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

linnux文件服务

1.FTP:文件传输协议。 基础:控制端口(身份验证) command 21/tcp 数据端口: data 20/tcp FTP Server默认配置:yum -y install vsftpd (安装vsftpd) touch /var/ftp/abc.txt(创建文件) systemctl start vsftpd(启动文件) systemctl …

osg渲染过程

目录 1、渲染最简单代码 2、详解run方法 3、详细过程 4、回调函数 5、Node Visitor 1、渲染最简单代码 2、详解run方法 3、详细过程 3.1 advance()方法 进行帧计数 3.2 eventTraversal() eventTraversal()响应用户操作,eventTraversal()遍历的是事件队列,而…

java:多线程

多线程 在java程序中同时执行多个线程,每个线程独立执行不同的任务. 可以提高程序的性能和资源利用率,增加程序的并发性. 多线程的作用 1,提高程序性能 可以将一个任务分解成多个子任务并行处理,从而提高程序的运行速度 2,提高资源利用率 可以更好地利用CPU资源,提高CPU…

【每日刷题】Day15

【每日刷题】Day15 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 目录 1. 141. 环形链表 - 力扣(LeetCode) 2. 142. 环形链表 II - 力扣(LeetCode) 3. 143. 重…

基于Python的卷积网络的车牌识别系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

CST电磁仿真的点/线/面设置操作【入门基础】

选择点/线/面 通过Pick功能选择点/线/面的方法 Modeling > Picks > Picks > Pick Points, Edges or Faces Pick是在模型上或任意空间中选择Point、Edge、Face的功能。利用Pick功能可以轻松获取模型的位置、尺寸等信息,也可以在执行Modeling和Result Han…

Xxl-job执行器自动注册不上的问题

今天新建的项目要部署xxl-job,之前部署过好多次,最近没怎么部署,生疏了。部署完之后,服务一直没有注册到执行器管理里面,找了半天也没找到原因,看数据库里的xxl_job_registry表也是一直有数据进来。 后来看…

46.HarmonyOS鸿蒙系统 App(ArkUI)网格布局

Grid(){GridItem(){Button(按钮1).fontSize(28)}.backgroundColor(Color.Blue)GridItem(){Text(数学).fontSize(28)}.backgroundColor(Color.Yellow)GridItem(){Text(语文).fontSize(28)}.backgroundColor(Color.Green)GridItem(){Text(英语).fontSize(28)}.backgroundColor(Co…

数据结构(算法)

总结,建议看EXCEL的《算法》页签,不然感觉有点乱 备注原理/步骤时间复杂度空间复杂度串的应用模式匹配简单/暴力O(mn) KMP  O(mn) 树的应用树哈夫曼树1、带权路径长度WPL 2、外部排序-最佳归并树1、哈夫曼树的度,只有0和m(m叉…

七月审稿之提升模型效果的三大要素:prompt、数据质量、训练策略(含Reviewer2和PeerRead)​

前言 我带队的整个大模型项目团队超过40人了,分六个项目组,每个项目组都是全职带兼职,且都会每周确定任务/目标/计划,然后各项目组各自做任务拆解,有时同组内任务多时 则2-4人一组 方便并行和讨论,每周文档…

Normalizing Flows

需要学的是神经网络 f f f, 用于完成从source distribution (Pz)(latent space,一般为高斯分布)到 target distribution (Px) 的映射。 Normalizing Flows 是一种强大的生成模型,它通过学习一个可逆且易于计算的转换来将复杂的概…

(弟弟14)递归•按顺序打印一个整数的每一位

这里是目录哦 题目代码运行截图递归思路递归停止条件如何实现“按顺序”悟了✨加油&#x1f389; 题目 按顺序打印一个整数的每一位。 代码 #include<stdio.h> void Print(int n) {if (n > 9)//递归停止条件{Print(n / 10);//不断趋近递归停止条件}printf("%d…

代码随想录算法训练营Day56|LC583 两个字符串的删除操作LC72 编辑距离

一句话总结&#xff1a;看起来复杂&#xff0c;动规分析以后就比较简单。 原题链接&#xff1a;583 两个字符串的删除操作 本质就是求两个字符串的最短子序列的长度。已经做过&#xff0c;不再详解。 class Solution {public int minDistance(String word1, String word2) {/…

一文读懂自动化运维工具ansible及其使用

1. ansible简介 ansible是干什么的 ansible是目前最受运维欢迎的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;SaltStack puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令…

麒麟服务器操作系统安装HTTP服务

往期好文&#xff1a;麒麟服务器操作系统安装TFTP服务 Hello&#xff0c;大家好啊&#xff01;今天我们将探讨如何在麒麟服务器操作系统上安装和配置HTTP服务&#xff0c;这是任何网络服务或应用的基础。无论你是想建立一个简单的网站&#xff0c;还是需要一个全功能的Web服务器…

wangzherongyao 2024.04.15

第一局&#xff1a;百里陪那只重置技能CD的辅助&#xff0c;对面有兰陵王&#xff0c;妲己&#xff0c;然后我补位廉颇被自己人和对面一阵嘲讽&#xff0c;真的不想说啥&#xff0c;对面盾山和妲己估计都没明白&#xff0c;我一只就能破他们队伍&#xff0c;所以看到没先出魔抗…

在Windows上配置VS Code GO语言开发环境

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

代码随想录阅读笔记-回溯【全排列】

题目 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 以[1,2,3]为例&#xff0c;抽象成树形结构如下&#xff1a; 回溯三部曲 1、递归函数参数 首先排列是有…

C++内存分布

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

Java实现单点登录(SSO)详解:从理论到实践

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起进步&am…