Langchain 小总结(一)【安装+组成】

   实训第一个真正涉及大语言模型的项目作业就是基于langchain的开发,在完成这个项目的过程中,遇到很多错误,也学习到不少东西,因此特地写一篇总结以备日后查看回顾。

一、langchain 安装

1.1  总流程:

  1. 创建虚拟环境;
  2. 在大模型官网注册登录拿到api key(和secret key);
  3. 命令行安装第三方模块;

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应用开发从入门到精通icon-default.png?t=N7T8https://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? 

  1. 了解 Langchain 的架构和模块;
  2. 学习 Langchain 的接口和抽象类;
  3. 阅读 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

这里多说一句:

  1. LLMs:输入一个字符串,然后返回一个字符串;
  2. 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 | 🦜️🔗 LangChainicon-default.png?t=N7T8https://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)icon-default.png?t=N7T8https://developer.volcengine.com/articles/7370375414524411931LangChain 与 LangSmith:构建与微调支持LLM的智能应用双重攻略-CSDN博客文章浏览阅读4.8k次,点赞6次,收藏23次。随着人工智能领域的不断发展,自然语言处理 (NLP) 技术也在不断进步。近年来,革命性的大型语言模型 (LLM) 已经成为了 NLP 技术的重要组成部分。作为一种可以理解并生成类似人类的文本的技术,LLM 已经在机器翻译、情感分析、聊天机器人和内容生成等任务中发挥了重要作用。在这个以语言为桥梁的世界中,LLM 的应用前景无限,而 LangChain 创新平台则是充分利用 LLM 潜力的重要手段。在本文中,我们将探索 LLM 的奇迹,并介绍如何使用 LangChain 构建 LLM 支持的应用程序。_langsmithhttps://blog.csdn.net/FrenzyTechAI/article/details/132695264That's it !☺

速速更新第二篇ing

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值