首页 后端开发 Python教程 Python的Langchain的完整指南

Python的Langchain的完整指南

Feb 10, 2025 am 08:29 AM

LangChain:构建、实验和分析语言模型和智能体的强大Python库

A Complete Guide to LangChain in Python

核心要点:

  • LangChain是一个Python库,它简化了语言模型和智能体的创建、实验和分析过程,为自然语言处理提供了广泛的功能。
  • 它允许创建多功能的智能体,这些智能体能够理解和生成文本,并可以配置特定的行为和数据源来执行各种与语言相关的任务。
  • LangChain提供三种类型的模型:大型语言模型(LLM)、聊天模型和文本嵌入模型,每种模型都为语言处理任务提供了独特的功能。
  • 它还提供了一些功能,例如将大型文本分割成易于管理的块,通过链将多个LLM功能链接起来以执行复杂的任务,以及与OpenAI以外的各种LLM和AI服务集成。

LangChain是一个功能强大的Python库,使开发人员和研究人员能够创建、实验和分析语言模型和智能体。它为自然语言处理(NLP)爱好者提供了一套丰富的功能,从构建自定义模型到高效地操作文本数据。在本综合指南中,我们将深入探讨LangChain的基本组件,并演示如何在Python中利用其强大功能。

环境设置:

要学习本文,请创建一个新文件夹,并使用pip安装LangChain和OpenAI:

pip3 install langchain openai
登录后复制
登录后复制
登录后复制
登录后复制

智能体(Agents):

在LangChain中,智能体是一个能够理解和生成文本的实体。这些智能体可以配置特定的行为和数据源,并经过训练以执行各种与语言相关的任务,这使得它们成为各种应用的多功能工具。

创建LangChain智能体:

智能体可以配置为使用“工具”来收集所需的数据并制定良好的响应。请看下面的示例。它使用Serp API(一个互联网搜索API)来搜索与问题或输入相关的信息,并使用这些信息来做出响应。它还使用llm-math工具执行数学运算——例如,转换单位或查找两个值之间的百分比变化:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/

OpenAI.api_key = "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"
llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("How much energy did wind turbines produce worldwide in 2022?")
登录后复制
登录后复制
登录后复制
登录后复制

如你所见,在完成所有基本的导入和初始化LLM (llm = OpenAI(model="gpt-3.5-turbo", temperature=0))之后,代码使用tools = load_tools(["serpapi", "llm-math"], llm=llm)加载智能体工作所需的工具。然后,它使用initialize_agent函数创建智能体,为其提供指定的工具,并为其提供ZERO_SHOT_REACT_DESCRIPTION描述,这意味着它将不记得以前的问题。

智能体测试示例1:

让我们用以下输入来测试这个智能体:

<code>"How much energy did wind turbines produce worldwide in 2022?"</code>
登录后复制
登录后复制
登录后复制
登录后复制

A Complete Guide to LangChain in Python

如你所见,它使用了以下逻辑:

  • 使用Serp互联网搜索API搜索“wind turbine energy production worldwide 2022”
  • 分析最佳结果
  • 获取任何相关的数字
  • 使用llm-math工具将906吉瓦转换为焦耳,因为我们要求的是能量,而不是功率

智能体测试示例2:

LangChain智能体不仅限于搜索互联网。我们可以将几乎任何数据源(包括我们自己的数据源)连接到LangChain智能体,并向其提出有关数据的问题。让我们尝试创建一个在CSV数据集上训练的智能体。

从Kaggle上的SHIVAM BANSAL处下载此Netflix电影和电视节目数据集,并将其移动到你的目录中。现在将此代码添加到一个新的Python文件中:

pip3 install langchain openai
登录后复制
登录后复制
登录后复制
登录后复制

此代码调用create_csv_agent函数并使用netflix_titles.csv数据集。下图显示了我们的测试。

A Complete Guide to LangChain in Python

如上所示,其逻辑是在cast列中查找所有“Christian Bale”的出现。

我们还可以像这样创建一个Pandas DataFrame智能体:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/

OpenAI.api_key = "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"
llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("How much energy did wind turbines produce worldwide in 2022?")
登录后复制
登录后复制
登录后复制
登录后复制

如果我们运行它,我们将看到如下所示的结果。

