Lazy loaded image
🌑构建一个简单应用|🦜️🔗 LangChain
Words 2364Read Time 6 min
2024-5-19
2024-12-31
type
status
date
slug
summary
tags
category
icon
password
comment
Status
视频链接:
基于Langchain开发并部署一个简单大模型应用_哔哩哔哩_bilibili
基于Langchain开发并部署一个多语言翻译的大模型应用。相关文档地址https://capricious-sesame-e56.notion.site/Langchain-b89e72214f394c319f14f14693008f86?pvs=4, 视频播放量 1742、弹幕量 4、点赞数 49、投硬币枚数 31、收藏人数 126、转发人数 13, 视频作者 小灰的AI笔记, 作者简介 探索AI的无限可能,相关视频:【喂饭教程】Qwen2.5-Coder接入Cursor, 性能超越GPT-4o!本地运行集成代码开发器LLM丨开源免费,一站式搞定低代码开发全流程!,【10分钟学会】把Qwen2.5-Coder接入Cursor,让大模型帮你写代码,轻松搞定开发!!!本地运行集成代码开发器LLM丨一站式搞定低代码开发全流程!,基于Langchain开发一个聊天机器人,使用langchain创建检索增强生成(RAG)应用,【喂饭教程】轻松搞定本地部署Qwen2大模型,手把手教你训练自己的行业大模型!(配置 | 微调 | 部署 | 效果展示)大模型/LLM/模型部署,10分钟20行代码构建一个PDF文件的问答系统,【喂饭教程】Qwen2.5-Coder接入Cursor, 性能超越GPT-4o!本地运行集成代码开发器LLM丨一站式搞定低代码开发全流程!大模型|LLM,构建一个将自然语言的问题转换成结构化对象并查询的RAG应用,从零开始实现数据检索及RAG的简单实现,LLM 年度测评:2024 年最佳与最差模型大盘点
基于Langchain开发并部署一个简单大模型应用_哔哩哔哩_bilibili

在这个快速入门中,将向您展示如何构建一个简单的LLM应用程序。此应用程序将把英文翻译成其他语言。这是一个相对简单的LLM应用程序 - 它只是一个加上一些提示词的LLM调用。然而,这是开始使用LangChain的好方法 - 很多功能只需要一些提示和一个LLM调用就可以构建出来!

相关概念

我们将涵盖的概念包括:
  • LangChain Expression Language (LCEL):以下我们称之为“链”,让开发者能够轻松地将不同的功能模块串联起来,形成一个完整的工作流程。你可以像搭积木一样串联整个流程,简化开发到生产部署的过程
这是相当多的内容!我们开始吧。

环境安装

Jupyter Notebook

本指南(以及文档中的大部分其他指南)使用Jupyter notebooks,并假设读者也是如此。Jupyter notebooks 非常适合学习如何使用LLM系统,因为经常会出现问题(意外的输出,API关闭等),在交互式环境中浏览指南是更好地理解它们的好方法。
这个和其他教程可能最方便在Jupyter笔记本中运行。关于如何安装的说明,请看这里

安装

安装langchain

LangSmith

您使用LangChain构建的许多应用都会包含多个步骤和多次调用LLM。随着这些应用变得越来越复杂,能够检查链或代理内部发生的确切情况变得至关重要。最好的方式就是使用LangSmith
在您通过上述链接注册后,请确保设置您的环境变量以开始记录跟踪:
或者,如果在笔记本中,你可以这样设置它们:

详细步骤

在本指南中,我们将构建一个应用程序,将用户的输入从一种语言翻译成另一种语言。

使用模型

首先,让我们学习如何单独使用语言模型。LangChain支持许多不同的语言模型,你可以互换使用,比如:
  • OpenAI
让我们先直接使用模型。ChatModel 是 LangChain "Runnable" 的实例,这意味着它们公开了一个标准的接口用于与之交互。要简单地调用模型,我们可以向 .invoke 方法传入一系列消息。

API Reference:

