一、什么是 LangGraph 工作流?
它以图结构(graph) 为核心,将应用逻辑拆解为节点与边的组合,完美适配需要状态管理、循环逻辑或多主体协作的场景——比如智能代理(agent)交互、多角色工作流协同等。
核心特性
- 功能特点:支持循环、持久性和人工干预,适用于复杂的工作流自动化。
- 技术原理:基于图结构的状态管理,节点和边定义执行顺序,支持条件边和自定义函数。
- 应用场景:客户服务自动化、数据检索与分析、业务流程自动化等。
二、LangGraph 工作流实现(优化版代码)
1. 安装必要的 npm 包
pnpm add @types/node typescript tsx @langchain/core @langchain/langgraph @langchain/openai
pnpm add -D @types/node typescript
2. 初始化 TypeScript 配置
npx tsc --init
3. 入口文件(index.ts)- 优化后
修正语法错误、补充类型定义、完善注释,确保代码可直接运行,新增异常处理基础逻辑:
import { START, END, Annotation, StateGraph } from '@langchain/langgraph';
import { ChatOpenAI } from '@langchain/openai';
/**
* 1. 初始化 OpenAI 客户端
*/
const llm = new ChatOpenAI({
model: 'gpt-3.5-turbo',
temperature: 0.7,
apiKey: 'your-api-key', // 替换为个人 OpenAI API Key
configuration: {
baseUrl: 'https://api.openai.com/v1' // 默认为 OpenAI 官方地址,可根据代理调整
}
});
/**
* 2. 定义工作流状态(核心)
*/
const graphState = Annotation.root({
message: Annotation.string({
reducer: (a, b) => b ?? a,
default: () => ''
})
});
/**
* 3. 定义工作流节点(核心逻辑)
*/
const startNode = async (state: typeof graphState.State) => {
return { message: state.message }; // 传递初始消息,无额外处理
};
const llmNode = async (state: typeof graphState.State) => {
try {
const llmResponse = await llm.invoke(state.message);
return { message: llmResponse.content };
} catch (error) {
console.error('LLM 节点执行失败:', error);
return { message: '生成祝福语失败,请重试' }; // 异常处理,避免工作流中断
}
};
/**
* 4. 构建并编译工作流图
*/
const graph = new StateGraph(graphState)
.addNode('start', startNode)
.addNode('llm', llmNode)
.addEdge(START, 'start')
.addEdge('start', 'llm')
.addEdge('llm', END);
// 编译工作流,生成可调用的应用实例
const app = graph.compile();
/**
* 5. 调用工作流,传入初始参数
*/
const runWorkflow = async () => {
const result = await app.invoke({ message: '写个今日的祝福语' });
console.log('工作流执行完成,结果:', result.message);
};
// 执行工作流
runWorkflow();
5. 运行方式
# 方式1:直接运行(需 tsx 支持)
npx tsx index.ts
# 方式2:先编译为 JS,再运行
npx tsc
node dist/index.js