01|LangChain | 从入门到实战-介绍

news2025/4/27 5:23:49



by:wenwenc9

一、基本知识储备

1、什么是大模型,LLM?

大模型(Large Language Model)是近年来一个很热门的研究方向。

使用大量的数据训练出一个非常大的模型。一般是数十亿到上万亿的参数规模。
这些大模型可以捕捉到非常复杂的语言规律和知识,从而具有很强的自然语言处理能力

来自维基百科的介绍

大语言模型 (英语:large language model,LLM)
是一种语言模型,由具有许多参数(通常数十亿个权重或更多)的人工神经网络组成,使用自监督学习或半监督学习对大量未标记文本进行训练[1]。大型语言模型在2018年左右出现,并在各种任务中表现出色[2]。
这个术语没有正式的定义,但它通常指的是参数数量在数十亿或更多数量级的深度学习模型[3]。大型语言模型是通用的模型,在广泛的任务中表现出色,而不是针对一项特定任务(例如情感分析、命名实体识别或数学推理)进行训练[2]。
在预测句子中的下一个单词等简单任务上接受过训练,但发现具有足够训练和参数计数的神经语言模型可以捕获人类语言的大部分句法和语义。
此外大型语言模型展示了相当多的关于世界的常识,并且能够在训练期间“记住”大量事实。

2、什么是langchain?

     
     LangChain 是一个开源框架,旨在简化使用大型语言模型 (LLM) 的应用程序的创建。它提供了链的标准接口、与其他工具的大量集成以及常见应用程序的端到端链。它允许人工智能开发人员基于组合的大型语言模型(LLM)(例如 GPT-4)与外部计算和数据源来开发应用程序。该框架附带了适用于 Python 和 JavaScript 的包。

LangChain 它使用简单,并拥有庞大的用户和贡献者社区。

LangChain 遵循一般流程,用户向语言模型提出问题,其中问题的向量表示用于在向量数据库中进行相似性搜索,并从向量数据库中获取相关信息,然后将响应馈送到语言模型。此外,语言模型生成答案或采取行动。

总的来说,正常模型是基于训练数据,进行已有知识对话或相应行为
,而langchain集成了工具件,可以实现模型获得外部知识,进行对话等操作

关于它的作用

  • 聊天机器人:LangChain 可用于构建与用户自然交互的聊天机器人。例如,LangChain可以用来构建一个聊天机器人,可以回答客户的问题,提供客户帮助,甚至安排约会。
  • 代码分析:LangChain可用于分析代码并发现潜在的错误或安全漏洞。
    使用来源回答问题:LangChain 可用于使用多种来源回答问题,包括文本、代码和数据。例如,LangChain 可用于通过搜索各种来源(例如维基百科、新闻文章和代码存储库)来回答有关特定主题的问题。
  • 数据增强:LangChain可以通过生成与现有数据相似的新数据来增强数据。例如,LangChain可用于生成与现有文本数据相似的新文本数据。这对于训练机器学习模型或创建新数据集非常有用。
  • 文本分类:LangChain可以利用文本输入数据进行文本分类和情感分析
  • 文本摘要:LangChain可用于对指定字数或句子数的文本进行摘要。
  • 机器翻译:LangChain可用于将输入的文本数据翻译成不同的语言。

3、安装langchain

LangChain的基本安装特别简单。

pip install langchain

这是安装 LangChain 的最低要求(安装后可运行基础内容)。

也就是说,在后面的过程,会出现要安装各种插件

用下面两种方法,我们就可以在安装 LangChain 的方法时,引入大多数的依赖项。

安装LangChain时包括常用的开源LLM(大语言模型) 库:

pip install langchain[llms]

安装LangChain时包括大多数相关的库:

pip install langchain[all]


安装完成之后,还需要更新到 LangChain 的最新版本,这样才能使用较新的工具。

pip install --upgrade langchain


如果你想从源代码安装,可以克隆存储库并运行:

pip install -e

langchain官方社区:
https://github.com/langchain-ai/langchain

在这里插入图片描述

二、核心组件说明

 
先来看下面一幅图
 
