LangChain入门指南-大语言模型应用驱动框架

本文介绍了如何使用LangChain库与大语言模型(LLM)进行交互,包括PromptTemplate的使用、LLMChain的组合、代理(如Google搜索和OpenAI)的动态调用,以及如何添加内存功能实现聊天模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

首先需要安装LangChain:

使用LangChain需要与一个或多个模型提供程序、数据存储、API集成。

pip install langchain
# or
conda install langchain -c conda-forge

然后我们需要在终端设置环境变量

export OPENAI_API_KEY="..."

一、提示模版(PromptTemplate)

通常在应用程序中使用 LLM 时,不会将用户输入直接发送到 LLM。相反,您可能接受用户输入并构造一个提示符,然后将其发送给 LLM。使用LangChain,这个事情变得很简单。

定义提示模版:

from langchain.prompts import PromptTemplate
 
prompt = PromptTemplate(
    input_variables=["product"],
    template="What is a good name for a company that makes {product}?",
)
#调用.format 方法完成格式化
print(prompt.format(product="colorful socks"))
#输出为:What is a good name for a company that makes colorful socks?

二、链:在多步骤的工作流中组合LLM和提示(prompt)

真正的程序是PromptTemplate和LLM的组合。在LangChain中,链是由链组成的,可以是LLM这样的原始链,也可以是其他链。最核心的链类型是LLMChain,它由 PromptTemplate 和 LLM 组成。

它接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给LLM:

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

#现在我们可以创建一个非常简单的链,它接受用户的输入,用它格式化提示符,然后将它发送到LLM:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)

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

这是比较简单的链类型之一。

三、代理Agent:基于用户输入的动态调用链

到目前为止,我们看到的链运行在一个预先确定的顺序。

但是代理不再这样做: 它们使用 LLM 来确定要执行哪些操作以及按照什么顺序执行。

操作可以使用工具并观察其输出,也可以返回给用户。

如果使用得当,效果可以非常强大。

在本教程中,我们将向您展示如何通过最简单、最高级别的 API 轻松使用代理。

为了运好代理,您应该理解以下概念:

  • 工具(tools): 执行特定任务的功能。这可以是: Google 搜索、数据库查找、 Python REPL、其他链。工具的接口目前是一个函数,预计将有一个字符串作为输入,一个字符串作为输出。
  • 大语言模型(LLM): 为代理提供动力的语言模型。
  • 代理(agents): 要使用的代理。这应该是引用支持代理类的字符串。因为本教程主要关注最简单、最高级别的 API,所以它只涉及使用标准支持的代理。如果要实现自定义代理,请参阅自定义代理的文档(即将发布)。
#需要安装第三方包
#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.agents import AgentType
from langchain.llms import OpenAI
 
