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
在链中传递数据而不做任何修改,通常用于透传原始输入到后续环节。