跳到主要内容

使用 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);