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大模块中的核心组件
- Model I/O [模型交互,提示]
- Retieval [ 检索 ]
- Chains [ 执行序列]
- Agents [ 中间件]
- Memory [ 存储]
- 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的历史信息,从而在处理交互式对话时提供更多的上下文信息。
这种设计的主要优点包括:
对话历史的管理
:通过使用Chat模型,你可以更方便地管理对话的历史,并在需要时向模型提供这些历史信息。例如,你可以将过去的用户输入和模型的回复都包含在消息列表中,这样模型在生成新的回复时就可以考虑到这些历史信息。角色模拟
:通过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='学以致用'