如果我们启用了LangSmith,我们可以看到这次运行已经记录到LangSmith中,并且可以看到

OutputParsers

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

API Reference:

使用它的一种方法是单独使用它。例如,我们可以保存语言模型调用的结果,然后将其传递给解析器。
更普遍的做法是,我们可以将模型与这个输出解析器进行“链接”。 这意味着每次在这个链接中都会调用这个输出解析器。 这个链接接受语言模型的输入类型(字符串或消息列表),并返回输出解析器的输出类型(字符串)。
我们可以使用 | 运算符来轻松地创建链。| 运算符用于在LangChain中将两个元素组合在一起。
如果我们现在看一下LangSmith,我们可以看到该链有两个步骤:首先调用语言模型,然后将其结果传递给输出解析器。我们可以看到LangSmith的追踪。

提示模版

我们现在正在直接将一系列消息传递到语言模型中。这些消息列表是从哪里来的?通常是由用户输入和应用程序逻辑组合构建而成。这个应用程序逻辑通常会接受原始用户输入,并将其转换为一个准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。
PromptTemplates是LangChain中的一个概念,旨在协助进行这种转换。它们接受原始用户输入,并返回准备传递给语言模型的数据(一个提示)。
让我们在这里创建一个PromptTemplate。它将接收两个用户变量:
  • language:要将文本翻译成的语言。
  • text:要翻译的文本。

API Reference:

首先,让我们创建一个字符串,然后我们将对其进行格式化,使其成为系统消息。
接下来,我们可以创建PromptTemplate。这将是system_template和更简单的模板的组合,用于放置文本。
这个提示模板的输入是一个字典。我们可以通过这个提示模板本身来试一下,看看它到底是做什么的。
我们可以看到它返回一个 ChatPromptValue,其中包括两条消息。如果我们想直接访问这些消息,我们可以这样做:
我们现在可以将这个与上面的模型和输出解析器相结合。这将把所有三个组件链接在一起。
If we take a look at the LangSmith trace, we can see all three components show up in the LangSmith trace

Serving with LangServe

现在我们已经构建了一个应用程序,我们需要为其提供服务。这就是LangServe的作用。LangServe帮助开发人员将LangChain链部署为REST API。您不需要使用LangServe来使用LangChain,但在本指南中,我们将展示如何使用LangServe部署您的应用程序。
这个指南的第一部分旨在在Jupyter Notebook或脚本中运行,但现在我们将离开那个环境。我们将创建一个Python文件,然后通过命令行与它交互。
Install with:

Server

为了为我们的应用创建一个服务器,我们将制作一个serve.py文件。这个文件将包含我们提供应用程序的逻辑。它由三部分组成:
  1. 我们刚刚建立的链的定义
  1. 我们的FastAPI应用程序
  1. 一个路由的定义,用于通过 langserve.add_routes 提供链的服务

API Reference:

我们执行这个文件:

Playground

每个LangServe服务都配备了一个简单的内置UI,用于配置和调用应用程序,具有流式输出和查看中间步骤的功能。前往 http://localhost:8000/chain/playground/ 尝试它吧!传入与之前相同的输入 - {"language": "italian", "text": "hi"} - 它应该会像之前一样做出响应。

Client

现在让我们为与我们的服务进行程序化交互设置一个客户端。我们可以使用 langserve.RemoteRunnable 来轻松做到这一点。借助这个功能,我们可以像运行客户端一样与服务端交互。

Conclusion

这就是全部!在本教程中,我们已经介绍了如何创建我们的第一个简单的LLM应用程序。我们已经学会了如何使用语言模型,如何解析它们的输出,如何创建提示模板,如何在使用LangSmith创建的链条中获得良好的可观测性,以及如何使用LangServe部署它们。
这只是为了让你了解成为一名熟练的人工智能工程师你需要学习的一小部分内容。
 
官方链接:
 
上一篇
大模型应用的思考
下一篇
创建一个聊天机器人 | 🦜️🔗 LangChain