作者:E的工程笔记
LLM、AIGC、RAG 开发交流裙:377891973
文章目录
一、说明
二、设置
1、Jupyter Notebook2、安装3、LangSmith
三、使用详情
1、使用语言模型2、输出解析器3、提示模板4、使用 LangServe
四、结论
本文翻译整理自:
https://python.langchain.com/v0.2/docs/tutorials/llm_chain/
一、说明
基于 LangChain 0.2
在本快速入门中,我们将向您展示如何构建一个简单的 LLM 应用程序。
此应用程序会将文本从英语翻译成另一种语言。
这是一个相对简单的 LLM 应用程序 - 它只是一个 LLM 调用加上一些提示。
不过,这仍然是开始使用 LangChain 的好方法 - 只需一些提示和一个 LLM 调用就可以构建许多功能!
概念
我们将涵盖的概念包括:
使用语言模型使用PromptTemplates和OutputParsers使用 LangChain链接PromptTemplate + LLM + OutputParser使用LangSmith调试和跟踪您的应用程序使用 LangServe 部署您的应用程序
内容相当丰富!让我们开始吧。
二、设置
1、Jupyter Notebook
本指南(以及文档中的大多数其他指南)使用Jupyter 笔记本,并假设读者也使用 Jupyter 笔记本。
Jupyter 笔记本非常适合学习如何使用 LLM 系统,因为事情经常可能会出错(意外输出、API 关闭等),而在交互式环境中阅读指南是更好地理解它们的好方法。
本教程和其他教程可能最方便地在 Jupyter 笔记本中运行。
有关如何安装的说明,请参阅此处。
2、安装
要安装 LangChain,请运行:
- conda install langchain -c conda-forge
复制代码 有关更多详细信息,请参阅我们的安装指南。
3、LangSmith
使用 LangChain 构建的许多应用程序将包含多个步骤,并多次调用 LLM 调用。
随着这些应用程序变得越来越复杂,能够检查链或代理内部究竟发生了什么变得至关重要。
最好的方法是使用LangSmith。
在上面的链接注册后,请确保设置环境变量以开始记录跟踪:- exportLANGCHAIN_TRACING_V2="true"exportLANGCHAIN_API_KEY="..."
复制代码 或者,如果在笔记本中,您可以使用以下命令设置它们:- import getpass
- import os
- os.environ["LANGCHAIN_TRACING_V2"]="true"
- os.environ["LANGCHAIN_API_KEY"]= getpass.getpass()
复制代码 三、使用详情
在本指南中,我们将构建一个应用程序来 将用户输入从一种语言翻译为另一种语言。
1、使用语言模型
首先,让我们学习如何单独使用语言模型。
LangChain支持多种不同的语言模型,您可以互换使用 - 在下面选择您想要使用的一种!
OpenAIAnthropicGoogleCohereFireworksAIMistralAITogetherAI
- pip install-qU langchain-openai
- pip install-qU langchain-anthropic
- pip install-qU langchain-google-vertexai
- pip install-qU langchain-cohere
- pip install-qU langchain-fireworks
- pip install-qU langchain-mistralai
- pip install-qU langchain-openai
复制代码 这里以 OpenAI 为例,其他模型调用可参阅 https://python.langchain.com/v0.2/docs/tutorials/llm_chain/#using-language-models- import getpass
- import os
- os.environ["OPENAI_API_KEY"]= getpass.getpass()from langchain_openai import ChatOpenAI
- model = ChatOpenAI(model="gpt-4")
复制代码 我们先直接使用模型。 ChatModels 是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)
复制代码 API参考:
HumanMessageSystemMessage
输出- 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 trace
2、输出解析器
请注意,模型的响应是一个AIMessage。
其中包含字符串响应以及有关响应的其他元数据。
通常我们可能只想处理字符串响应。我们可以使用一个简单的输出解析器来解析这个响应。
我们首先导入简单的输出解析器。- from langchain_core.output_parsers import StrOutputParser
- parser = StrOutputParser()
复制代码 API参考:
使用它的一种方法是自调用。
例如,我们可以保存语言模型调用的结果,然后将其传递给解析器。- result = model.invoke(messages)
- parser.invoke(result)
复制代码 输出: 更常见的是,我们可以使用此输出解析器“链接”模型。
这意味着该输出解析器将在该链中每次被调用。
该链采用语言模型的输入类型(字符串或消息列表)并返回输出解析器的输出类型(字符串)。
我们可以使用操作符轻松创建链|。
LangChain中使用运算符 | 将两个元素组合在一起。- chain = model | parser
- chain.invoke(messages)
复制代码 如果我们现在看一下 LangSmith,我们可以看到该链有两个步骤:首先调用语言模型,然后将结果传递到输出解析器。
详情可见 LangSmith trace : https://smith.langchain.com/public/f1bdf656-2739-42f7-ac7f-0f1dd712322f/r
3、提示模板
现在,我们将消息列表直接传递到语言模型中。
这个消息列表从哪里来?通常它由 用户输入和应用程序逻辑 的组合构成。
此应用程序逻辑通常获取原始用户输入 并将其转换为 准备传递到语言模型的消息列表。
常见的转换包括添加 系统消息 或使用 用户输入格式化模板。
PromptTemplates 是 LangChain 中的一个概念,旨在协助实现这种转换。
它们接收原始用户输入并返回可传递到语言模型的数据(提示)。
API参考:
让我们在这里创建一个 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 迹线中
4、使用 LangServe
现在我们已经构建了一个应用程序,我们需要为它提供服务。这就是 LangServe 的用武之地。
LangServe 帮助开发人员将 LangChain 链部署为 REST API。
您不需要使用 LangServe 来使用 LangChain,但在本指南中,我们将向您展示如何使用 LangServe 部署您的应用程序。
虽然本指南的第一部分旨在 在 Jupyter Notebook 或脚本中运行,但我们现在将不再使用它。
我们将创建一个 Python 文件,然后从命令行与其交互。
安装:- pip install"langserve[all]"
复制代码 服务器
要为我们的应用程序创建服务器,我们将创建一个serve.py文件。
这将包含为应用程序提供服务的逻辑。
它由三部分组成:
我们刚刚在上面构建的链的定义我们的 FastAPI 应用程序为链提供服务的路由的定义,由以下命令完成langserve.add_routes
- #!/usr/bin/env pythonfrom 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()# 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)
复制代码 API参考:
ChatPromptTemplateStrOutputParserChatOpenAI
就是这样!如果我们执行这个文件: 我们应该看到我们的链在 http://localhost:8000/ 上提供服务。
Playground
每个 LangServe 服务都带有一个简单的内置 UI,用于配置和调用具有流输出和中间步骤可见性的应用程序。
前往 http://localhost:8000/chain/playground/ 尝试一下!
传递与之前相同的输入 - {"language": "italian", "text": "hi"} - 并且它应该做出与之前相同的响应。
Client
现在让我们设置一个客户端,以便以编程方式与我们的服务进行交互。
我们可以使用 [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 部署它们。
这只是你想要成为一名熟练的人工智能工程师所需要学习的知识的皮毛。幸运的是 - 我们还有很多其他资源!
有关更深入的教程,请查看教程部分。
如果您对如何完成特定任务有具体疑问,请参阅我们的操作指南部分。
为了阅读LangChain的核心概念,我们有详细的概念指南
2024-05-22(三)
原文地址:https://blog.csdn.net/lovechris00/article/details/139130091 |