使用 LCEL 构建简单的 LLM 应用
在本快速入门中,我们将向您展示如何使用 LangChain 构建简单的LLM应用程序。该应用程序会将英语文本翻译成另一种语言。这是一个相对简单的LLM申请 - 它只是一个LLM调用加上一些提示。尽管如此,这仍然是开始使用 LangChain 的好方法 - 只需一些提示和LLM调用就可以构建很多功能!
阅读本教程后,您将对以下内容有一个高层次的了解:
- 使用语言模型
- 使用PromptTemplates和OutputParsers
- 使用LangChain 表达式语言 (LCEL)将组件链接在一起
- 使用LangSmith调试和跟踪您的应用程序
让我们深入了解一下吧!
设置
安装
pnpm add langchain @langchain/core
有关更多详细信息,请参阅我们的安装指南。
LangSmith
您使用 LangChain 构建的许多应用程序将包含多个步骤,并多次调用 LLM 调用。随着这些应用程序变得越来越复杂,能够检查链或代理内部究竟发生了什么变得至关重要。最好的方法是使用 LangSmith。
在上面的链接处注册后,请确保设置环境变量以开始记录跟踪:
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."
# Reduce tracing latency if you are not in a serverless environment
# export LANGCHAIN_CALLBACKS_BACKGROUND=true
使用语言模型
首先,让我们学习如何单独使用语言模型。LangChain 支持多种不同的语言模型,您可以互换使用 - 在下面选择您想要使用的模型!
安装OpenAI
pnpm add @langchain/openai
配置环境变量
OPENAI_API_KEY=your-api-key
实例化模型
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({ model: "gpt-4" });
首先让我们直接使用该模型。ChatModel 是 LangChain“Runnable”的实例,这意味着它们公开了一个用于与它们交互的标准接口。为了简单地调用该模型,我们可以将消息列表传递给 .invoke 方法。
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
const messages = [
new SystemMessage("Translate the following from English into Italian"),
new HumanMessage("hi!"),
];
await model.invoke(messages);
AIMessage {
lc_serializable: true,
lc_kwargs: {
content: "ciao!",
tool_calls: [],
invalid_tool_calls: [],
additional_kwargs: { function_call: undefined, tool_calls: undefined },
response_metadata: {}
},
lc_namespace: [ "langchain_core", "messages" ],
content: "ciao!",
name: undefined,
additional_kwargs: { function_call: undefined, tool_calls: undefined },
response_metadata: {
tokenUsage: { completionTokens: 3, promptTokens: 20, totalTokens: 23 },
finish_reason: "stop"
},
tool_calls: [],
invalid_tool_calls: []
}
如果我们启用了 LangSmith,我们可以看到这次运行被记录到 LangSmith,并且可以看到 LangSmith 的跟踪
输出解析器
请注意,模型的响应是 AIMessage。它包含字符串响应以及有关响应的其他元数据。通常我们可能只想处理字符串响应。我们可以使用简单的输出解析器来解析此响应。
我们首先导入简单的输出解析器。
import { StringOutputParser } from "@langchain/core/output_parsers";
const parser = new StringOutputParser();
一种使用方法是直接使用它。例如,我们可以保存语言模型调用的结果,然后将其传递给解析器。
const result = await model.invoke(messages);
await parser.invoke(result);