系列文章索引
LangChain教程 - 系列文章
在本教程中,我们将展示如何使用 LangChain 构建一个简单的 LLM 应用程序。这个应用将把文本从英语翻译成其他语言。虽然这是一个相对简单的应用程序——仅涉及单个 LLM 调用和一些提示,但它是学习 LangChain 的绝佳入门方式。很多功能可以通过提示和 LLM 调用轻松实现!
通过本教程,你将了解以下内容:
- 如何使用语言模型
- 如何使用 PromptTemplates 和 OutputParsers
- 如何使用 LangChain 表达式语言(LCEL)将组件连接在一起
- 如何使用 LangSmith 调试和跟踪应用程序
- 如何使用 LangServe 部署应用程序
让我们开始吧!
环境准备
Jupyter Notebook
本教程(以及其他大多数文档中的教程)都使用 Jupyter Notebook。Jupyter Notebook 是学习如何处理 LLM 系统的理想工具,因为很多时候事情可能会出错(如意外的输出或 API 错误),通过交互式环境进行学习能帮助你更好地理解这些问题。
在 Jupyter Notebook 中运行本教程最为方便。你可以查看如何安装 Jupyter Notebook。
安装
要安装 LangChain,请运行以下命令:
pip install langchain
更多详细信息请参阅我们的安装指南。
LangSmith
你构建的许多 LangChain 应用程序都包含多个步骤和 LLM 调用。随着应用的复杂性增加,能够深入检查链条或代理内部发生的事情变得至关重要。LangSmith 是实现这一目的的最佳工具。
注册后,设置环境变量以开始记录链条追踪:
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."
在 Notebook 中,你也可以使用以下代码设置环境变量:
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
使用语言模型
首先,我们学习如何直接使用语言模型。LangChain 支持多种语言模型,你可以根据需求选择使用。以下是 OpenAI 模型的示例。
安装 OpenAI 包
pip install -qU langchain-openai
配置 OpenAI API 密钥
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
初始化模型
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")
接下来,我们直接调用模型。ChatModels
是 LangChain 中 “Runnable” 的实例,提供了标准接口。可以通过传递消息列表给 .invoke
方法直接调用模型。
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
model.invoke(messages)
输出示例:
AIMessage(content='ciao!', ...)
OutputParsers
响应结果是一个 AIMessage
对象,包含生成的字符串响应以及其他元数据。我们通常只需要处理字符串响应。可以通过 OutputParser
提取此响应。
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
result = model.invoke(messages)
parser.invoke(result)
输出:
'Ciao!'
更常见的是,我们可以将模型和输出解析器“链”在一起。每次调用时,输出解析器将自动处理模型的结果。
chain = model | parser
chain.invoke(messages)
输出:
'Ciao!'
PromptTemplates
目前,我们直接传递消息列表给模型。然而,通常消息是由用户输入和应用程序逻辑生成的。PromptTemplates
是 LangChain 中用于帮助处理这种转换的工具。它将用户的原始输入转换为可以传递给语言模型的消息列表。
from langchain_core.prompts import ChatPromptTemplate
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
result = prompt_template.invoke({"language": "italian", "text": "hi"})
result.to_messages()
输出:
[SystemMessage(content='Translate the following into italian:'),
HumanMessage(content='hi')]
使用 LCEL 链接组件
现在,我们可以使用 |
操作符将 PromptTemplate
、模型和输出解析器组合在一起,形成一个链:
chain = prompt_template | model | parser
chain.invoke({"language": "italian", "text": "hi"})
输出:
'ciao'
这就是使用 LangChain Expression Language (LCEL) 将组件链接在一起的简单示例。使用 LCEL 的好处包括优化的流处理和追踪支持。
使用 LangServe 部署应用
创建好应用后,我们可以使用 LangServe 将其部署为 REST API。虽然前面的部分是在 Jupyter Notebook 中运行的,但现在我们将创建一个 Python 文件并从命令行与其交互。
安装 LangServe
pip install "langserve[all]"
创建 serve.py 文件
from fastapi import FastAPI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
from langserve import add_routes
# 1. 创建 Prompt 模板
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages([
('system', system_template),
('user', '{text}')
])
# 2. 创建模型
model = ChatOpenAI()
# 3. 创建解析器
parser = StrOutputParser()
# 4. 创建链
chain = prompt_template | model | parser
# 5. 定义 FastAPI 应用
app = FastAPI(
title="LangChain Server",
version="1.0",
description="一个简单的 LangChain API 服务",
)
# 6. 添加链路到 API 路径
add_routes(
app,
chain,
path="/chain",
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
运行服务
python serve.py
服务将在 http://localhost:8000 运行。
使用 LangServe Playground
每个 LangServe 服务都内置了一个简单的 UI,用于配置和调用应用程序,支持流式输出和查看中间步骤。可以访问 http://localhost:8000/chain/playground/ 并输入 {"language": "italian", "text": "hi"}
,来尝试调用应用。
客户端调用
你可以使用 langserve.RemoteRunnable
与服务器交互,像调用本地链条一样调用服务。
from langserve import RemoteRunnable
remote_chain = RemoteRunnable("http://localhost:8000/chain/")
remote_chain.invoke({"language": "italian", "text": "hi"})
输出:
'Ciao'
总结
通过本教程,你学习了如何创建一个简单的 LLM 应用,如何使用语言模型,解析模型输出,创建提示模板,使用 LCEL 链接组件,以及如何通过 LangServe 部署应用。这只是入门的第一步,成为一个熟练的 AI 工程师还需要掌握更多知识。幸运的是,我们提供了丰富的资源供你学习!