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



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.mfbz.cn/a/115564.html

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

相关文章

构建强大的Web应用之Django详解

引言: Django是一个功能强大且灵活的Python Web框架,它提供了一套完整的工具和功能,帮助开发者快速构建高效的Web应用。本篇文章将带您逐步了解Django的基本概念和使用方法,并通过实际的代码案例,帮助您从零开始构建自…

MSQL系列(十三) Mysql实战-left/right/inner join 使用详解及索引优化

Mysql实战-left/right/inner join 使用详解及索引优化 前面我们讲解了BTree的索引结构,也详细讲解下Join的底层驱动表 选择原理,今天我们来了解一下为什么会出现内连接外连接,两种连接方式,另外实战一下内连接和几种最常用的join…

在IDEA运行spark程序(搭建Spark开发环境)

建议大家写在Linux上搭建好Hadoop的完全分布式集群环境和Spark集群环境,以下在IDEA中搭建的环境仅仅是在window系统上进行spark程序的开发学习,在window系统上可以不用安装hadoop和spark,spark程序可以通过pom.xml的文件配置,添加…

python创建一个简单的flask应用

下面用python在本地和服务器上分别创建一个简单的flask应用: 1.在pc本地 1)pip flask后创建一个简单的脚本flask_demo.py from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!winR进入命令行,…

Envoy XDS协议学习

Envoy xds学习 资料地址 envoy官网资料连接 接口说明 xds分为增量接口和全量接口SotW:state of the world 即全量的数据Incremental: 增量的数据 具体接口 Listener: Listener Discovery Service (LDS) SotW: ListenerDiscoveryService.StreamList…

跳跳狗小游戏

欢迎来到程序小院 跳跳狗 玩法:一直弹跳的狗狗,鼠标点击屏幕左右方向键进行弹跳,弹到不同物品会有不同的分数减扣,规定的时间3分钟内完成狗狗弹跳,快去跳跳狗吧^^。开始游戏https://www.ormcc.com/play/gameStart/198…

飞书开发学习笔记(一)-应用创建和测试

飞书开发学习笔记(一)-应用创建和测试 一.前言 现在大企业用的办公IM软件中,飞书是口碑最好的,不得不说,字节在开发产品方面,确实有自己独到的竞争力,比如说抖音、头条、飞书。在办公会议和云文档的体验上,其它的办公…

实验四: Android 资源访问

实验四: Android 资源访问 4.1 实验目的 本次实验的目的是让大家熟悉 Android 中的资源,资源指的是代码中使用 的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。 4.2 实验要求 掌握字符串资源,颜色资源和尺寸资源…

第五部分:Tomcat

5.1:JavaWeb 5.1.1:JavaWeb的概念 ①什么是JavaWeb? JavaWeb是指所有通过Java语言编写可以通过浏览器访问的程序的总称 JavaWeb是基于请求和响应来开发的 ②什么是请求? 请求是指客户端给服务器发送数据,叫请求Request ③什么是…

时空智友企业流程化管控系统文件存在任意文件上传漏洞

时空智友企业流程化管控系统文件存在任意文件上传漏洞 免责声明漏洞描述漏洞影响漏洞危害网络测绘Fofa: app"时空智友V10.1" 漏洞复现1. 构造poc2. 发送数据包,上传文件3. 访问webshellwebshell地址 免责声明 仅用于技术交流,目的是向相关安全人员展示漏…

NUUO网络摄像头(NVR)RCE漏洞复现

简介 NUUO Network Video Recorder(NVR)是中国台湾NUUO公司的一款网络视频记录器。 NUUO NVR视频存储管理设备的__debugging_center_utils___.php文件存在未授权远程命令执行漏洞,攻击者可在没有任何权限的情况下通过log参数执行任意命令。…

【产品经理从0到1】ID(工业设计)知识构建

目录 一、ID知识架构思维导图 ​二、3D打印设计工具 导语:作为一个硬件产品经理,虽然不需要自己进行工业设计,但是若要对产品外观和品质细节进行更深入和准确的把控,就需要了解工业设计的相关知识。 一、ID知识架构思维导图 二、…

JavaScript(WebAPI)

文章目录 什么是WebAPIDOM 基本概念DOM 树事件 操作元素获取/修改元素内容获取/修改元素属性获取/修改表单元素属性获取/修改样式属性 网页版猜数字游戏实现一个表白墙 什么是WebAPI 前面学习的 JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: …

两天实现思维导图的协同编辑?用Yjs真的可以

最近使用 Yjs 给自己开源的一个思维导图加上了协同编辑的功能,得益于该框架的强大,一直觉得很复杂的协同编辑能力没想到实现起来异常的简单,所以通过本文来安利给各位。 要实现协同编辑,目前主要有两种算法,一是 OT&a…

关于Intel Press出版的《Bedyong BIOS》第2版的观后感

文章目录 此书的背景UEFI运行时DXE基础CPU架构协议PCI协议UEFI驱动的初始化串口DXE驱动示例 《Beyond BIOS》首先介绍一个简单的UEFI应用程序模块,用于展示UEFI应用程序的行为。作者为Waldo。该模块名为“InitializeHelloApplication”,它接受两个参数&a…

【Mysql】Mysql中表连接的原理

连接简介 在实际工作中,我们需要查询的数据很可能不是放在一张表中,而是需要同时从多张表中获取。下面我们以简单的两张表为例来进行说明。 连接的本质 为方便测试说明,,先创建两个简单的表并给它们填充一点数据: …

保障效率与可用,分析Kafka的消费者组与Rebalance机制

系列文章目录 上手第一关,手把手教你安装kafka与可视化工具kafka-eagle Kafka是什么,以及如何使用SpringBoot对接Kafka 架构必备能力——kafka的选型对比及应用场景 Kafka存取原理与实现分析,打破面试难关 防止消息丢失与消息重复——Kafka可…

react+canvas实现横跨整个页面的动态的波浪线(贝塞尔曲线)

本来写这个特效 我打算用css实现的,结果是一波三折,我太难了,最终没能用css实现,转战了canvas来实现。来吧先看效果图 当然这个图的波浪高度、频率、位置、速度都是可调的,请根据自己的需求调整,如果你讲波…

windows10系统-17-文献管理软件

参考诸多文献管理软件的优劣比较如何?你有哪些使用心得? 参考我愿称之为目前最好用的文献管理和阅读软件!readpaper 1 文献总结 文献总结是非常重要的一项技能,不知道大家看完文献后有没有总结文献的习惯,有的话那挺…

数据仓库-拉链表

在数据仓库中制作拉链表,可以按照以下步骤进行: 确定需求:首先明确需要使用拉链表的场景和需求。例如,可能需要记录历史数据的变化,以便进行时间序列分析等。设计表结构:在数据仓库中,拉链表通…
最新文章