llm = OpenAI(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("What was the high temperature in SF yesterday in Fahrenheit? What is that number raised to the .023 power?")

四、内存:向链和代理添加状态

到目前为止,我们经历过的所有工具和代理都是无状态的的。但是通常,您可能希望链或代理具有某种“内存”概念,以便它可以记住关于其以前的交互的信息。最简单明了的例子就是在设计一个聊天机器人时——你想让它记住之前的消息,这样它就可以利用这些消息的上下文来进行更好的对话。

这是一种“短期记忆”。在更复杂的一面,你可以想象一个链条/代理随着时间的推移记住关键信息——这将是一种形式的“长期记忆”。

LangChain 提供了几个专门为此目的创建的链。 本教程使用其中一个链(ConversationChain)和两种不同类型的内存来完成操作。默认情况下,ConversationChain有一个简单的内存类型,它记住所有的输入和输出,并将他们添加到传递的上下文中。

让我们看一下如何使用这个链(设置 verbose=True,这样我们就可以看到提示符)。

from langchain import OpenAI, ConversationChain
llm = OpenAI(temperature=0)
conversation = ConversationChain(llm=llm, verbose=True)
output = conversation.predict(input="Hi there!")
print(output)

output = conversation.predict(input="I'm doing well! Just having a conversation with an AI.")
print(output)

五、构建语言模型应用程序:聊天模型

从聊天模型获取消息完成:

您可以通过向聊天模型传递一条或多条消息来完成聊天。

响应将是一条消息。

LangChain 中当前支持的消息类型是 AIMessage , HumanMessage , SystemMessage , 和 ChatMessage – ChatMessage 接受任意角色参数。大多数时候,您只需要处理 HumanMessage , AIMessage , 和 SystemMessage .

from langchain.chat_models import ChatOpenAI
from langchain.schema import (
    AIMessage,
    HumanMessage,
    SystemMessage
)
chat = ChatOpenAI(temperature=0)

chat([HumanMessage(content="Translate this sentence from English to French. I love programming.")])
# -> AIMessage(content="J'aime programmer.", additional_kwargs={})

您还可以为 OpenAI 的 gpt-3.5-turbo 和 gpt-4型号传递多条消息。

messages = [
    SystemMessage(content="You are a helpful assistant that translates English to French."),
    HumanMessage(content="Translate this sentence from English to French. I love programming.")
]
chat(messages)
# -> AIMessage(content="J'aime programmer.", additional_kwargs={})

更进一步,使用generate为多组消息完成生成。这将返回一个带有附加message参数的LLMResult。

batch_messages = [
    [
        SystemMessage(content="You are a helpful assistant that translates English to French."),
        HumanMessage(content="Translate this sentence from English to French. I love programming.")
    ],
    [
        SystemMessage(content="You are a helpful assistant that translates English to French."),
        HumanMessage(content="Translate this sentence from English to French. I love artificial intelligence.")
    ],
]
result = chat.generate(batch_messages)
 
#查看token
result.llm_output['token_usage']
# -> {'prompt_tokens': 71, 'completion_tokens': 18, 'total_tokens': 89}
 

后续其他内容会不定时发布,谢谢大家!

### 关于LangChain的介绍 LangChain是一个用于开发由大型语言模型(LLM)驱动应用框架,旨在简化与这些强大模型交互的过程并加速应用程序的创建。该框架不仅支持多种流行的预训练模型,还提供了一系列实用工具来增强用户体验和效率[^1]。 对于希望利用Python环境工作的开发者而言,官方文档提供了详尽的指南,涵盖了从基础安装到高级特性的各个方面;而对于偏好Java生态系统的程序员来说,则有专门针对Quarkus和Spring Boot优化过的版本——即LangChain4j可供选用[^2]。 ### 安装及初步配置 为了开始使用LangChain,在本地环境中完成必要的设置至关重要: #### Python版安装命令如下所示: ```bash pip install langchain ``` 之后可以通过导入langchain模块并在项目里实例化所需组件来进行进一步操作。 #### 对于Java开发者,可以采用以下方式引入依赖项(Maven为例): ```xml <dependency> <groupId>com.langchain</groupId> <artifactId>langchain4j-core</artifactId> <version>x.y.z</version> <!-- 替换成实际版本号 --> </dependency> ``` 注意替换`x.y.z`为具体发行版号码,并按照个人需求调整其他参数以适应特定应用场景的要求。 ### 创建首个应用实例 下面给出一段简单的代码片段作为入门指导,展示了如何加载一个预先存在的对话历史记录文件并与之互动: ```python from langchain.chains import ConversationChain conversation = ConversationChain() history_file_path = 'path/to/conversation_history.json' if os.path.exists(history_file_path): with open(history_file_path, 'r') as f: conversation.load_memory(f.read()) response = conversation.predict(input="你好!") print(response) with open(history_file_path, 'w') as f: f.write(conversation.dump_memory()) ``` 这段脚本首先初始化了一个会话链对象,接着尝试读取之前保存下来的交流数据以便延续之前的讨论上下文关系。当接收到新的输入时,它能够据此生成回应并将更新后的状态重新写入磁盘存储中去。 ### 调用国内大模型服务 考虑到不同地区可能存在的访问限制以及性能考量因素,LangChain同样允许连接至本土化的解决方案提供商处获取更佳的服务质量保障。例如在中国境内运行的应用程序可以选择对接阿里云、百度等平台所提供的API接口实现无缝切换而不必担心跨国网络延迟等问题带来的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值