前端大模型入门:掌握langchain的核心Runnable接口(一)
在构建复杂的对话式AI应用程序时,Langchain 是一个绕不开的工具,它帮助开发人员轻松地处理各种语言模型的集成与管理。v0.3 是该框架的一个重要版本,它进一步优化了功能,提升了在JavaScript/TypeScript环境下的易用性。
本文将介绍Langchain v0.3 的核心功能,并特别着重于其
Runnable
接口,为前端小伙伴提供一个入门的引导。
Langchain.js 是 Langchain 框架的 JavaScript 版本,专为前端和后端 JavaScript 环境设计。在最新的 v0.3 版本中,引入了一个强大的接口——Runnable
。该接口提供了一个灵活的执行方式,可以与不同类型的模型和逻辑无缝集成。
本文将重点讲解 Runnable
接口,并通过实现一个自定义的 Runnable 来帮助前端人员快速上手。
一. 什么是 Runnable
?
Runnable
是 Langchain.js v0.3 中的一个核心接口,它代表了一个可以被执行的操作。通过这个接口,开发人员可以将模型、处理逻辑或其他任务封装为可执行对象,方便统一管理和使用。
Runnable
的基本特性包括:
- 输入与输出类型:可以灵活设置输入和输出的数据格式。
- 链式调用:
Runnable
可以被连接起来,形成执行链。 - 异步支持:它支持异步操作,方便与 API 或模型交互。
简而言之,Runnable
是一个抽象概念,可以帮助我们在复杂的前端应用中更好地组织代码逻辑。
二. Runnable
接口的基本用法
Langchain.js 中的 Runnable
提供了一个基础接口,允许我们定义任何类型的执行逻辑。它的核心方法是 invoke
,该方法接收输入数据并返回执行结果。
interface Runnable { invoke(input: any): Promise<any>; }
通过实现这个接口,我们可以将各种自定义逻辑封装到一个 Runnable
中。
举例:自定义 Runnable
假设我们有一个简单的需求:将用户输入的文本进行大写转换,并输出转换后的结果。我们可以通过实现一个自定义的 Runnable
来完成这一任务。
import { Runnable } from 'langchain';
class UppercaseRunnable implements Runnable {
async invoke(input: string): Promise<string> { // 将输入的字符串转换为大写 return
input.toUpperCase();
}
}
在这个例子中,我们创建了一个 UppercaseRunnable
类,它实现了 Runnable
接口,并在 invoke
方法中将输入的字符串转换为大写。
三. 将自定义模型与 Runnable
集成
除了处理简单的字符串操作,我们还可以通过 Runnable
接口将第三方模型或 API 集成到我们的前端应用中。接下来,我们来实现一个稍复杂的例子:通过 Runnable
封装一个自定义的文本分类模型。
实现自定义模型的 Runnable
假设我们有一个文本分类模型,它通过某个 API 进行分类任务。我们可以将这个模型封装到一个 Runnable
中,便于在前端应用中使用。
import { Runnable } from "langchain";
class TextClassificationRunnable implements Runnable {
private apiUrl: string;
constructor(apiUrl: string) {
this.apiUrl = apiUrl;
}
async invoke(input: string): Promise<string> {
const response = await fetch(this.apiUrl, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ text: input }),
});
const data = await response.json();
return data.category;
}
}
在这个示例中,TextClassificationRunnable
类将文本发送到指定的 API 进行分类,并返回分类结果。通过这种方式,我们可以很方便地将模型 API 封装在前端应用中。
使用自定义的 Runnable
现在我们已经实现了两个不同的 Runnable
,我们可以将它们结合起来,构建一个简单的执行链。在这个链中,我们将首先将用户输入的文本转换为大写,然后进行文本分类。
async function main() {
const uppercaseRunnable = new UppercaseRunnable();
const textClassificationRunnable = new TextClassificationRunnable(
"https://api.com/v1"
);
const input = "hello world"; // 首先将文本转换为大写
const uppercasedInput = await uppercaseRunnable.invoke(input); // 然后将大写文本发送到分类模型
const category = await textClassificationRunnable.invoke(uppercasedInput);
console.log(`分类结果: ${category}`);
}
main();
在这个例子中,我们展示了如何通过 Runnable
接口组合不同的操作,使得代码逻辑更加清晰且可复用。
四 小结
通过 Runnable
接口,Langchain.js v0.3 为前端开发人员提供了一种简洁而强大的方式来封装和管理复杂的逻辑。无论是简单的文本处理任务,还是与第三方模型的集成,Runnable
都能提供足够的灵活性。
对于前端开发人员而言,学习和掌握 Langchain.js 的 Runnable
接口,不仅可以提升开发效率,还可以帮助我们更好地构建现代化的 AI 驱动应用。
后续将介绍Runnable的stream接口
看上多不如动动手,赶快试试吧,开始你的 AI 应用开发之旅吧!