LangChain:快速构建自然语言处理应用程序的工具
创始人
2025-05-31 09:45:38
0

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

LangChain

(封面图由文心一格生成)

LangChain:快速构建自然语言处理应用程序的工具

LangChain 是一个用于构建端到端语言模型应用的Python框架。它提供了一系列模块,这些模块可以组合在一起,用于创建复杂的应用程序,也可以单独用于简单的应用程序。在本篇博客中,我们将重点介绍以下几个方面:

  • 安装和环境设置
  • 构建语言模型应用
  • Prompt Templates:管理LLMs的提示
  • Chains:组合LLMs和Prompt Templates以进行多步骤工作流
  • Agents:根据用户输入动态调用Chains
  • Memory:为Chains和Agents添加状态

1. 安装和环境设置

首先,我们需要使用以下命令安装LangChain:

pip install langchain

使用LangChain通常需要与一个或多个模型提供程序、数据存储、API等集成。在本例中,我们将使用OpenAI的API,因此我们首先需要安装他们的SDK:

pip install openai

然后,在终端中设置环境变量:

export OPENAI_API_KEY="..."

或者,可以从Jupyter notebook(或Python脚本)中执行此操作:

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

2. 构建语言模型应用

有了安装的LangChain和设置的环境变量,我们现在可以开始构建语言模型应用了。LangChain提供了许多模块,用于构建语言模型应用。这些模块可以组合在一起,用于创建复杂的应用程序,也可以单独用于简单的应用程序。

LLMs:从语言模型获取预测
LangChain的最基本的构建块是在一些输入上调用LLM。让我们通过一个简单的例子来演示如何实现这一点。为此,让我们假装我们正在构建一个服务,根据公司的产品生成公司名称。

首先,我们需要导入LLM包装器:

from langchain.llms import OpenAI

然后,我们可以使用任何参数初始化包装器。在这个例子中,我们可能希望输出更随机,因此我们将使用高temperature进行初始化:

llm = OpenAI(temperature=0.9)

现在我们可以在一些输入上调用它!

text = "What would be a good company name for a company that makes colorful socks?"
print(llm(text))

3. Prompt Templates:管理LLMs的提示

调用LLM是一个很好的第一步,但这只是个开始。通常,在应用程序中使用LLM时,不会直接将用户输入直接发送到LLM。相反,你可能会获取用户输入并构造一个提示,然后将提示发送到LLM中。
例如,在上一个例子中,我们传递的文本是硬编码的,要求为制造彩色袜子的公司取一个名称。在这个想象的服务中,我们想要做的是仅取用户描述公司所做的事情,然后使用该信息格式化提示。

使用LangChain可以轻松实现这一点!

首先定义提示模板:

from langchain.prompts import PromptTemplateprompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)

现在我们来看看它是如何工作的!我们可以调用.format方法进行格式化。

print(prompt.format(product="colorful socks"))

4. Chains:将LLMs和Prompts结合在多步骤工作流中

到目前为止,我们已经单独使用Prompt Template和LLM基元。但是,一个真正的应用程序不仅仅是一个原语,而是由它们的组合构成的。

在LangChain中,一个链由链接组成,这些链接可以是LLM、Prompt Template或其他链。

LLMChain是最核心的链类型,它由Prompt Template和LLM组成。

扩展上一个例子,我们可以构建一个LLMChain,该链接受用户输入,使用Prompt Template格式化它,然后将格式化的响应传递给LLM。

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAIllm = OpenAI(temperature=0.9)
prompt = PromptTemplate(input_variables=["product"],template="What is a good name for a company that makes {product}?",
)

我们现在可以创建一个非常简单的链,该链将获取用户输入,使用Prompt Template对其进行格式化,然后将其发送到LLM:

from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

现在我们可以运行该链,只需指定产品即可!

chain.run("colorful socks")
# -> '\n\nSocktastic!'

5. Agents:根据用户输入动态调用Chains

