使用 LCEL 构建简单的 LLM 应用
在快速入门中,我们将向您展示如何使用 LangChain 构建简单的 LLM 应用程序。该应用程序会将英语文本翻译成另一种语言。这是一个相对简单的LLM应用。 这只是一个LLM通话加上一些提示。尽管如此,这仍然是开始使用 LangChain 的好方法 - 只需一些提示语和 LLM 调用就可以构建很多功能!
阅读本教程后,您将对以下内容有一个高层次的理解:
- 使用语言模型
- 使用 PromptTemplates 和 OutputParsers
- 使用 LangChain 表达式语言 (LCEL) 把组件链接在一起
- 使用 LangSmith 调试跟踪你的应用程序
- 使用 LangServe 部署你的应用
让我们深入了解一下!
设置
Jupyter Notebook
本指南(以及文档中的大多数其他指南)使用 Jupyter Notebook,并假设读者也使用 Jupyter Notebook。 Jupyter Notebook非常适合学习如何使用 LLM 系统,因为事情经常可能会出错(意外输出、API 关闭等),而在交互式环境中阅读指南是更好地理解它们的好方法。
本教程和其他教程可能最方便地在 Jupyter Notebook 中运行。有关如何安装的说明,请参阅 此处。
安装
安装LangChain运行
- Pip
- Conda
pip install langchain
conda install langchain -c conda-forge
LangSmith
您使用 LangChain 构建的许多应用程序将包含多个步骤,并多次调用 LLM,随着这些应用变得越来越复杂,能够检查您的链或智能体内部到底发生了什么变得至关重要。 最好的方法是使用 LangSmith
在上面的链接注册后,请确保设置环境变量以开始记录跟踪:
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."
或者,如果在代码编辑器中,您可以使用以下命令设置它们:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
使用语言模型
首先,让我们学习如何单独使用语言模型。 LangChain支持多种不同的语言模型,您可以互换使用 - 在下面选择您想要使用的一种!
#openai Azure
pip install -qU langchain-openai
#Anthropic
pip install -qU langchain-anthropic
#Google
pip install -qU langchain-google-vertexai
#Cohere
pip install -qU langchain-cohere
#...
import getpass
import os
os.environ["COHERE_API_KEY"] = getpass.getpass()
from langchain_cohere import ChatCohere
model = ChatCohere(model="command-r-plus")
我们先直接使用模型。 ChatModels 是 LangChain“Runnables”的实例,这意味着它们公开了一个标准接口来与之交互。为了简单地调用模型,我们可以将消息列表传递给 .invoke 方法。
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
API 参考: HumanMessage | SystemMessage
AIMessage(content='ciao!', response_metadata={'token_usage': {'completion_tokens': 3, 'prompt_tokens': 20, 'total_tokens': 23}, 'model_name': 'gpt-4', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-fc5d7c88-9615-48ab-a3c7-425232b562c5-0')
如果我们启用了 LangSmith,我们可以看到此运行已记录到 LangSmith,并且可以看到 LangSmith 跟踪
OutputParsers 输出解析器
注意,模型的响应是 AIMessage。其中包含字符串响应以及有关响应的其他元数据。通常我们可能只想处理字符串响应。我们可以使用一个简单的输出解析器来解析这个响应。
我们首先导入简单的输出解析器
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
API 参考: StrOutputParser
使用它的一种方法是单独使用它。例如,我们可以保存语言模型调用的结果,然后将其传递给解析器。
result = model.invoke(messages)
parser.invoke(result)
'Ciao!'
更常见的是,我们可以使用此输出解析器“链接”模型。这意味着该输出解析器将在该链中每次被调用。该链采用语言模型的输入类型(字符串或消息列表)并返回输出解析器的输出类型(字符串)。
我们可以使用 | 轻松创建链操作符。 | 操作符在 LangChain 中使用运算符将两个元素组合在一起。
chain = model | parser
chain.invoke(messages)
'Ciao!'
如果我们现在看看 LangSmith,我们可以看到该链有两个步骤:首先调用语言 模型,然后将结果传递到输出解析器。我们可以看到 LangSmith 跟踪
Prompt Templates
现在我们将消息列表直接传递到语言模型中。这个消息列表从哪里来?通常,它是由用户输入和应用程序逻辑的组合构建的。此应用程序逻辑通常获取原始用户输入并将其转换为准备传递到语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。
PromptTemplates是LangChain中的一个概念,用于协助这种转变
它们接收原始用户输入并返回准备传给语言模型的数据(提示)。
让我们在这里创建一个 PromptTemplate。它将接受两个用户变量:
- language: 要翻译成的语言
- text: 被翻译的语言
from langchain_core.prompts import ChatPromptTemplate