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

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
Python vs. C:了解关键差异Python vs. C:了解关键差异Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python vs.C:您的项目选择哪种语言?Python vs.C:您的项目选择哪种语言?Apr 21, 2025 am 12:17 AM

选择Python还是C 取决于项目需求:1)如果需要快速开发、数据处理和原型设计,选择Python;2)如果需要高性能、低延迟和接近硬件的控制,选择C 。

达到python目标:每天2小时的力量达到python目标:每天2小时的力量Apr 20, 2025 am 12:21 AM

通过每天投入2小时的Python学习,可以有效提升编程技能。1.学习新知识:阅读文档或观看教程。2.实践:编写代码和完成练习。3.复习:巩固所学内容。4.项目实践:应用所学于实际项目中。这样的结构化学习计划能帮助你系统掌握Python并实现职业目标。

最大化2小时:有效的Python学习策略最大化2小时:有效的Python学习策略Apr 20, 2025 am 12:20 AM

在两小时内高效学习Python的方法包括:1.回顾基础知识,确保熟悉Python的安装和基本语法;2.理解Python的核心概念,如变量、列表、函数等;3.通过使用示例掌握基本和高级用法;4.学习常见错误与调试技巧;5.应用性能优化与最佳实践,如使用列表推导式和遵循PEP8风格指南。

在Python和C之间进行选择:适合您的语言在Python和C之间进行选择:适合您的语言Apr 20, 2025 am 12:20 AM

Python适合初学者和数据科学,C 适用于系统编程和游戏开发。1.Python简洁易用,适用于数据科学和Web开发。2.C 提供高性能和控制力,适用于游戏开发和系统编程。选择应基于项目需求和个人兴趣。

Python与C:编程语言的比较分析Python与C:编程语言的比较分析Apr 20, 2025 am 12:14 AM

Python更适合数据科学和快速开发,C 更适合高性能和系统编程。1.Python语法简洁,易于学习,适用于数据处理和科学计算。2.C 语法复杂,但性能优越,常用于游戏开发和系统编程。

每天2小时:Python学习的潜力每天2小时:Python学习的潜力Apr 20, 2025 am 12:14 AM

每天投入两小时学习Python是可行的。1.学习新知识:用一小时学习新概念,如列表和字典。2.实践和练习:用一小时进行编程练习,如编写小程序。通过合理规划和坚持不懈,你可以在短时间内掌握Python的核心概念。

Python与C:学习曲线和易用性Python与C:学习曲线和易用性Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

See all articles

热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

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

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具