跳到主要内容

LCEL

LCEL (LangChain Expression Language) 是一种声明式语言,旨在使组合链(Chains)变得轻而易举。

为什么使用 LCEL?

LCEL 的核心思想是“管道”。受 Unix 管道符 | 的启发,LCEL 允许你将不同的组件(Prompt、Model、Parser 等)连接成一个整体,从而实现以下功能:

  • 流式支持:链中的每个环节都支持流式输出。
  • 并行执行:自动并行运行可以并行的步骤。
  • 重试与回退:轻松添加错误处理逻辑。

基础示例

通过 .pipe() 方法(在 TypeScript 中也可以使用管道符风格的组合),你可以快速构建一个处理流程。

lcel_chain.ts
import { ChatOpenAI } from "@langchain/openai";
import { ChatPromptTemplate } from "@langchain/core/prompts";
import { StringOutputParser } from "@langchain/core/output_parsers";

const model = new ChatOpenAI({
model: "Qwen3-30B-A3B-AWQ",
temperature: 0,
configuration: {
baseURL: 'http://192.168.3.202:30001/v1',
},
apiKey: '11'
});

const prompt = ChatPromptTemplate.fromMessages([
["system", "你是一个幽默的脱口秀演员。"],
["human", "请讲一个关于{topic}的冷笑话。"],
]);

const outputParser = new StringOutputParser();

// 使用 LCEL (管道符) 连接组件
const chain = prompt.pipe(model).pipe(outputParser);

// 直接调用 Chain
console.log("--- 运行链 ---");
const result = await chain.invoke({
topic: "程序员",
});

console.log(result);

核心原语

  • Prompt: 输入变量,输出提示。
  • Model: 输入提示,输出消息(AIMessage)。
  • Output Parser: 输入消息,输出模型解析后的结果(如字符串、JSON 列表等)。
  • RunnableSequence: 由多个步骤组成的完整执行序列。

常用操作

RunnableParallel

当你需要并行执行多个不相关的任务(如同时搜索网页和查询数据库)并将结果汇总时,可以使用 RunnableParallel

RunnablePassthrough

在链中传递数据而不做任何修改,通常用于透传原始输入到后续环节。