LLM 节点集成
将大语言模型引入你的工作流,构建智能节点
📚 学习目标
学完这篇文章后,你将能够:
- 在图节点中实例化和调用 LLM(大语言模型)
- 编写 异步(Async) 节点函数
- 使用 LangChain Messages(HumanMessage, AIMessage)与模型交互
- 实现简单的内容生成与审核工作流
前置知识
在开始学习之前,建议先阅读:
1️⃣ 引入大脑:实例化 LLM
LangGraph 与 LangChain 生态完美集成。我们使用 ChatOpenAI 类来连接大模型。
import { ChatOpenAI } from '@langchain/openai';
// 实例化模型
// 这里可以使用任何兼容 OpenAI 接口的模型,如 gpt-4, qwen3-max 等
const llm = new ChatOpenAI({
model: 'qwen3-max', // 或 'gpt-4o'
apiKey: process.env.OPENAI_API_KEY // 通常从环境变量自动读取
});2️⃣ 异步节点(Async Nodes)
调用大模型是一个网络请求过程,因此我们的节点函数必须是异步的 (async/await)。
import { HumanMessage } from '@langchain/core/messages';
/**
* 输入处理节点:调用 LLM 生成内容
*/
const inputNode = async (state: typeof StateAnnotation.State) => {
// 1. 构造消息:将输入包装为 HumanMessage
const messages = [new HumanMessage(state.input)];
// 2. 调用模型:等待响应
const response = await llm.invoke(messages);
// response.content 包含模型的回复文本
return {
output: response.content,
// ...其他状态更新
}
}代码解析:
HumanMessage: 代表用户的输入。llm.invoke(): 发送消息并等待模型回复。返回的是AIMessage对象。
3️⃣ 多节点协作:生成与审核
一个常见的模式是将复杂的任务拆分为多个步骤。例如,一个节点负责生成内容,另一个节点负责审核内容。
生成节点
const generationNode = async (state: typeof StateAnnotation.State) => {
const res = await llm.invoke([new HumanMessage(state.input)]);
return { output: res.content };
}审核节点
审核节点会将上一步的输出 (state.output) 作为输入,要求 LLM 进行检查。
const validationNode = async (state: typeof StateAnnotation.State) => {
// 构造 prompt,将待审核内容嵌入其中
const prompt = `请检查以下内容是否有违禁词,直接回答"有"或"没有":${state.output}`;
const res = await llm.invoke([new HumanMessage(prompt)]);
return {
validationResult: res.content
}
}组装图
const graph = new StateGraph(StateAnnotation)
.addNode('generate', generationNode)
.addNode('validate', validationNode)
.addEdge(START, 'generate')
.addEdge('generate', 'validate')
.addEdge('validate', END)
.compile();下面的 Mermaid 图展示了这个流程:
💡 练习题
- 修改题:修改
validationNode,如果审核通过,在output后面追加 " [Verified]";如果审核不通过,将其清空。 - 思考:为什么我们要把生成和审核分开成两个节点,而不是在一个节点里做完?(参考答案:模块化、更清晰的逻辑分离、方便独立测试和调试、更好的容错性)。
📚 参考资源
项目代码
- 查看本节完整代码:quick-start/3.nodes.ts
✅ 总结
核心要点:
- 节点函数可以是
async的,这使得网路请求(如 LLM 调用)成为可能。 - 使用
HumanMessage和AIMessage等结构化对象与模型交互。 - 通过链式组合多个 LLM 节点,可以构建复杂的处理流水线(Pipeline)。
下一步:目前的图都是线性执行的。在下一篇文章《流程控制与路由》中,我们将学习如何根据条件让图走不同的路径,甚至实现循环和并行执行。
登录以继续阅读
解锁完整文档、代码示例及更多高级功能。