创建时间: 2026-03-29最后更新: 2026-09-10作者: yangbo(9e98781e0)
1. 统一接口
前面已经分别使用过 Prompt Template、ChatModel 和 Output Parser。把它们放进一次完整调用时,可以依次执行三个步骤:
manual.ts
1const promptValue = await prompt.invoke({2input: '什么是 Runnable?',3})4const message = await model.invoke(promptValue)5const text = await parser.invoke(message)
这段代码有一个值得注意的细节:prompt、model 和 parser 的职责完全不同,却都提供了 invoke()。
它们接收的数据也不同。Prompt 接收模板变量,模型接收 Prompt 或消息,Parser 接收模型消息。LangChain 让这些对象遵守同一套执行约定,因此调用方可以用一致的方式启动每个步骤。
当步骤继续增加时,手动调用会产生更多中间变量,还要反复把前一步的结果传给后一步:
code.ts
1input2-> prompt.invoke(input)3-> model.invoke(promptValue)4-> parser.invoke(message)5-> text
LCEL 可以把这段固定顺序直接描述成一条链:
lcel.ts
1const chain = prompt.pipe(model).pipe(parser)23const text = await chain.invoke({4input: '什么是 Runnable?',5})
LCEL 是 LangChain Expression Language 的缩写。它提供了一套组合可执行步骤的表达方式。在 JavaScript 中,最常用的组合方法是 .pipe()。
要理解 .pipe() 为什么能够连接 Prompt、模型和 Parser,我们需要先把 Runnable 接口讲清楚。
正在加载图示...
正在验证登录状态
请稍候,验证完成后将继续显示文章内容