到目前为止,我们已经看到的链都是按照预定顺序运行的。Agents不再如此:它们使用LLM确定要采取的动作及其顺序。一个动作可以是使用工具并观察其输出,或者返回给用户。

如果正确使用Agents,它们可以非常强大。在本教程中,我们通过最简单、最高级别的API向你展示如何轻松使用代理。

为了加载代理,你应该了解以下概念:

Tool: 执行特定任务的功能。这可以是类似Google搜索、数据库查找、Python REPL、其他链的东西。工具的接口目前是期望有一个字符串作为输入,输出一个字符串的函数。
LLM: 驱动代理的语言模型。

Agent: 要使用的代理。这应该是引用支持代理类的字符串。因为本笔记本专注于最简单、最高级别的API,所以仅涵盖使用标准支持的代理。如果要实现自定义代理,请参见自定义代理的文档(即将推出)。
代理: 支持的代理及其规格的列表,请参见此处。

工具: 预定义工具及其规格的列表,请参见此处。

对于此示例,你还需要安装SerpAPI Python包。

pip install google-search-results

并设置适当的环境变量。

import os
os.environ["SERPAPI_API_KEY"] = "..."

现在我们可以开始!

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.llms import OpenAI# 首先,让我们加载我们要用来控制代理的语言模型。
llm = OpenAI(temperature=0)# 接下来,让我们加载一些要使用的工具。请注意,`llm-math`工具使用LLM,因此我们需要将其传递给它。
tools = load_tools(["serpapi", "llm-math"], llm=llm)# 最后,让我们使用工具、语言模型和我们想要使用的代理类型来初始化一个代理。
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)# 现在让我们测试一下!
agent.run("Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?")
Entering new AgentExecutor chain...I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.
Action: Search
Action Input: "Olivia Wilde boyfriend"
Observation: Jason Sudeikis
Thought: I need to find out Jason Sudeikis' age
Action: Search
Action Input: "Jason Sudeikis age"
Observation: 47 years
Thought: I need to calculate 47 raised to the 0.23 power
Action: Calculator
Action Input: 47^0.23
Observation: Answer: 2.4242784855673896Thought: I now know the final answer
Final Answer: Jason Sudeikis, Olivia Wilde's boyfriend, is 47 years old and his age raised to the 0.23 power is 2.4242784855673896.
> Finished AgentExecutor chain.
"Jason Sudeikis, Olivia Wilde's boyfriend, is 47 years old and his age raised to the 0.23 power is 2.4242784855673896."

6. Memory:向链和代理添加状态

到目前为止,我们所讨论的所有链和代理都是无状态的。但通常,你可能希望链或代理具有一些“记忆”概念,以便它们可以记住有关其先前交互的信息。
这是在设计聊天机器人时最明显和简单的例子-你希望它记住以前的消息,以便它可以使用上下文来进行更好的对话。这将是一种“短期记忆”。在更复杂的一面,你可以想象链/代理随时间记住关键信息-这将是一种“长期记忆”。关于后者的更具体想法,请参见此出色的论文。

LangChain提供了几个专门为此目的创建的链。本笔记本介绍了使用其中一个链(ConversationChain)的两种不同类型的内存。

默认情况下,ConversationChain具有一种简单类型的内存,该内存记住所有先前的输入/输出并将它们添加到传递的上下文中。让我们看看如何使用此链(将verbose=True设置为我们可以看到提示)。

from langchain import OpenAI, ConversationChainllm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)conversation.predict(input="Hi there!")
> Entering new chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Current conversation:Human: Hi there!
AI:> Finished chain.
' Hello! How are you today?'
conversation.predict(input="I'm doing well! Just having a conversation with an AI.")
> Entering new chain...
Prompt after formatting:
The following is a friendly conversation between a human and an AI. The AI is talkative and provides lots of specific details from its context. If the AI does not know the answer to a question, it truthfully says it does not know.Current conversation:Human: Hi there!
AI:  Hello! How are you today?
Human: I'm doing well! Just having a conversation with an AI.
AI:> Finished chain.
" That's great! What would you like to talk about?"

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

