点击上方关注 “终端研发部”
设为“星标”,和你一起掌握更多数据库知识
在这个快速入门中,我们将向您展示如何构建一个简单的LLM应用程序。这个应用程序将会把英文文本翻译成另一种语言。这是一个相对简单的LLM应用程序 - 它只是一个单一的LLM调用加上一些提示。尽管如此,这是开始使用LangChain的好方法 - 许多功能都可以通过一些提示和一个LLM调用来构建!
概念
我们将要涵盖的概念包括:
•使用语言模型•使用PromptTemplates和OutputParsers•使用LangChain将PromptTemplate + LLM + OutputParser链接起来•使用LangSmith调试和跟踪您的应用程序•使用LangServe部署您的应用程序
这要涵盖的内容相当多!让我们开始吧。
设置
Jupyter Notebook
本指南(以及文档中的大多数其他指南)使用Jupyter笔记本,并假定读者也是。Jupyter笔记本非常适合学习如何使用LLM系统,因为事情有时会出错(意外输出、API故障等),在交互式环境中通过指南是更好地理解它们的好方法。
这个和其他教程可能在Jupyter笔记本中运行最为方便。请参阅此处以获取安装说明。
安装
要安装LangChain,请运行:
•Pip•Conda
有关更多详细信息,请查看我们的安装指南。
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•Anthropic•Google•Cohere•FireworksAI•MistralAI•TogetherAI
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")
让我们首先直接使用模型。ChatModel
是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)
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跟踪。
输出解析器
注意,模型的响应是一个AIMessage
。这包含一个字符串响应以及有关响应的其他元数据。通常,我们可能只想处理字符串响应。我们可以通过使用一个简单的输出解析器来仅解析这个响应。
我们首先导入简单的输出解析器。
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
它的一个使用方式是单独使用它。例如,我们可以保存语言模型调用的结果,然后将其传递给解析器。
result = model.invoke(messages)
更常见的是,我们可以将模型与这个输出解析器“链接”起来。这意味着这个输出解析器将在链中的每次调用时被调用。这个链接受语言模型的输入类型(字符串或消息列表)并返回输出解析器的输出类型(字符串)。
我们可以使用|
运算符轻松创建链。在LangChain中,|
运算符用于组合两个元素。
如果我们现在查看LangSmith,我们可以看到链有两个步骤:首先调用语言模型,然后将结果传递给输出解析器。我们可以看到LangSmith跟踪。
提示模板
现在我们直接将消息列表传递给语言模型。这个消息列表从哪里来?通常,它是由用户输入和应用程序逻辑的组合构建的。这个应用程序逻辑通常采用原始用户输入并将其转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。
PromptTemplates是LangChain中设计出来帮助这种转换的概念。它们接受原始用户输入并返回数据(一个提示),这些数据已准备好传递给语言模型。
让我们在这里创建一个PromptTemplate。它将接受两个用户变量:
•language
:要将文本翻译成的语言•text
:要翻译的文本
from langchain_core.prompts import ChatPromptTemplate
首先,让我们创建一个我们将格式化为系统消息的字符串:
system_template = "Translate the following into {language}:"
接下来,我们可以创建PromptTemplate。这将是system_template
的组合以及一个更简单的模板,用于放置文本。
prompt_template = ChatPromptTemplate.from_messages([
("system", system_template),
("user", "{text}"),
])
这个提示模板的输入是一个字典。我们可以通过单独使用这个提示模板来了解它本身的作用。
result = prompt_template.invoke({"language": "italian", "text": "hi"})
result
ChatPromptValue(messages=[SystemMessage(content='Translate the following into italian:'), HumanMessage(content='hi')])
我们可以看到它返回了一个ChatPromptValue
,它由两条消息组成。如果我们想直接访问这些消息,我们可以这样做:
[SystemMessage(content='Translate the following into italian:'),
HumanMessage(content='hi')]
现在,我们可以将其与上面的模型和输出解析器结合起来。这将链接所有三个组件。
chain = prompt_template | model | parser
chain.invoke({"language": "italian", "text": "hi"})
如果我们查看LangSmith跟踪,我们可以看到LangSmith跟踪中出现了所有三个组件。
使用LangServe提供服务
现在我们已经构建了一个应用程序,我们需要提供服务。这就是LangServe的用武之地。LangServe帮助开发人员将LangChain链作为REST API部署。您不需要使用LangServe来使用LangChain,但在本指南中,我们将展示如何使用LangServe部署您的应用程序。
虽然本指南的第一部分旨在在Jupyter Notebook或脚本中运行,但我们现在将从中移出。我们将创建一个Python文件,然后从命令行与之交互。
安装:
pip install "langserve[all]"
服务器
要为我们的应用程序创建一个服务器,我们将制作一个serve.py
文件。这将包含我们提供应用程序的逻辑。它由三部分组成:
1.我们刚刚构建的链的定义2.我们的FastAPI应用程序3.使用langserve.add_routes
定义一个路由,以便提供链
#!/usr/bin/env python
from typing import List
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. 创建提示模板
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
# 4. 应用程序定义
app = FastAPI(
title="LangChain Server",
version="1.0",
description="A simple API server using LangChain's Runnable interfaces",
)
# 5. 添加链路由
add_routes(
app,
chain,
path="/chain",
)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="localhost", port=8000)
就是这样!如果我们执行这个文件:
我们应该会看到我们的链在http://localhost:8000上提供服务。
游乐场
每个LangServe服务都带有一个简单的内置UI,用于配置和调用应用程序,具有流式输出和对中间步骤的可见性。前往http://localhost:8000/chain/playground/尝试它!传入与之前相同的输入 - {"language": "italian", "text": "hi"}
- 它应该会像以前一样响应。
客户端
现在让我们设置一个客户端,以编程方式与我们的服务交互。我们可以很容易地使用[langserve.RemoteRunnable](/docs/langserve/#client)
来实现这一点。使用此功能,我们可以与所提供的链进行交互,就像它在客户端运行一样。
from langserve import RemoteRunnable
remote_chain = RemoteRunnable("http://localhost:8000/chain/")
remote_chain.invoke({"language": "italian", "text": "hi"})
要了解LangServe的许多其他功能,请访问此处。
结论
就是这样!在本教程中,我们已经完成了我们的第一个简单的LLM应用程序的创建过程。我们学习了如何使用语言模型,如何解析它们的输出,如何创建提示模板,如何通过LangSmith获得对您创建的链的极佳可视性,以及如何使用LangServe部署它们。
这仅仅是您想要成为熟练的AI工程师所需学习内容的冰山一角。幸运的是 - 我们有很多其他资源!
对于更深入的教程,请查看我们的教程部分。
如果您有关于如何完成特定任务的特定问题,请查看我们的操作指南部分。
对于阅读有关LangChain的核心概念,我们有详细的概念指南。
计算机专业必读书籍:
最后说一句(别白嫖,求关注)
回复 【idea激活】即可获得idea的激活方式
回复 【Java】获取java相关的视频教程和资料
回复 【SpringCloud】获取SpringCloud相关多的学习资料
回复 【python】获取全套0基础Python知识手册
回复 【2020】获取2020java相关面试题教程
回复 【加群】即可加入终端研发部相关的技术交流群
阅读更多
重磅!OpenAI正研发ChatGPT文本水印技术,其他大模型将何去何从?
相信自己,没有做不到的,只有想不到的
在这里获得的不仅仅是技术!
喜欢就给个“在看”