LangChain-v0.2 使用 LCEL 构建一个简单的 LLM 应用程序

本文将向你展示如何使用 LangChain 构建一个简单的 LLM 应用程序。此应用程序会将文本从英语翻译成另一种语言。这是一个相对简单的 LLM 应用程序 - 它只是一个 LLM 调用加上一些提示。尽管如此,这仍然是开始使用 LangChain 的好方法——只需一些提示和 LLM 调用就可以构建许多功能!本文在python环境进行操作。

阅读本文后,你将大致了解以下内容:

1、使用语言模型;

2、使用 PromptTemplates 和 OutputParser;

3、使用 LangChain 表达式语言 (LCEL) 将组件链接在一起;

4、使用 LangServe 部署应用程序。

一、Installation安装

LangChain安装:

pip install langchain

二、使用语言模型

LangChain支持许多不同的语言模型,包含:OpenAI、Anthropic、Azure、Google、Cohere、FireworksAI、Groq、MistralAI、TogetherAI等,您可以互换使用 ,选择您要使用的语言模型!

下面内容将居于OpenAI语言模型进行演示:

1)LangChain OpenAI安装:

pip install -qU langchain-openai

让我们首先直接使用模型。是LangChain的实例,它们公开了一个标准接口来与它们进行交互。只需简单地调用模型,我们就可以将消息列表传递给该方法。 

from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4",openai_api_key = "")

2)HumanMessage 和 SystemMessage

from langchain_core.messages import HumanMessage, SystemMessage

content = "你好,你是谁?"
print("问:"+content)
messages = [
    SystemMessage(content="你是一个情感小助手,你叫TT"),
    HumanMessage(content="content"),
]

三、OutputParsers 输出解析器

请注意,模型的响应是 .这包含一个字符串响应以及有关响应的其他元数据。通常,我们可能只想使用字符串响应。我们可以使用简单的输出解析器来解析此响应。

1)输出解析器

简单的使用输出解析器,我们可以保存语言模型调用的结果,然后将其传递给解析器。

from langchain_core.output_parsers import StrOutputParser

parser = StrOutputParser()

result = model.invoke(messages)

out = parser.invoke(result)
print("答:"+out)

输出结果:

2)chain

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

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

chain = model | parser

chain.invoke(messages)

输出结果:

四、Prompt Templates 提示模板

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

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

1)创建一个 PromptTemplate。它包含两个用户变量:

  • language: 将文本翻译成的语言
  • text: 要翻译的文本

2)导入ChatPromptTemplate,创建一个字符串,我们将该字符串格式转化为系统消息:

from langchain_core.prompts import ChatPromptTemplate

system_template = "Translate the following into {language}:"

3)接下来,我们可以创建 PromptTemplate。这将是一个简单的模板的组合,将要翻译的文本放在这里:

prompt_template = ChatPromptTemplate.from_messages(
    [("system", system_template), ("user", "{text}")]
)

4)此提示模板的输入是字典。我们可以单独使用这个提示模板,看看它自己做了什么:

result = prompt_template.invoke({"language": "chinese", "text": "hi"})

五、使用 LCEL 将组件链接在一起

我们可以使用运算符将其与模型和上面的输出解析器结合起来:

chain = prompt_template | model | parser

chain.invoke({"language": "chinese", "text": "hi"})

这是使用 LangChain 表达式语言 (LCEL) 将 LangChain 模块链接在一起的简单示例。这种方法有几个好处,包括优化的流式处理和跟踪支持。 

六、LangServe 服务

现在我们已经构建了一个应用程序,我们需要为它提供服务。这就是LangServe的用武之地。LangServe 帮助开发人员将 LangChain 链部署为 REST API。您无需使用 LangServe 即可使用 LangChain,但在本指南中,我们将展示如何使用 LangServe 部署您的应用程序。

1)创建一个 Python 文件,然后从命令行与之交互

Install with:安装方式:

pip install "langserve[all]"

2)服务器

为我们的应用程序创建一个服务器,我们将创建一个文件 langchinaServer.py。这将包含我们为应用程序提供服务的逻辑。它由三件事组成:

1.我们刚刚在上面构建的链的定义

2.我们的 FastAPI 应用程序

3.为链提供服务的路由的定义,这是通过langserve.add_routes

server源码:

#!/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. Create prompt template
system_template = "Translate the following into {language}:"
prompt_template = ChatPromptTemplate.from_messages([
    ('system', system_template),
    ('user', '{text}')
])

# 2. Create model
model = ChatOpenAI(openai_api_key = "")

# 3. Create parser
parser = StrOutputParser()

# 4. Create chain
chain = prompt_template | model | parser


# 4. App definition
app = FastAPI(
  title="LangChain Server",
  version="1.0",
  description="A simple API server using LangChain's Runnable interfaces",
)

# 5. Adding chain route

add_routes(
    app,
    chain,
    path="/chain",
)

if __name__ == "__main__":
    import uvicorn

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

执行 langchinaServer.py 文件:

python langchinaServer.py

3)web 体验

每个LangServe服务都带有一个简单的内置UI,用于配置和调用应用程序,并提供流式输出和对中间步骤的可见性。
前往 http://localhost:8000/chain/playground/ 尝试一下吧!传入与之前相同的输入 -{"language": "chinese", "text": "hi"}- 并且它的响应应与之前相同。

4)客户端

现在,让我们设置一个客户端,以便以编程方式与我们的服务进行交互。我们可以使用 langserve 轻松做到这一点。RemoteRunnable 的 。
使用它,我们可以与服务链进行交互,就好像它在客户端运行一样。 

from langserve import RemoteRunnable

remote_chain = RemoteRunnable("http://localhost:8000/chain/")
remote_chain.invoke({"language": "Chinese", "text": "hi"})

至此,你学习了如何创建第一个简单的 LLM 应用程序。您已经学习了如何使用语言模型,如何解析其输出,如何创建提示模板,如何使用 LCEL 将它们链接起来,如何在使用 LangSmith 创建的链中获得出色的可观测性,以及如何使用 LangServe 部署它们。

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sziitjin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值