相关内容

热门资讯

荠菜是营养丰富的野菜 荠菜,又叫地地菜、芨菜、香善菜等。它含有丰富的营养。据化学分析:每公斤荠菜中约含蛋白质42.4克,糖...
原创 章... 2026年年初,互联网行业发生了两件很有意思的事。 一件是章泽天做了档播客,取名“小天章”。第一期视...
餐谋长 | 一个饮食习惯悄悄增... “全家围坐共餐”是多数家庭的生活常态,不少人将其视为团圆的象征,却忽视了不分餐、共用餐具带来的健康隐...
原创 朋... 在晨曦初破的宁静中,我们迎来了新的一天。如同诗人般,我愿以文字为笔,绘出一幅幅清晨正能量的经典画面。...
爱芯元智通过港交所聆讯 有望成... 本报讯 (记者梁傲男)1月25日,中国边缘AI芯片领军企业爱芯元智半导体股份有限公司(以下简称“爱芯...
002155,披露重大资产重组... 湖南黄金拟收购黄金天岳100%股权及中南冶炼100%股权,进一步完善产业布局。 同时,公司拟向不超过...
德力佳拟50亿元投建10兆瓦以... 【大河财立方消息】1月25日,德力佳传动科技(江苏)股份有限公司(简称德力佳)公告称,公司与无锡宛山...
特朗普的“中选经济强心针”:超... 美国消费者即将迎来一场规模空前的“现金雨”。 据追风交易台,根据摩根士丹利1月23日发布的最新研报,...
2025年IPO数据报告-投中... 2025 年中国企业 IPO 市场呈现止跌回升态势,全球范围内 294 家中国企业成功上市,IPO ...
山西银行锚定未来战略定位和经营... 文 | 中国金融网(CFN) 黄瑾 2026年1月下旬,山西银行密集召开2026年度工作会议、202...
思林杰并购告吹背后:对价砍了又... 深圳商报·读创客户端记者 梁佳彤 1月25日,思林杰(688115)发布公告称,公司分别召开第二届...
原创 昨... 特朗普批评加拿大被中国“吞食”,称关税将征收100%并嘲讽其“州长”,暴露霸权主义虚伪。 昨晚,特...
威尔鑫点金·׀ 美元因烽火戏诸... 美元因烽火戏诸侯遭遇重锤 金银再续强势逼空 2026年01月25日 威尔鑫投资咨询研究中心 (文...
钻石的眼泪,白银的沉默:当克拉... 钻戒的浪漫,是一场昂贵的误会? 那颗闪闪发光的石头,承载了多少海誓山盟。你以为买下的是一份永恒,一份...
贾国龙最新发声!“将回归一线,... 据媒体报道,西贝餐饮集团创始人贾国龙近日接受专访时表示,将回归一线、聚焦主业,不再打造个人IP。 贾...
阿里“平头哥”上市猜想引关注背... 上海浦东新区张江人工智能产业园内,一座灰橙交融的建筑静静矗立,平头哥半导体有限公司(以下简称平头哥)...
利好!千亿龙头完成金矿收购! 本报记者 肖艳青 1月25日晚间,洛阳栾川钼业集团股份有限公司(以下简称“洛阳钼业”)公告称,公司于...
原创 短... 刘阿姨大约从一年前开始断断续续出现腹痛、便秘症状,开始她没有当回事,觉得是胃肠道功能不好导致的,饮食...
旷达科技集团股份有限公司 第七... 证券代码:002516 证券简称:旷达科技 公告编号:2026-009 旷达科技集团股份有限公司 第...
原创 申... 离婚十三年,申通快递实控人被前夫追索分割财产。 作者 | 于婞 编辑丨高岩 来源 | 野马财经 19...