LangChainJS之Runnable(三)
来源:互联网
时间:2026-07-10 07:22:04
前面几篇文章聊了怎么用 LangChain 调用大模型、写提示词,接下来要进入重头戏——Chain 链。Chain 链可以说是 LangChain 的核心机制,它让开发者能轻松搭出标准化工作流,数据在各组件间自动流转,不用手动传递来传递去,方便又省心。
不过聊 Chain 链之前,得先把 Runnable 这个抽象类说清楚。它是一切链条的基石,没有它,链条根本搭不起来。下面我们就来拆解一下 Runnable。
Runnable 是什么?
简单说,Runnable 是一套标准接口,让提示词模板、大模型、输出解析器这些不同组件,都能用统一的方式被调用和组合。它本身是个抽象类,不能直接 new 出来用,我们平时用的都是它的实现类。
比如下面这段代码里的 RunnableLambda,就是 Runnable 的一个实现:
const transformInput = RunnableLambda.from((input: { text: string }) => ({text: input.text,wordCount: input.text.split(/s+/).length,characterCount: input.text.length,
}));
// 这里是 Chain 链调用,下一章会聊到
const chain = transformInput.pipe(promptTemplate).pipe(model).pipe(new StringOutputParser());
const text = `LangChain 是一个用于开发由语言模型驱动的应用程序的框架。它提供了一套丰富的工具和组件,使得构建复杂的 LLM 应用变得更加容易。无论是简单的聊天机器人还是复杂的智能袋里,LangChain 都能帮你实现。`.trim();
const result = await chain.invoke({ text });
这里 RunnableLambda.from 接收一个普通匿名函数作为参数,返回一个全新的、支持 Runnable 规范的对象 transformInput。这个对象就能直接用在 Chain 链里了。如果是普通函数,肯定不支持链式调用,但经过 RunnableLambda 一转换,它就变成了一个“Runnable 兼容”的组件。
通用插头
一个 Runnable 对象有好几种执行方式,能灵活应对不同的场景:
invoke/ainvoke:最基础的调用,给一个输入,返回完整输出。同步异步都有。batch/abatch:批量处理多个输入,能有效提升效率。Runnable接口内置了优化的并行能力。stream/astream:流式处理,输出生成的同时逐步返回结果。聊天应用里特别有用,能实现类似“打字”的效果。
// 使用 invoke 返回完整的输出
const result = await runnable.invoke({ topic: "人工智能的未来" });
console.log(result);
// 使用 batch 批量处理多个输入
const runnableInput = RunnableLambda.from(text: string): string => text.toUpperCase());
const inputs = ["hello", "world", "langchain"];
const results = await runnableInput.batch(inputs);
// 使用 stream 逐字输出结果
const result = await runnable.stream({ question: "LangChain是什么" });
for await (const chunk of result) {
process.stdout.write(chunk); // 会像打字一样,逐字输出
}
Runnable 组件
除了模型、提示词这些基础组件本身就已经实现了 Runnable 接口,LangChain 还内置了不少专门的 Runnable 类,用来处理更复杂的逻辑:
RunnableSequence:按顺序执行一系列Runnable,上一个的输出就是下一个的输入。用|创建的链,本质上就是它。RunnableParallel:并行执行多个Runnable,适合需要同时获取多方面信息的场景。RunnableLambda:把任意普通函数转成Runnable,方便在链条中插入自定义逻辑。RunnablePassthrough:透传数据,常用来在链条中传递或添加额外的上下文信息。RunnableBranch:实现条件分支逻辑,根据输入动态选择要执行的Runnable。
总结
以上就是 Runnable 的核心内容。现在 AI 编程工具越来越强,但在日常开发中,理解这些底层原理依然有意义:当你看到 AI 生成的代码时,你不仅知道它“在做什么”,更能理解它“为什么这么写”。