环境准备
- Python环境(编写当前文章时使用的3.10.11)
- VS Code
注意:
LangChain官网要求最低版本3.8.1
安装Jupyter Notebook
安装之前确认一下python 版本:python --version
介绍
可自行百度、Google
安装
代码语言:javascript复制pip install jupyterlab
验证(直接运行)
代码语言:javascript复制jupyter-lab
地址:http://localhost:8888/lab
如图
image.png
至此完成了jupyterlab的安装。安装完成后,我们便可以在VS Code上进行配置使用,VS Code 的安装自行百度、Google。
VS Code配置Jupyter
安装
首先要在VS Code上安装Jupyter插件,如图:
测试(Hello World)
打开VS Code的控制台(TERMINAL),执行创建一个测试文件命令:code test-jupyter.ipynb
。如图:
在文件中添加以下代码块,并点击代码块左侧的三角符号便可执行,执行成功便会在代码块下方出现Hello World 字样。如图:
代码语言:javascript复制print("Hello World");
image.png
安装LangChain
需要确认好你的python版本!!!
安装命令:
代码语言:javascript复制pip install langchain
安装成功,如图:
安装dotenv插件
代码语言:javascript复制用于加载环境变量
pip install python-dotenv
简单应用
使用LLM模块生成文本
第三方模型的API
- 百度 文心ERNIE
- 阿里 通义千问
- Replicate
- Openai
测试代码
langchain-llm.ipynb 代码如下(自行拷贝到自己文件中):
代码语言:javascript复制###### 载入环境变量,根据不同的LLM模块,需要的环境变量也是不一样的。
%load_ext dotenv
%dotenv
from langchain.llms import OpenAI
llm = OpenAI()
llm.predict("给我一个很好听但是比较土的小狗的名字")
环境变量
在上述代码同级目录中创建一个.env
文件并将Openai的APIKEY放进去,如下:
# 该代码放置在demo同级目录下的.env 文件下(没有则新建一个)
OPENAI_API_KEY="sk-uXXXXXXXXXXXXXXXXX8Hj8u0vNPPDTFxQpO"
层级目录如下:
image.png
完整流程图示
具体演示图如下:
完整文件
langchain-llm.ipynb
报错
如果报错如下图所示:
执行命令即可
代码语言:javascript复制pip install openai
使用聊天模块创建一个聊天应用
简单的说就是它可以以聊天对话的形式来续写一段对话。它和我们的之前讲到的LM模块是类似的。因为它的底层是以LLM模块作为基础
本次演示会引用三个它的消息类第一个消息类:
- 用于支持聊天模块的特殊类
- AIMessage
- HumanMessage
- SystemMessage
然后聊天模块支持的方法调用
- predict_message
- predict
- 使用的方式和LLM方式一样
代码:
代码语言:javascript复制# 方式一:
from langchain.chat_models import ChatOpenAI
chat_model = ChatOpenAI()
chat_model.predict("给我一个很土但是很好听的小狗的名字")
# 方式二:
# 对话方式由 AIMessage包裹,针对于聊条历史记录chat_model更好用一些。
from langchain.schema import HumanMessage
text = "一个专门生产彩虹独角兽的公司应该叫什么名字"
messages = [HumanMessage(content=text)]
chat_model.predict_messages(messages)
# 方式三:
# 对话方式
llm.predict_messages(messages)
如图:
源文件
langchain-llm.ipynb
链式结构
首先其实LangChain中的Chain实际上就是一个链式结构。
概念-什么是链式结构:
就是按照某种需求将其串联起来,变成一条锁链,那么这一条锁链它本身就已经变成了一个应用,当然这条锁链可能会有一个输出是一个字符串,然后一个输入也是一个字符串。
为什么需要链式结构
首先我们刚才说的是需要方便的连接多个LLM模块。但它不一定是LLM模块,它可以是各种不同的模块,LLM模块只是我们刚才讲到的一个最基础的模块
代码:
代码语言:javascript复制%load_ext dotenv
%dotenv
from langchain.llms import OpenAI
llm = OpenAI()
from langchain.prompts import PromptTemplate
# 提示模板
prompt = PromptTemplate.from_template("给我一个很土但很好听的{对象}小名")
prompt.format(对象= "小狗")
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
# run提供了一个参数。prompt只有一个参数正好是run方法提供的
chain.run("小猫")
如图:
源文件
langchain-llm-chain.ipynb
简单应用代理人
概念-什么是代理人
代理人和之前提到的链式的模块有些不同,它存在的意义在于去解决一些链式模块难以独立处理的复杂问题,例如:解决一些复杂的数学计算、或者是访问互联网去得到一些最新的信息。我们知道大语言模型本省是不支持联网的,或者说大部分是不联网的,从而意味着它里面的数据是有限的。那我们如何使用LangChain如获取最新的结果呢,比如最新的一些新闻。这时候就要通过互联网,而LangChain解决这个问题的办法就是提供了一个代理人模块。
代理人模块可以运用众多的工具从而达到预期的结果。代理人的本质就是我们给定它一个任务,它会运用它内部的语言模型也就是LLM模块来决定这个任务所需要的行为以及实施这些行为的顺序。类似于人的思考过程。
假设要实现这样一个目标我需要有哪些步骤,以及我应该以什么样的顺序去完成这个步骤,在完成步骤的过程中,我能否用我现有的工具来实现我的目标。比方说如果我需要访问互联网:那我有没有访问互联网的工具、比如说我要做数学计算,那么我有没有可以做数学计算的工具,如果有的话他们就会选择使用工具,然后来使用工具之后。最后会处理使用工具得到的结果。然后开始进行下一个步骤的处理,就以此类推实现最终的目标,直至把你给他的任务给完成了。这就是代理人的整个的一个工作流程
案例:
代码语言:javascript复制# 首先先加载环境变量
%load_ext dotenv
%dotenv
# 初始化语言模型对象
from langchain.llms import OpenAI
llm = OpenAI()
# 加载代理工具对象 llm-math
from langchain.agents import initialize_agent
from langchain.agents import load_tools
tools = load_tools(["llm-math"], llm=llm)
# 初始化代理人
from langchain.agents import AgentType
agent = initialize_agent(
tools, llm=llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True
)
# 它的运算结果不是很准确,只能进行相对比较简单的运算
llm.predict("25的3.5次方是多少?")
agent.run("25的3.5次方是多少?")
# llm和agent虽然都能运算,但是llm只能运算相对比较简单的,就像本次案例llm运行的结果是错误的
如图:
源码
langchain-llm-proxy.ipynb
简单应用-聊天记录
它实际也是一个Chain,但是他着重关注的点是对话,运行方式也很简单,只需要提供一个语言模块即可。然后通过run()方法调用。
案例:
代码语言:javascript复制# 首先先加载环境变量
%load_ext dotenv
%dotenv
# 初始化语言模型对象
from langchain.llms import OpenAI
llm = OpenAI()
from langchain.chains import ConversationChain
conversation = ConversationChain(llm=llm, verbose=True)
conversation.run("你好呀!")
conversation.run("我今天领养了一只小猫哦!")
conversation.run("暂时还没有,有什么好的建议 ?")
图片:
image.png
源码:langchain-llm-chat.ipynb
如有需要本次demo源码的同学,请访问以下地址自行下载:
https://github.com/codingpaidaxing/langchain/tree/master/notebooks
LangChain相关文档
- 入门教程
https://python.langchain.com/docs/get_started
- 集成组件
https://python.langchain.com/docs/integrations/llms
- API文档
https://api.python.langchain.com/en/latest/api_reference.html
- 阿里、通义千问
https://python.langchain.com/docs/integrations/llms/tongyi
- 百度文心
https://js.langchain.com/docs/integrations/chat/baidu_wenxin
- 分类文档
https://python.langchain.com/docs/modules
LangChain文档截止目前的局限性
- LangChain的开发速度很快,文档内容经常跟不上(可能你需要去看它的release log)
- 文档结构的逻辑关系不是十分清晰,需要跳着看(可能需要做笔记然后联系上下文)
- 文档里面有一些重复出现的示例,影响阅读效率
- 文档里面的示例有的会在新版中消失,很不方便
源码
https://github.com/langchain-ai/langchain
至此,本次入门的教程到此结束了,感谢你的阅读。希望对你的学习有所帮助
如有问题,欢迎加微信交流:w714771310,备注- 技术交流 。或关注微信公众号【码上遇见你】。