Langchain 小总结(一)【安装+组成】
实训第一个真正涉及大语言模型的项目作业就是基于langchain的开发,在完成这个项目的过程中,遇到很多错误,也学习到不少东西,因此特地写一篇总结以备日后查看回顾。
一、langchain 安装
1.1 总流程:
- 创建虚拟环境;
- 在大模型官网注册登录拿到api key(和secret key);
- 命令行安装第三方模块;
1.2 具体步骤:
1.2.1 创建虚拟环境:
方法一(venv):
使用venv创建虚拟环境。
打开命令行窗口(win+R,输入cmd),输入以下命令:
(以D:\w\envs为例,可更改路径为你想指定的位置)
cd D:\w\envs
使用以下命令创建名为 work
的虚拟环境 :
python -m venv work
创建完成后,使用以下命令进入虚拟环境:
source work/Scripts/activate
此时,命令行提示符前面会显示虚拟环境的名称,例如“ (work)”
,表示当前正在使用 work
虚拟环境。
方法二(conda):
使用conda创建虚拟环境。(已经有了conda环境)
打开anaconda prompt,输入:
(以D:\w\envs为例,可更改路径为你想指定的位置)
cd D:\w\envs
使用以下命令创建名为work的虚拟环境:
conda create -n work
创建完成后,使用以下命令进入虚拟环境:
conda activate work
1.2.2 api key和secret key
我们实训过程运用多个大模型测试效果,所以注册了讯飞星火、openai、智谱ai,百度智能云,通义千问这几个平台的账号。在注册登录、实名认证后:
1. 讯飞星火:
控制台-讯飞开放平台https://console.xfyun.cn/services在这里创建一个新应用,之后就可以看到APPID,
点击这个应用名称,进入新页面后点击“更多服务信息查询”:
就可以看到:
2. openai:
进入下面的链接(maybe需要翻🚪),照着步骤进行就可以拿到api key了
https://platform.openai.com/docs/api-reference/introductionhttps://platform.openai.com/docs/api-reference/introduction
3. 智谱ai:
智谱AI开放平台 (bigmodel.cn)https://open.bigmodel.cn/overview
进入这个页面后登录账号,就可以看到“查看API key”,进入即可。(已登录的账号可以直接点击下面的链接)
https://open.bigmodel.cn/usercenter/apikeys
4. 百度智能云:
进入下面的链接,如何操作都有详细说明。
API中心 (baidu.com)https://cloud.baidu.com/doc/API/index.html
5. 阿里云(通义):
阿里云免费试用 – 阿里云阿里云免费试用提供多种产品免费,包括免费云服务器、免费云存储、免费数据库以及AI试用等。飞天免费试用计划,全栈产品体验,让企业和个人轻松享受云服务。https://free.aliyun.com/?accounttraceid=7300ce95e4b042a2bf06e7cf1f249a9atyse进入阿里云首页,登录账号后将鼠标悬浮在账号上,就可以看到AccessKey,点进去就行。
1.2.3 命令行安装第三方模块:
各个大模型对应的代码操作推荐直接参考langchain官网:Introduction | 🦜️🔗 LangChainhttps://python.langchain.com/v0.2/docs/introduction/
1. 进入官网,点击Intergrations:
2. 找到LLMs:
3. 在LLMs下就可以找到你想要查看的模型,找起来不方便的话也可以CTRL+f,搜索关键词 ,比如,baidu qianfan:
4. 点进去就可以看到很详细的步骤:
练习一下:
进入虚拟环境中执行以下命令:
pip install openai langchain langchain-wenxin
现在就可以在pycharm里新建项目测试wenxin大模型了:
文件结构如下:
test-wenxin.py:
'''
0.导包
1.获取AK&SK
2.
3.'''
from langchain_wenxin import Wenxin
# from langchain.chat_models import ChatWenxin
WENXIN_APP_Key = "xxxxxx"
WENXIN_APP_SECRET = "xxxxxx"
llm = Wenxin(
temperature=0.9,
model="ernie-bot-turbo",
baidu_api_key = WENXIN_APP_Key,
baidu_secret_key = WENXIN_APP_SECRET,
verbose=True,
)
response = llm.invoke("你是谁?")
print(response)
继续在虚拟环境下执行:
pip install -qU langchain_community
之后就可以用简单的代码测试更多的大模型,比如qianfan:
test-qianfan.py:
from langchain_community.chat_models import QianfanChatEndpoint
from com.test.baidu import CONST
# 这里是把key信息当作常量放在了com/test/baidu目录下的CONST文件中,我只需要导入这个文件就可以
llm=QianfanChatEndpoint(
temperature=0.7,
model="ernie-bot-turbo",
qianfan_ak=CONST.APP_Key,
qianfan_sk=CONST.SECRET_KEY,
verbose=True,
)
response = llm.invoke("告诉我你是谁")
print(response)
print(response.content)
print("=================================")
response = llm.invoke("请记住金善禹超级可爱。")
print(response)
print(response.content)
# 重构为 stream 模型
#一次性发送多个msg
chat = QianfanChatEndpoint(
streaming =True,
qianfan_ak=CONST.APP_Key,
qianfan_sk=CONST.SECRET_KEY,
verbose=True,
)
#构造多个msg的流式消息
from langchain_core.language_models.chat_models import HumanMessage
human_msg = [HumanMessage(content="你不好")]
# str_msg = human_msg.to_string()
# response = chat.invoke(messages)
responses = chat.batch(inputs=["你是谁?", "你的主人是谁?"])
#方法一:遍历响应,逐一打印
#方法二:流式打印
try:
for chunk in chat.stream(human_msg):
print(chunk.content, end=" ", flush=True)
except TypeError as e:
print("TypeError")
我们可以从上面的代码中学习到:
四个基本操作
1. 导入包(有共性的是导入大语言模型)
from langchain_community.chat_models import xxx
# 这个‘xxx’可以是:ChatSparkLLM, QianfanChatEndpoint, ChatZhipuAI
2. 生成、构造模型:
# 记得把 Chatmodel 换成自己想用的模型,这里以qianfan为例:
llm=QianfanChatEndpoint(
temperature=0.5,
# temperature 用于调整模型随机性/确定性
# temperature较高时代表随机性,适用于需要发挥空间的场景,较低时代表确定性,适用于需要确定答案的场景
model="ernie-bot-turbo",
qianfan_ak="your_APP_Key",
qianfan_sk="your_SECRET_KEY",
verbose=True,
)
其实就是:
# 构建模型实例的基本形式:
chat_model = ChatModel()
3. 发送请求:
message_str = "hihihi!"
# message往往不是确定的一句话,这部分后面再细说
# 但是基本形式都是:input_msg = "xxx"
4. 获取响应并打印:
response = llm.invoke(message_str)
print(response)
# 基本形式: response = chat_model.invoke(msg)
# response = chat_model.invoke(input={xxx})
能实现基本测试功能的代码对应的第三方模块安装结束啦!#^o^#
之后写更复杂代码的时候,提示哪个module/package没有就安装哪个。
二、langchain 组成
本章节大部分信息来自——
langchain中文官网的介绍~
LangChain 介绍 | LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通https://www.langchain.com.cn/get_started/introduction
2.1 langchain是什么?
Langchain 是一个开源的自然语言处理(NLP)框架,旨在帮助开发者更易于构建和部署基于语言模型的应用程序。
Langchain 的主要作用是提供一系列工具和接口,使开发者可以更轻松地使用预训练的语言模型,从而实现各种自然语言处理任务,如文本分类、命名实体识别、情感分析、问答系统等。
【关于接口可以看这篇文章👇】【Python】如何理解接口?-CSDN博客不同的电器有不同的插头,但只要插头的形状和大小与电源插座匹配,就可以正常使用电器。同样,在软件开发中,接口也是一种规范或协议,它定义了不同软件组件之间的交互方式。只要软件组件遵循接口的规范,就可以正常地进行交互和通信。https://blog.csdn.net/weixin_74769910/article/details/140609373
2.2 如何更好地了解langchain?
- 了解 Langchain 的架构和模块;
- 学习 Langchain 的接口和抽象类;
- 阅读 Langchain 的文档和示例。
【👆是老师建议的】
所以接下来我们学习langchain的组成与架构。
2.3 langchain的核心组成
自底向上依次是:
2.3.1 LangChain Lib库
langchain_core/community/experimental……
具体来说:
① langchain_core:是整个langchain生态的抽象,是 LangChain 的核心部分,提供了基本的自然语言处理功能,包括文本分类、实体识别、情感分析等。
# 创建Message:使用langchian_core包中的HumanMessage(也可以是AIMessage、SystemMessage)创建一个Message对象
from langchain_core.language_models.chat_models import HumanMessage
# 创建Prompt :使用langchain_core包中的ChatPromptTemplate创建一个Prompt对象
from langchain_core.prompts import ChatPromptTemplate
# 创建Output_parser :使用langchain_core包中的StrOutputParser()创建一个输出处理器
from langchain_core.output_parsers import StrOutputParser
② langchain_community:是对langchain-core层抽象的实现。
# 以星火为例
# langchain_community 导入聊天模型
from langchain_community.chat_models import ChatSparkLLM
# langchain_community 导入语言模型
from langchain_community.llms import SparkLLM
这里多说一句:
- LLMs:输入一个字符串,然后返回一个字符串;
- ChatModels :输入一连串Message (比如一连串对话) ,以此为上下评文,然后输入一条Message。
两者区别LLMs 偏向于问与答,ChatModel更偏向于对话的场景。
③ langchain:是对langchain_community的整合和适配,主要由LLMs、Prompts、Chains、Agents、RAG、Memory组成。
2.3.2 LangChain Template库
模板库, 就是一个可以用来定义文本结构、内容的模板,可以插入变量,生成满足特定要求的文本。templates 模板的语法通常包括变量、函数和条件语句等元素。
变量用于表示需要插入到模板中的动态内容,
函数用于对变量进行处理和转换,
条件语句用于控制模板中的内容显示和隐藏。
以下是一个简单的 templates 模板示例:
from langchain.templates import Template
# 定义一个问候语模板
greeting_template = Template(
"Hello, {name}! What can i do for you?"
)
# 使用模板生成问候语
# 调用render方法
greeting_text = greeting_template.render(name="Sunoo")
print(greeting_text)
Templates | 🦜️🔗 LangChainhttps://python.langchain.com/v0.1/docs/templates/
2.3.3 LangServe REST 服务支持
用于将LLM应用部署为REST服务。
💡解释一下:将自然语言处理模型部署为 REST 服务是指将一个自然语言处理模型打包成一个可以通过 HTTP 请求进行访问的 web 服务。这个 web 服务遵循 REST(Representational State Transfer,表述性状态转移)架构风格,提供了一组用于处理自然语言的 API,可以接受来自客户端的请求,处理请求中的自然语言文本,并返回处理结果。
2.3.4 LangSmith 开发者平台
这个我的理解不够TAT,诸位请看下文👇
深入LangSmith:如何帮助大模型(LLM)应用从原型到投入生产?【上】 – 文章 – 开发者社区 – 火山引擎 (volcengine.com)https://blog.csdn.net/FrenzyTechAI/article/details/132695264That's it !☺
速速更新第二篇ing
作者:moz与京