LangChain-v0.2文档翻译:2.1、教程-构建一个简单的 LLM 应用程序

中文文档目录

  1. 介绍
  2. 教程
    2.1. 构建一个简单的 LLM 应用程序(点击查看原文

这篇文章是关于如何构建一个简单的大型语言模型(LLM)应用程序的快速入门指南。这个应用程序将文本从英语翻译成另一种语言。这是一个相对简单的LLM应用程序——它只是一个单一的LLM调用加上一些提示。尽管如此,这是开始使用LangChain的好方法——只需一些提示和一个LLM调用,就可以构建许多特性!

概念

我们将涵盖以下概念:

  • 使用语言模型
  • 使用PromptTemplates(提示模板)和OutputParsers(输出解析器)
  • 使用LangChain将PromptTemplate(提示模板)+ LLM(大型语言模型)+ OutputParser(输出解析器)串联起来
  • 使用LangSmith调试和追踪你的应用程序
  • 使用LangServe部署你的应用程序

这是一个相当多的内容!让我们开始吧。

设置

Jupyter Notebook

本指南(以及文档中的大多数其他指南)使用Jupyter笔记本,并假设读者也是如此。Jupyter笔记本非常适合学习如何使用LLM系统,因为事情有时会出错(意外输出,API宕机等),在交互式环境中通过指南是更好地理解它们的好方法。

这篇和其他教程可能最方便地在Jupyter笔记本中运行。有关如何安装的说明,请看这里。

安装

要安装LangChain,请运行:

  • 使用pip
pip install langchain
  • 使用conda
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
  • Anthropic
  • Google
  • Cohere
  • FireworksAI
  • MistralAI
  • TogetherAI

安装对应模型的LangChain库,以下是不同语言模型的安装脚本:

#OpenAI
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
pip install -qU langchain-anthropic

import getpass
import os

os.environ["ANTHROPIC_API_KEY"] = getpass.getpass()

from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model="claude-3-sonnet-20240229")
#Google
pip install -qU langchain-google-vertexai

import getpass
import os

os.environ["GOOGLE_API_KEY"] = getpass.getpass()

from langchain_google_vertexai import ChatVertexAI

model = ChatVertexAI(model="gemini-pro")
#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")
#FireworksAI
pip install -qU langchain-fireworks

import getpass
import os

os.environ["FIREWORKS_API_KEY"] = getpass.getpass()

from langchain_fireworks import ChatFireworks

model = ChatFireworks(model="accounts/fireworks/models/mixtral-8x7b-instruct")
#MistralAI
pip install -qU langchain-mistralai

import getpass
import os

os.environ["MISTRAL_API_KEY"] = getpass.getpass()

from langchain_mistralai import ChatMistralAI

model = ChatMistralAI(model="mistral-large-latest")
#TogetherAI
pip install -qU langchain-openai

import getpass
import os

os.environ["TOGETHER_API_KEY"] = getpass.getpass()

from langchain_openai import ChatOpenAI

model = ChatOpenAI(
    base_url="https://api.together.xyz/v1",
    api_key=os.environ["TOGETHER_API_KEY"],
    model="mistralai/Mixtral-8x7B-Instruct-v0.1",)

让我们首先直接使用这个模型。ChatModel是LangChain“Runnables”的实例,这意味着它们提供了一个标准接口与它们交互。要简单地调用模型,我们可以将一系列消息传递给.invoke方法。

from langchain_core.messages import HumanMessage, SystemMessage

messages = [
    SystemMessage(content="将以下内容从英语翻译成意大利语"),
    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)
parser.invoke(result)

‘Ciao!’

更常见的是,我们可以将模型与这个输出解析器“串联”起来。这意味着这个输出解析器将在链中的每次调用中被调用。这个链接受语言模型的输入类型(字符串或消息列表)并返回输出解析器的输出类型(字符串)。

我们可以使用|运算符轻松创建链。在LangChain中,|运算符用于将两个元素组合在一起。

chain = model | parser
chain.invoke(messages)

‘Ciao!’

如果我们现在查看LangSmith,我们可以看到链有两个步骤:首先调用语言模型,然后将结果传递给输出解析器。我们可以在LangSmith追踪中看到这一点。

提示模板

现在我们直接将消息列表传递给语言模型。这个消息列表从何而来?它通常是用户输入和应用程序逻辑的结合。这个应用程序逻辑通常采用原始用户输入,将其转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。

PromptTemplates是LangChain中的一个概念,旨在帮助这种转换。它们接受原始用户输入并返回数据(一个提示),这些数据已准备好传递给语言模型。

让我们在这里创建一个PromptTemplate。它将接受两个用户变量:

  • language:要翻译成的目标语言
  • text:要翻译的文本
from langchain_core.prompts import ChatPromptTemplate

system_template = “将以下内容翻译成 {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='将以下内容翻译成 italian:'), HumanMessage(content='hi')])

我们可以看到它返回了一个ChatPromptValue,它由两个消息组成。如果我们想直接访问消息,我们可以这样做:

[SystemMessage(content='将以下内容翻译成 italian:'),
 HumanMessage(content='hi')]

我们现在可以将这个与上面的模型和输出解析器结合起来。这将把所有三个组件串联在一起。

chain = prompt_template | model | parser
chain.invoke({"language": "italian", "text": "hi"})

‘ciao’

如果我们查看LangSmith追踪,我们可以看到所有三个组件都出现在LangSmith追踪中。

使用LangServe提供服务

现在我们已经构建了一个应用程序,我们需要提供它。这就是LangServe的用处所在。LangServe帮助开发人员将LangChain链作为REST API部署。你不需要使用LangServe就可以使用LangChain,但在本指南中,我们将展示如何使用LangServe部署你的应用程序。

虽然本指南的第一部分旨在在Jupyter Notebook或脚本中运行,但我们现在将从中退出。我们将创建一个Python文件,然后从命令行与之交互。

安装LangServe:

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 = "将以下内容翻译成 {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="使用LangChain的Runnable接口的简单API服务器",
)

# 5. 添加链路由
add_routes(
    app,
    chain,
    path="/chain",
)

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="localhost", port=8000)

就是这样!如果我们执行这个文件:

python serve.py

我们应该会看到我们的链在http://localhost:8000上提供服务。

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", "

‘Ciao’
``

要了解更多关于LangServe的其他功能,请访问这里。

结论

就是这样!在本教程中,我们已经走过了创建我们的第一个简单的LLM应用程序的过程。我们学习了如何使用语言模型,如何解析它们的输出,如何创建提示模板,如何使用LangSmith获得对您创建的链的出色可观察性,以及如何使用LangServe部署它们。

这只是成为熟练的AI工程师所需学习的皮毛。幸运的是——我们有很多其他资源!

要获取更深入的教程,请查看我们的教程部分。

如果您有关于如何完成特定任务的具体问题,请查看我们的操作指南部分。

要了解LangChain的核心概念,请查看我们详细的概念指南。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值