用LangChain构建一个简单的LLM应用程序:快速入门指南
在这篇快速入门指南中,我们将展示如何使用LangChain构建一个简单的LLM应用程序。这个应用程序将把文本从英文翻译成其他语言。尽管这个LLM应用相对简单,它只包含一个LLM调用和一些提示,但这是一个使用LangChain的好方法——许多功能可以通过一些提示和LLM调用构建出来!
阅读本教程后,您将对以下内容有一个高层次的概述:
- 使用语言模型
- 使用PromptTemplates和OutputParsers
- 使用LangChain Expression Language (LCEL)将组件串联在一起
- 使用LangSmith调试和跟踪您的应用程序
- 使用LangServe部署您的应用程序
让我们开始吧!
设置
Jupyter Notebook
本指南(以及文档中的大多数其他指南)使用Jupyter notebook,假设读者也在使用Jupyter notebook。Jupyter notebook非常适合学习如何使用LLM系统,因为很多时候可能会出问题(例如,输出不符合预期,API不可用等),通过交互式环境中的指南,可以更好地理解它们。有关安装的说明,请参见安装说明。
安装
要安装LangChain,运行以下命令:
pip install langchain
# 或者使用Conda
conda install langchain -c conda-forge
有关更多详细信息,请参阅我们的安装指南。
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支持许多不同的语言模型,您可以选择任意一个使用。下面是一些示例:
pip install -qU langchain-openai
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4")
其他支持的模型包括:Anthropic、Azure、Google、Cohere、NVIDIA、FireworksAI、Groq、MistralAI、TogetherAI。要使用这些模型,您需要安装相应的包并设置API Key。
使用LLM和提示模板
我们首先直接使用模型。可以通过传递一系列消息给invoke方法来调用模型:
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage(content="Translate the following from English into Italian"),
HumanMessage(content="hi!"),
]
result = model.invoke(messages)
print(result) # 输出: AIMessage(content='ciao!', ...)
使用OutputParsers
注意到从模型返回的响应是一个AIMessage。我们可以使用一个简单的输出解析器来提取字符串响应:
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
result = model.invoke(messages)
parsed_result = parser.invoke(result)
print(parsed_result) # 输出: 'Ciao!'
我们还可以将模型和输出解析器“链”在一起,以便每次调用时解析输出:
chain = model | parser
chain_result = chain.invoke(messages)
print(chain_result) # 输出: 'Ciao!'
提示模板
通常,我们需要将用户输入和应用逻辑组合在一起创建提示消息。PromptTemplates可以帮助我们完成这一任务。以下是一个示例:
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"})
print(result.to_messages())
# 输出: [SystemMessage(content='Translate the following into italian:'), HumanMessage(content='hi')]
使用LCEL串联组件
我们可以将提示模板、模型和输出解析器组合在一起:
chain = prompt_template | model | parser
final_result = chain.invoke({"language": "italian", "text": "hi"})
print(final_result) # 输出: 'ciao'
使用LangServe部署
最后,我们需要将应用程序部署为一个REST API。我们可以使用LangServe来完成这项工作。创建serve.py文件,并编写以下内容:
#!/usr/bin/env python
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
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages([
('system', system_template),
('user', '{text}')
])
model = ChatOpenAI()
parser = StrOutputParser()
chain = prompt_template | model | parser
app = FastAPI(
title="LangChain Server",
version="1.0",
description="A simple API server using LangChain's Runnable interfaces",
)
add_routes(app, chain, path="/chain")
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
运行这个文件:
python serve.py
您的链将会在http://localhost:8000服务。
总结和进一步学习资源
通过本教程,您学会了如何创建第一个简单的LLM应用程序。您学会了如何使用语言模型,解析它们的输出,创建提示模板,将它们与LCEL串联在一起,利用LangSmith进行跟踪,并使用LangServe进行部署。
这只是一部分内容,成为一名熟练的AI工程师还有很多需要学习的内容。幸运的是,我们有很多其他资源!以下是一些推荐的进一步阅读:
参考资料
- LangChain Documentation
- Jupyter Notebook Installation Guide
- LangChain Installation Guide
- LangChain Core Concepts
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---