在这里插入图片描述
在langchain中,下面列举了6大核心模块,上图为这6大模块中的核心组件

  1. Model I/O [模型交互,提示]
  2. Retieval [ 检索 ]
  3. Chains [ 执行序列]
  4. Agents [ 中间件]
  5. Memory [ 存储]
  6. Callbacks

简而言之

1、Model I/O

	与语言模型的交互,比如在线GPT系列,或各种离线模型

2、Retieval

	与应用程序特定数据的接口
	应用程序,可以是模型,可以是数据库,文档,等等
	因为它,实现了模型获取外部知识

3、Chains

	构造调用序列
	链允许我们将多个组件组合在一起,创建一个单一的、一致的应用程序。例如,我们可以创建一个链,
	该链接接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给 LLM。
	我们可以通过将多个链组合在一起,或者通过将链与其他组件组合在一起,来构建更复杂的链。

4、Agents

	让链在给定的高级指令中选择要使用的工具

5、Memory

	在链运行之间保持应用程序状态
	向量数据库,内存RAM,等交互作用

6、Callbacks

	记录并流式传输任何链的中间步骤

三、使用

1、关于OpenAi

.
ChatGPT和GPT-4,我想就没有必要赘言了,网上已经有太多资料了。但是要继续咱们的LangChain,你需要对OpenAI的API有进一步的了解。

LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。

因此,要了解LangChain的底层逻辑,需要了解大模型的API的基本设计思路。而目前接口最完备的、同时也是最强大的大语言模型,当然是OpenAI提供的GPT家族模型。

https://openai.com/blog/openai-api

建议去官方文档看看

这两类Model,是大语言模型的代表。当然,OpenAI还提供Image、Audio和其它类型的模型,目前它们不是LangChain所支持的重点,模型数量也比较少

  • Chat Model,聊天模型,用于产生人类和AI之间的对话,代表模型当然是gpt-3.5-turbo(也就是ChatGPT)和GPT-4。当然,OpenAI还提供其它的版本,gpt-3.5-turbo-0613代表ChatGPT在2023年6月13号的一个快照,而gpt-3.5-turbo-16k则代表这个模型可以接收16K长度的Token,而不是通常的4K。(注意了,gpt-3.5-turbo-16k并未开放给我们使用,而且你传输的字节越多,花钱也越多)
  • Text Model,文本模型,在ChatGPT出来之前,大家都使用这种模型的API来调用GPT-3,文本模型的代表作是text-davinci-003(基于GPT3)。而在这个模型家族中,也有专门训练出来做文本嵌入的text-embedding-ada-002,也有专门做相似度比较的模型,如text-similarity-curie-001。

2、配置key

langchain案例均为调用在线OpenAI 模型,需要key,且科学上网才能调用;
点赞关注,提供非科学上网中转请求key;
.
第1步,先注册好你的API Key。

第2步,用 pip install openai 命令来安装OpenAI库。

第3步,导入 OpenAI API Key。

导入API Key有多种方式,其中之一是通过下面的代码:

import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'

OpenAI库就会查看名为OPENAI_API_KEY的环境变量,并使用它的值作为API密钥。

也可以像下面这样先导入OpenAI库,然后指定api_key的值。

import openai
openai.api_key = '你的Open API Key'

当然,这种把Key直接放在代码里面的方法最不可取,因为你一不小心共享了代码,密钥就被别人看到了,他就可以使用你的GPT-4资源!所以,建议你给自己的OpenAI账户设个上限,比如每月10美元啥的。

所以更好的方法是在操作系统中定义环境变量,比如在Linux系统的命令行中使用:

export OPENAI_API_KEY='你的Open API Key'

或者,你也可以考虑把环境变量保存在.env文件中,使用python-dotenv库从文件中读取它,这样也可以降低API密钥暴露在代码中的风险。

3、OpenAi 案例

(1) 调用Text模型

这里没有使用到langchain,为官方的调用封装

import openai

# 初始化OpenAI API
openai.api_key = '你的OpenAI API key'
response = openai.Completion.create(
  model="text-davinci-003",
  temperature=0.5,
  max_tokens=1024,
  prompt="给我一个关于努力学习的,四字成语")
  
print(response.choices[0].text)

输出的结果

勤奋学习

(2) 调用Caht模型

import openai
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "你是我的女朋呀"},
        {"role": "user", "content": "给我倒杯水"},
    ],
    temperature=0.8,
    max_tokens=60
)
print(response['choices'][0]['message']['content'])

输出

好的,我给你倒杯水。请稍等片刻

``

4、Text模型跟Chat模型优缺点

Chat模型和Text模型都有各自的优点,其适用性取决于具体的应用场景。

相较于Text模型,Chat模型的设计更适合处理对话或者多轮次交互的情况。这是因为它可以接受一个消息列表作为输入,而不仅仅是一个字符串。这个消息列表可以包含system、user和assistant的历史信息,从而在处理交互式对话时提供更多的上下文信息。

这种设计的主要优点包括:

  1. 对话历史的管理:通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。例如,你可以将过去的用户输入和模型的回复都包含在消息列表中,这样模型在生成新的回复时就可以考虑到这些历史信息。
  2. 角色模拟:通过system角色,你可以设定对话的背景,给模型提供额外的指导信息,从而更好地控制输出的结果。当然在Text模型中,你在提示中也可以为AI设定角色,作为输入的一部分。

然而,对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。从上面的结果看,Chat模型给我们输出的文本更完善,是一句完整的话,而Text模型输出的是几个名字。这是因为ChatGPT经过了对齐(基于人类反馈的强化学习),输出的答案更像是真实聊天场景。

对OpenAI的API调用,理解到这个程度就可以了。毕竟我们主要是通过LangChain这个高级封装的框架来访问Open AI

5、langchain案例

(1) 调用Text模型

from langchain.llms import OpenAI

llm = OpenAI(
    model="text-davinci-003",
    temperature=0.8,
    max_tokens=1024, )
response = llm.predict("用'好好学习'写一句话")
print(response)

输出结果

好好学习,天天向上!

(2) 调用Chat模型

from langchain.chat_models import ChatOpenAI

chat = ChatOpenAI(model="gpt-4",
                  temperature=0.8,
                  max_tokens=60)
from langchain.schema import (
    HumanMessage,
    SystemMessage
)

messages = [
    SystemMessage(content="你是一个成语接龙高手"),
    HumanMessage(content="好好学习")
]
response = chat(messages)
print(response)

输出

content='学以致用'

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

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

相关文章

MySQL进阶之性能优化与调优技巧

数据库开发-MySQL 1. 多表查询1.1 概述1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 1. 多表查询 1.1 概述 1.1.2 介绍…

【蓝桥杯省赛真题42】Scratch舞台特效 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解

目录 scratch舞台特效 一、题目要求 编程实现 二、案例分析 1、角色分析

Visual Studio 2010 软件安装教程(附下载链接)——计算机二级专用编程软件

下载链接: 提取码:2wAKhttps://www.123pan.com/s/JRpSVv-9injv.html 安装步骤如下: 1.如图所示,双击打开【Visual Studio 2010简体中文旗舰版】文件夹 2.如图所示,找到“Setup”文件夹打开,双击运行“setup” 3.如图…

【JavaEE】JVM 剖析

JVM 1. JVM 的内存划分2. JVM 类加载机制2.1 类加载的大致流程2.2 双亲委派模型2.3 类加载的时机 3. 垃圾回收机制3.1 为什么会存在垃圾回收机制?3.2 垃圾回收, 到底实在做什么?3.3 垃圾回收的两步骤第一步: 判断对象是否是"垃圾"第二步: 如何回收垃圾 1. JVM 的内…

H5ke9 异步处理

目录 .then()的使用详解 案例一:触小图标变大,移走变回 案例三:页面提交文件,我服务器端接收 上次fetvh就一个参数url,,就是get请求 fetch还可以第二个参数对象,可以指定method:改为POST 请求头header :发送txt,servlet,json给客户端,,异步请求图片 1都是客户端传到服务器端…

第二十六章 BEV感知系列三(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 BEV感知系列是对论文Delving into the De…

22吉林大学软件需求分析与规范(Software Requirements Analysis Specification)

写在前面: 4w多字笔记,可能显示有问题,带图片完整pdf版暂定10r一份,需要的同学可以加wx:fanaobo,备注软件需求笔记。 chapter 0 课程简介 课程简介: ◼ 软件工程专业核心课程之一 ◼ 软件工程课程体系最…

【完美世界】云曦被胁迫,荒天帝怒斩战王,云曦隐约猜出石昊身份

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《完美世界云曦篇》最新一集,云曦的内心犹如翻江倒海一般,她已经无比确定魔曦就是下界的石昊,这让她感到有些不知所措。然而,石昊却始终不肯承认自己的…

(免费领源码)java#ssm#mysql宠物网站系统07183-计算机毕业设计项目选题推荐

摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布,为此,本人开发了一个基于B/S(浏览器/服务器)模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…

AD9371 官方例程裸机SW 和 HDL配置概述(三)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

shell script 的默认变量$0,$1,$2...,参数偏移的shift

简单来说,在scirpt脚本里面,$0表示文件名,$1表示第一个参数,以此类推,还有 $# 后面接参数的个数 $ 代表"$1","$2","$3",每个都是独立的,用双引号括起来 $* 代…

OkHttp库爬取百度云视频详细步骤

以下是使用OkHttp库的Kotlin爬虫程序,该爬虫用于爬取百度云的视频。 首先,我们需要导入OkHttp库和Kotlin库。import okhttp3.OkHttpClient和import kotlin.jvm.JVM。 import okhttp3.OkHttpClient import kotlin.jvm.JVM然后,我们需要创建一…

如何使用Python的matplotlib和seaborn库绘制颜色渐变的高级散点图

前言 我的科研论文中需要绘制一个精美的散点图,表达的是各个散点距离中心点的距离远近情况,特点如下: 绘图的美观程度高根据距离目标点的距离的不同,各个散点能有颜色或者是透明度上的区分相应的统计量是与中心点(目…

如何搭建低成本亚马逊aws云服务器

0. 环境 win10 火狐浏览器 1. 登录 https://aws.amazon.com/cn/ -> 登录 -> 根用户 -> ********, **** 如果未有,需要注册,去年我注册的,麻烦之处是需要添加信用卡。可以淘宝aws搜索商家帮忙处理。 2. 控制台 在控制台主页&…

【Orangepi Zero2 全志H616】驱动蜂鸣器

一、用户手册对应的I/O 二、wiringPi库示例代码 三、代码实现 四、创建shell脚本 五、接线和运行结果 一、用户手册对应的I/O 二、wiringPi库示例代码 1 #include <stdio.h>2 #include <wiringPi.h>34 #define NUM 17 //26pin5 //#define NUM 18 //26pin6 //#…

EASYX图片操作

easyx学习网址 建议使用谷歌搜索引擎搜索相关的资料 eg1:图片显示到桌面 #include <stdio.h> #include <easyx.h> #include <iostream> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define PI 3…

第二十四章 BEV感知系列一(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去&#xff0c;以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新&#xff0c;力求完整精炼&#xff0c;引人启示。所需前期知识&#xff0c;可以结合手写AI进行系统的学习。 BEV感知系列是对论文Delving into the De…

一站式解决方案:体验亚马逊轻量服务器/VPS的顶级服务与灵活性

文章目录 一、什么是轻量级服务器/VPS 二、服务器创建步骤 三、服务器连接客户端(私钥登录) 四、使用服务器搭建博客网站 五、个人浅解及总结 一、什么是轻量级服务器/VPS 亚马逊推出的轻量级服务器/VPS&#xff1a;是一种基于云计算技术的虚拟服务器解决方案。它允许用户…

【MySQL事务篇】MySQL事务日志

MySQL事务日志 文章目录 MySQL事务日志1. 概述2. redo 日志2.1 概述2.2 redo log的好处、特点2.3 redo的组成2.4 redo的整体流程2.5 redo log的刷盘策略2.6 redo log file 参数设置相关 3. undo 日志3.1 概述3.2 Undo日志的作用3.3 undo的存储结构1. 回滚段与undo页2. 回滚段与…

洗地机哪个品牌好?家用洗地机选购攻略

随着家用洗地机的普及和市场的广泛认可&#xff0c;进入洗地机行业的制造商也越来越多。在面对众多洗地机品牌时&#xff0c;消费者常常感到困惑&#xff0c;不知道如何选择。面对众多选择&#xff0c;选择有良好保障的知名洗地机品牌是明智之举。知名品牌在质量、售后服务等方…