A Complete Guide to LangChain in Python A Complete Guide to LangChain in Python

这些只是一些例子。我们可以将几乎任何API或数据集与LangChain一起使用。

模型(Models):

LangChain中有三种类型的模型:大型语言模型(LLM)、聊天模型和文本嵌入模型。让我们通过一些示例来探索每种类型的模型。

大型语言模型(Language Model):

LangChain提供了一种在Python中使用大型语言模型的方法,以根据文本输入生成文本输出。它不像聊天模型那样复杂,最适合简单的输入-输出语言任务。以下是用OpenAI的示例:

<code>"How much energy did wind turbines produce worldwide in 2022?"</code>
登录后复制
登录后复制
登录后复制
登录后复制

如上所示,它使用gpt-3.5-turbo模型为提供的输入(“Come up with a rap name for Matt Nikonorov”)生成输出。在这个例子中,我将温度设置为0.9,以使LLM更具创造性。它想出了“MC MegaMatt”。我给它打9/10分。

聊天模型(Chat Model):

让LLM模型想出说唱名字很有趣,但如果我们想要更复杂的答案和对话,我们需要使用聊天模型来提升我们的水平。从技术上讲,聊天模型与大型语言模型有何不同?用LangChain文档中的话说:

聊天模型是大型语言模型的一种变体。虽然聊天模型在后台使用大型语言模型,但它们使用的接口略有不同。它们不使用“文本输入,文本输出”的API,而是使用“聊天消息”作为输入和输出的接口。

这是一个简单的Python聊天模型脚本:

pip3 install langchain openai
登录后复制
登录后复制
登录后复制
登录后复制

如上所示,代码首先发送一个SystemMessage,并告诉聊天机器人要友好和非正式,之后它发送一个HumanMessage,告诉聊天机器人说服我们Djokovich比Federer更好。

如果你运行这个聊天机器人模型,你将看到如下所示的结果。

A Complete Guide to LangChain in Python

嵌入(Embeddings):

嵌入提供了一种将文本块中的单词和数字转换为向量的方法,然后可以将这些向量与其他单词或数字关联起来。这听起来可能很抽象,所以让我们来看一个例子:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/

OpenAI.api_key = "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"
llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("How much energy did wind turbines produce worldwide in 2022?")
登录后复制
登录后复制
登录后复制
登录后复制

这将返回一个浮点数列表:[0.022762885317206383, -0.01276398915797472, 0.004815981723368168, -0.009435392916202545, 0.010824492201209068]。这就是嵌入的样子。

嵌入模型的用例:

如果我们想训练一个聊天机器人或LLM来回答与我们的数据或特定文本样本相关的问题,我们需要使用嵌入。让我们创建一个简单的CSV文件(embs.csv),其中包含一个“text”列,其中包含三条信息:

<code>"How much energy did wind turbines produce worldwide in 2022?"</code>
登录后复制
登录后复制
登录后复制
登录后复制

现在,这是一个脚本,它将使用嵌入来获取问题“Who was the tallest human ever?”并在CSV文件中找到正确的答案:

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain.agents import create_csv_agent
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

agent = create_csv_agent(
    OpenAI(temperature=0),
    "netflix_titles.csv",
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

agent.run("In how many movies was Christian Bale casted")
登录后复制
登录后复制

如果我们运行此代码,我们将看到它输出“Robert Wadlow was the tallest human ever”。该代码通过获取每条信息的嵌入并找到与问题“Who was the tallest human ever?”的嵌入最相关的嵌入来找到正确的答案。嵌入的力量!

块(Chunks):

LangChain模型不能同时处理大型文本并使用它们来生成响应。这就是块和文本分割的用武之地。让我们来看两种在将文本数据馈送到LangChain之前将其分割成块的简单方法。

按字符分割块:

为了避免块中的突然中断,我们可以通过在换行符或双换行符的每次出现处分割文本,来按段落分割文本:

from langchain.agents import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain.llms import OpenAI
import pandas as pd
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"
df = pd.read_csv("netflix_titles.csv")

agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)

agent.run("In what year were the most comedy movies released?")
登录后复制
登录后复制

递归分割块:

如果我们想严格地按一定长度的字符分割文本,我们可以使用RecursiveCharacterTextSplitter:

from langchain.llms import OpenAI
import os
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

llm = OpenAI(model="gpt-3.5-turbo", temperature=0.9)
print(llm("Come up with a rap name for Matt Nikonorov"))
登录后复制

块大小和重叠:

在查看上面的示例时,你可能想知道块大小和重叠参数的确切含义,以及它们对性能的影响。这可以用两点来解释:

  • 块大小决定每个块中字符的数量。块大小越大,块中的数据越多,LangChain处理它并生成输出所需的时间就越长,反之亦然。
  • 块重叠是在块之间共享信息的内容,以便它们共享一些上下文。块重叠越高,我们的块就越冗余,块重叠越低,块之间共享的上下文就越少。通常,良好的块重叠是块大小的10%到20%,尽管理想的块重叠因不同的文本类型和用例而异。

链(Chains):

链基本上是多个LLM功能链接在一起以执行更复杂的任务,而这些任务无法通过简单的LLM输入->输出方式来完成。让我们来看一个很酷的例子:

pip3 install langchain openai
登录后复制
登录后复制
登录后复制
登录后复制

此代码将两个变量输入到其提示中,并制定一个有创意的答案(temperature=0.9)。在这个例子中,我们要求它为一部关于数学的恐怖电影想出一个好标题。运行此代码后的输出是“The Calculating Curse”,但这并没有真正显示链的全部功能。

让我们来看一个更实际的例子:

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
os.environ["SERPAPI_API_KEY"] = "YOUR_SERP_API_KEY" # 获取你的Serp API密钥:https://serpapi.com/

OpenAI.api_key = "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"
llm = OpenAI(model="gpt-3.5-turbo", temperature=0)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("How much energy did wind turbines produce worldwide in 2022?")
登录后复制
登录后复制
登录后复制
登录后复制

这段代码可能看起来令人困惑,所以让我们逐步讲解。

这段代码读取Nas(嘻哈艺术家)的简短传记,并从文本中提取以下值,并将它们格式化为JSON对象:

  • 艺术家的姓名
  • 艺术家的音乐类型
  • 艺术家的首张专辑
  • 艺术家首张专辑的发行年份

在提示中,我们还指定了“Make sure to answer in the correct format”,以便我们始终以JSON格式获得输出。这是此代码的输出:

<code>"How much energy did wind turbines produce worldwide in 2022?"</code>
登录后复制
登录后复制
登录后复制
登录后复制

通过向create_structured_output_chain函数提供JSON模式,我们使链将其输出放入JSON格式。

超越OpenAI:

尽管我一直使用OpenAI模型作为LangChain不同功能的示例,但它并不局限于OpenAI模型。我们可以将LangChain与许多其他LLM和AI服务一起使用。(这是LangChain可集成LLM的完整列表。)

例如,我们可以将Cohere与LangChain一起使用。这是LangChain Cohere集成的文档,但为了提供一个实际示例,在使用pip3 install cohere安装Cohere之后,我们可以使用LangChain和Cohere编写一个简单的问答代码,如下所示:

from langchain.llms import OpenAI
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain.agents import create_csv_agent
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"

agent = create_csv_agent(
    OpenAI(temperature=0),
    "netflix_titles.csv",
    verbose=True,
    agent_type=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
)

agent.run("In how many movies was Christian Bale casted")
登录后复制
登录后复制

上面的代码产生以下输出:

from langchain.agents import create_pandas_dataframe_agent
from langchain.chat_models import ChatOpenAI
from langchain.agents.agent_types import AgentType
from langchain.llms import OpenAI
import pandas as pd
import os

os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"
df = pd.read_csv("netflix_titles.csv")

agent = create_pandas_dataframe_agent(OpenAI(temperature=0), df, verbose=True)

agent.run("In what year were the most comedy movies released?")
登录后复制
登录后复制

结论:

在本指南中,你已经看到了LangChain的不同方面和功能。掌握了这些知识后,你就可以利用LangChain的功能来进行NLP工作,无论你是研究人员、开发人员还是爱好者。

你可以在GitHub上找到包含本文所有图片和Nas.txt文件的仓库。

祝你使用Python中的LangChain进行编码和实验愉快!

以上是Python的Langchain的完整指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles