LangGraph.js多Agent工作流实战:构建企业级AI协作系统
在实际企业级AI应用开发中,单一AI模型往往难以应对复杂的业务场景。当需要处理多步骤决策、状态流转和专业化分工时,传统的单体Agent架构就显得力不从心。LangGraph.js作为LangChain生态中的重要组件,专门为解决这类复杂工作流问题而生,通过图结构将多个专业化Agent连接起来,实现真正的智能协作系统。
本文将从企业级实战角度,深入解析LangGraph.js在多Agent工作流、状态机设计和复杂任务处理中的应用。无论你是AI应用开发者还是技术决策者,都能通过本文掌握构建生产级AI Agent系统的核心技能。
1. LangGraph.js与多Agent工作流核心概念
1.1 什么是LangGraph.js
LangGraph.js是LangChain生态系统中的一个开源框架,专门用于构建包含循环和状态管理的LLM工作流。与传统的线性处理流程不同,LangGraph.js允许开发者以图的形式定义Agent之间的交互关系,每个节点代表一个独立的AI Agent或处理单元,边则定义了控制流和数据流转路径。
从技术架构角度看,LangGraph.js的核心价值在于它提供了状态机(State Machine)的编程范式。在这种范式下,每个Agent节点可以拥有独立的状态、提示词、工具集和LLM模型,而整个系统的状态变迁则通过明确定义的转移规则来控制。这种设计使得复杂的长周期任务能够被分解为可管理的子任务,由专门的Agent负责处理。
1.2 多Agent工作流的业务价值
在企业级应用中,多Agent架构解决了单体Agent面临的几个关键挑战。首先是专业化分工问题,不同的Agent可以针对特定领域进行优化,比如数据分析Agent、文案生成Agent、代码审查Agent等,每个Agent只需专注于自己最擅长的任务。
其次是系统可靠性的提升。在单体Agent架构中,一个环节的失败可能导致整个流程中断。而多Agent系统中,单个Agent的故障可以通过重试机制或备用Agent来容错, supervisor Agent可以监控整个系统的运行状态并做出智能调度决策。
最后是开发维护的便捷性。多Agent设计允许团队并行开发和测试各个组件,每个Agent可以独立迭代优化,而不影响整个系统的稳定性。这种模块化架构特别适合大型项目的长期演进。
1.3 状态机在AI工作流中的重要性
状态机是多Agent工作流的核心理论基础。在LangGraph.js中,状态机通过明确定义的状态集合、转移条件和动作来实现复杂的业务流程控制。与传统的if-else逻辑相比,状态机模型具有更好的可维护性和可扩展性。
典型的三段式状态机包括:状态定义(State Definition)、转移矩阵(Transition Matrix)和状态动作(State Action)。在AI工作流中,状态可以表示为任务的不同阶段,转移条件由LLM的判断或规则引擎决定,而状态动作则对应各个Agent的执行逻辑。
这种设计模式特别适合处理需要多轮交互、条件分支和异常处理的复杂场景,比如客户服务流程、内容审核流水线、智能数据分析等企业级应用。
2. 环境准备与项目初始化
2.1 技术栈要求与版本兼容性
在开始LangGraph.js项目前,需要确保开发环境满足以下要求:
- Node.js 18.0及以上版本(推荐使用LTS版本)
- npm 8.0+ 或 yarn 1.22+
- 支持ES6模块的现代浏览器或Node.js环境
- 可选的TypeScript支持(推荐用于企业级项目)
LangGraph.js本身有特定的版本依赖关系,当前稳定版本与LangChain.js生态保持同步。在实际项目中,建议锁定关键依赖的版本以避免兼容性问题。
2.2 项目初始化与依赖安装
创建一个新的LangGraph.js项目可以从空白目录开始,也可以基于官方模板。以下是标准初始化流程:
# 创建项目目录 mkdir langgraph-enterprise-demo cd langgraph-enterprise-demo # 初始化npm项目 npm init -y # 安装核心依赖 npm install @langchain/langgraph @langchain/core npm install @langchain/openai # 如果使用OpenAI模型 # 开发依赖(TypeScript项目) npm install -D typescript @types/node ts-node对于企业级项目,推荐使用TypeScript以获得更好的类型安全和开发体验:
// tsconfig.json { "compilerOptions": { "target": "ES2020", "module": "CommonJS", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"], "exclude": ["node_modules", "dist"] }2.3 环境变量与API配置
AI项目通常需要配置多个API密钥和环境变量。建议使用dotenv管理敏感信息:
# 安装dotenv npm install dotenv创建环境配置文件:
// src/config/env.js import { config } from 'dotenv'; config(); export const ENV = { OPENAI_API_KEY: process.env.OPENAI_API_KEY, ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY, LANGSMITH_API_KEY: process.env.LANGSMITH_API_KEY, // 其他环境变量... }; // 验证必需的环境变量 const requiredEnvVars = ['OPENAI_API_KEY']; requiredEnvVars.forEach(varName => { if (!ENV[varName]) { throw new Error(`Missing required environment variable: ${varName}`); } });对应的.env文件示例:
# .env OPENAI_API_KEY=your_openai_api_key_here ANTHROPIC_API_KEY=your_anthropic_api_key_here LANGSMITH_API_KEY=your_langsmith_api_key_here3. LangGraph.js核心架构与状态机原理
3.1 图结构定义与节点设计
LangGraph.js的核心是图(Graph)概念,图由节点(Nodes)和边(Edges)组成。每个节点代表一个处理单元,可以是Agent、工具调用或条件判断。边定义了节点之间的流转路径和控制逻辑。
基础图结构定义示例:
// src/graphs/base-graph.ts import { StateGraph, END } from '@langchain/langgraph'; // 定义状态接口 interface WorkflowState { messages: Array<{ role: string; content: string }>; currentTask: string; results: Record<string, any>; nextStep?: string; } // 创建图实例 const workflowGraph = new StateGraph<WorkflowState>({ channels: { messages: { reducer: (x, y) => x.concat(y), default: () => [], }, currentTask: { reducer: (x, y) => y || x, default: () => '', }, results: { reducer: (x, y) => ({ ...x, ...y }), default: () => ({}), } } });3.2 状态管理与数据流
LangGraph.js的状态管理采用通道(Channels)机制,每个通道对应状态的一个属性。这种设计支持复杂的数据流模式,包括广播、聚合和条件转发。
状态通道的配置决定了数据如何在节点间传递:
// 状态通道配置详解 const stateConfig = { channels: { // 消息通道:累积所有消息 messages: { reducer: (existing, newMessages) => { // 合并消息,避免重复 return [...existing, ...newMessages].filter((msg, index, arr) => index === arr.findIndex(m => m.content === msg.content && m.role === msg.role ) ); }, default: () => [], }, // 任务状态通道:每次更新覆盖前值 taskStatus: { reducer: (_, newStatus) => newStatus, default: () => 'pending', }, // 结果通道:深度合并对象 results: { reducer: (existing, newResults) => ({ ...existing, ...newResults, }), default: () => ({}), } } };3.3 条件路由与循环控制
条件路由是多Agent工作流的关键特性,允许根据当前状态动态决定下一步执行哪个节点。LangGraph.js提供了灵活的路由机制:
// 条件路由示例 const routeBasedOnStatus = (state: WorkflowState) => { const { taskStatus, results } = state; if (taskStatus === 'needs_review') { return 'review_agent'; } if (results.error) { return 'error_handler'; } if (taskStatus === 'completed') { return END; } return 'next_processing_agent'; }; // 将路由函数添加到图中 workflowGraph.addConditionalEdges( 'primary_agent', routeBasedOnStatus, { review_agent: 'review_agent', error_handler: 'error_handler', next_processing_agent: 'next_processing_agent', [END]: END } );4. 企业级多Agent系统实战案例
4.1 智能内容审核工作流设计
以下是一个完整的内容审核多Agent系统实现,包含多个专业化Agent协作:
// src/agents/content-moderation.ts import { ChatOpenAI } from '@langchain/openai'; import { BaseMessage, HumanMessage } from '@langchain/core/messages'; // 定义内容审核状态 interface ModerationState { content: string; contentType: 'text' | 'image' | 'video'; riskLevel: 'low' | 'medium' | 'high'; violations: string[]; reviewDecision?: 'approve' | 'reject' | 'human_review'; moderatorNotes: string[]; } // 1. 风险评估Agent class RiskAssessmentAgent { private llm: ChatOpenAI; constructor() { this.llm = new ChatOpenAI({ modelName: 'gpt-4', temperature: 0.1, }); } async assessRisk(state: ModerationState): Promise<Partial<ModerationState>> { const prompt = `你是一个专业的内容风险评估专家。请分析以下内容的风险等级: 内容类型:${state.contentType} 待审核内容:${state.content} 请评估风险等级(low/medium/high)并列出可能的违规类型。`; const response = await this.llm.invoke([ new HumanMessage(prompt) ]); // 解析LLM响应,提取风险评估结果 const riskMatch = response.content.match(/风险等级[::]\s*(\w+)/i); const riskLevel = riskMatch ? riskMatch[1].toLowerCase() as 'low' | 'medium' | 'high' : 'medium'; const violationsMatch = response.content.match(/违规类型[::]([^]+?)(?=\n\n|$)/i); const violations = violationsMatch ? violationsMatch[1].split(/[,\n]/).map(v => v.trim()).filter(Boolean) : []; return { riskLevel, violations, moderatorNotes: [`风险评估完成:${riskLevel}风险`] }; } } // 2. 详细审核Agent class DetailedModerationAgent { private llm: ChatOpenAI; constructor() { this.llm = new ChatOpenAI({ modelName: 'gpt-4', temperature: 0.1, }); } async performDetailedReview(state: ModerationState): Promise<Partial<ModerationState>> { const prompt = `作为内容审核专家,请对以下内容进行详细审核: 内容:${state.content} 已识别风险:${state.riskLevel} 可疑违规:${state.violations.join(', ')} 请给出最终审核决定(approve/reject/human_review)并说明理由。`; const response = await this.llm.invoke([ new HumanMessage(prompt) ]); const decisionMatch = response.content.match(/审核决定[::]\s*(\w+)/i); const reviewDecision = decisionMatch ? decisionMatch[1].toLowerCase() as 'approve' | 'reject' | 'human_review' : 'human_review'; return { reviewDecision, moderatorNotes: [ ...state.moderatorNotes, `详细审核完成:建议${reviewDecision}`, `审核理由:${response.content}` ] }; } } // 3. 构建完整审核工作流图 import { StateGraph, END } from '@langchain/langgraph'; export function createModerationWorkflow() { const workflow = new StateGraph<ModerationState>({ channels: { content: { reducer: (x, y) => y || x, default: () => '' }, contentType: { reducer: (x, y) => y || x, default: () => 'text' as const }, riskLevel: { reducer: (x, y) => y || x, default: () => 'medium' as const }, violations: { reducer: (x, y) => y || x, default: () => [] }, reviewDecision: { reducer: (x, y) => y || x }, moderatorNotes: { reducer: (x, y) => [...x, ...y], default: () => [] }, } }); const riskAgent = new RiskAssessmentAgent(); const detailAgent = new DetailedModerationAgent(); // 添加节点 workflow.addNode('risk_assessment', async (state) => { return await riskAgent.assessRisk(state); }); workflow.addNode('detailed_review', async (state) => { return await detailAgent.performDetailedReview(state); }); workflow.addNode('human_review', async (state) => { // 模拟人工审核接口 return { moderatorNotes: [...state.moderatorNotes, '转交人工审核'], reviewDecision: 'human_review' as const }; }); // 设置边和条件路由 workflow.setEntryPoint('risk_assessment'); workflow.addEdge('risk_assessment', 'detailed_review'); workflow.addConditionalEdges('detailed_review', (state) => state.reviewDecision === 'human_review' ? 'human_review' : END, { human_review: 'human_review', [END]: END } ); workflow.addEdge('human_review', END); return workflow.compile(); }4.2 多Agent协作配置与执行
创建完整的工作流执行器:
// src/workflows/moderation-executor.ts import { createModerationWorkflow } from '../agents/content-moderation'; export class ModerationWorkflowExecutor { private workflow; constructor() { this.workflow = createModerationWorkflow(); } async executeModeration(content: string, contentType: 'text' | 'image' | 'video' = 'text') { const initialState = { content, contentType, riskLevel: 'medium' as const, violations: [], moderatorNotes: [`开始审核${contentType}内容`] }; try { const finalState = await this.workflow.invoke(initialState); return { decision: finalState.reviewDecision, riskLevel: finalState.riskLevel, violations: finalState.violations, notes: finalState.moderatorNotes, content: finalState.content }; } catch (error) { console.error('审核工作流执行失败:', error); return { decision: 'human_review' as const, riskLevel: 'high' as const, violations: ['系统错误'], notes: [`工作流执行异常: ${error.message}`], content }; } } } // 使用示例 async function demoModeration() { const executor = new ModerationWorkflowExecutor(); const testContent = "这是一段需要审核的文本内容,包含一些敏感信息..."; const result = await executor.executeModeration(testContent); console.log('审核结果:', { 决定: result.decision, 风险等级: result.riskLevel, 违规项: result.violations, 处理记录: result.notes }); }4.3 工作流监控与可观测性
企业级应用需要完善的监控体系,LangGraph.js与LangSmith集成提供了强大的可观测性:
// src/monitoring/langsmith-setup.ts import { LangChainTracer } from '@langchain/core/tracers'; import { Environment } from '../config/env'; export function setupTracing() { if (Environment.LANGSMITH_API_KEY) { const tracer = new LangChainTracer({ projectName: 'enterprise-moderation-system', apiUrl: 'https://api.smith.langchain.com', apiKey: Environment.LANGSMITH_API_KEY, }); return tracer; } console.warn('LangSmith API密钥未配置,追踪功能已禁用'); return null; } // 增强的工作流执行器 with tracing export class TracedModerationExecutor extends ModerationWorkflowExecutor { private tracer: any; constructor() { super(); this.tracer = setupTracing(); } async executeModerationWithTrace(content: string, contentType: 'text' | 'image' | 'video' = 'text') { const config = this.tracer ? { callbacks: [this.tracer] } : {}; const initialState = { content, contentType, riskLevel: 'medium' as const, violations: [], moderatorNotes: [`开始审核${contentType}内容`] }; const finalState = await this.workflow.invoke(initialState, config); // 记录自定义指标 this.recordMetrics(finalState); return finalState; } private recordMetrics(state: any) { // 记录业务指标到监控系统 const metrics = { processingTime: Date.now() - state.startTime, riskLevel: state.riskLevel, decision: state.reviewDecision, violationCount: state.violations.length }; // 发送到监控系统(示例) console.log('业务指标:', metrics); } }5. 高级特性:层次化Agent团队
5.1 嵌套工作流设计
对于复杂业务场景,可以使用层次化的Agent团队结构,让高级Agent管理下级Agent团队:
// src/agents/hierarchical-team.ts interface TeamWorkflowState { overallTask: string; subTasks: Array<{ id: string; description: string; status: string }>; assignedAgents: Record<string, string>; results: Record<string, any>; } // 团队主管Agent class TeamSupervisorAgent { async decomposeTask(state: TeamWorkflowState): Promise<Partial<TeamWorkflowState>> { // 分析总体任务,拆分子任务 const prompt = `作为团队主管,请将以下任务分解为可执行的子任务: 总体任务:${state.overallTask} 请列出3-5个关键子任务,并为每个任务分配合适的专家类型。`; // LLM调用和任务分解逻辑... return { subTasks: [ { id: 'task1', description: '数据收集与清洗', status: 'pending' }, { id: 'task2', description: '分析与洞察提取', status: 'pending' }, { id: 'task3', description: '报告生成与美化', status: 'pending' } ], assignedAgents: { task1: 'data_specialist', task2: 'analysis_expert', task3: 'report_generator' } }; } } // 子工作流定义 class DataSpecialistWorkflow { // 数据专家专用工作流... } // 构建层次化工作流图 export function createHierarchicalTeamWorkflow() { const workflow = new StateGraph<TeamWorkflowState>({ // 状态通道配置... }); const supervisor = new TeamSupervisorAgent(); workflow.addNode('task_decomposition', async (state) => { return await supervisor.decomposeTask(state); }); // 更多节点和边配置... return workflow.compile(); }5.2 动态Agent调度
实现基于负载和能力的动态Agent调度机制:
// src/agents/dynamic-scheduler.ts interface AgentCapability { agentId: string; capabilities: string[]; currentLoad: number; maxLoad: number; } export class DynamicAgentScheduler { private availableAgents: AgentCapability[] = []; registerAgent(agentId: string, capabilities: string[], maxLoad: number = 5) { this.availableAgents.push({ agentId, capabilities, currentLoad: 0, maxLoad }); } findBestAgent(requiredCapabilities: string[]): string | null { const suitableAgents = this.availableAgents.filter(agent => requiredCapabilities.every(cap => agent.capabilities.includes(cap)) && agent.currentLoad < agent.maxLoad ); if (suitableAgents.length === 0) { return null; } // 选择负载最轻的Agent const bestAgent = suitableAgents.reduce((prev, current) => prev.currentLoad < current.currentLoad ? prev : current ); bestAgent.currentLoad++; return bestAgent.agentId; } releaseAgent(agentId: string) { const agent = this.availableAgents.find(a => a.agentId === agentId); if (agent && agent.currentLoad > 0) { agent.currentLoad--; } } }6. 性能优化与生产环境最佳实践
6.1 并发处理与资源管理
企业级应用需要处理高并发请求,合理的资源管理至关重要:
// src/optimization/concurrent-executor.ts export class ConcurrentWorkflowExecutor { private semaphore: Semaphore; private workflow; constructor(maxConcurrent: number = 10) { this.semaphore = new Semaphore(maxConcurrent); this.workflow = createModerationWorkflow(); } async executeBatch(contents: string[]): Promise<any[]> { const promises = contents.map(content => this.executeWithLimit(content) ); return Promise.all(promises); } private async executeWithLimit(content: string): Promise<any> { await this.semaphore.acquire(); try { return await this.workflow.invoke({ content, contentType: 'text', riskLevel: 'medium', violations: [], moderatorNotes: ['批量处理任务'] }); } finally { this.semaphore.release(); } } } // 简单的信号量实现 class Semaphore { private tasks: (() => void)[] = []; private count: number; constructor(count: number) { this.count = count; } acquire(): Promise<void> { return new Promise(resolve => { if (this.count > 0) { this.count--; resolve(); } else { this.tasks.push(resolve); } }); } release(): void { this.count++; if (this.tasks.length > 0) { this.count--; const next = this.tasks.shift(); if (next) next(); } } }6.2 缓存策略与成本优化
减少不必要的LLM调用可以显著降低运营成本:
// src/optimization/caching-strategy.ts import NodeCache from 'node-cache'; export class IntelligentCacheManager { private cache: NodeCache; private similarityThreshold: number = 0.8; constructor() { this.cache = new NodeCache({ stdTTL: 3600 }); // 1小时缓存 } async getCachedResponse(prompt: string, similarityCheck: boolean = true): Promise<string | null> { const exactKey = this.generateKey(prompt); const exactMatch = this.cache.get<string>(exactKey); if (exactMatch) { return exactMatch; } if (similarityCheck) { // 相似度匹配逻辑(简化版) const similarKey = this.findSimilarKey(prompt); if (similarKey) { return this.cache.get<string>(similarKey) || null; } } return null; } setCachedResponse(prompt: string, response: string): void { const key = this.generateKey(prompt); this.cache.set(key, response); } private generateKey(prompt: string): string { // 生成基于内容的哈希键 return require('crypto').createHash('md5').update(prompt).digest('hex'); } private findSimilarKey(prompt: string): string | null { // 简化的相似度查找实现 // 实际项目中可以使用更复杂的文本相似度算法 const keys = this.cache.keys(); for (const key of keys) { // 基础相似度检查 if (this.calculateSimilarity(prompt, key) > this.similarityThreshold) { return key; } } return null; } private calculateSimilarity(text1: string, text2: string): number { // 简化的相似度计算 const words1 = new Set(text1.split(/\s+/)); const words2 = new Set(text2.split(/\s+/)); const intersection = new Set([...words1].filter(x => words2.has(x))); const union = new Set([...words1, ...words2]); return intersection.size / union.size; } }6.3 错误处理与重试机制
健壮的错误处理是生产系统的必备特性:
// src/error-handling/retry-strategy.ts export class ExponentialBackoffRetry { private maxRetries: number; private baseDelay: number; constructor(maxRetries: number = 3, baseDelay: number = 1000) { this.maxRetries = maxRetries; this.baseDelay = baseDelay; } async executeWithRetry<T>( operation: () => Promise<T>, shouldRetry: (error: any) => boolean = () => true ): Promise<T> { let lastError: any; for (let attempt = 0; attempt <= this.maxRetries; attempt++) { try { return await operation(); } catch (error) { lastError = error; if (attempt === this.maxRetries || !shouldRetry(error)) { break; } const delay = this.baseDelay * Math.pow(2, attempt); console.warn(`操作失败,${delay}ms后重试 (尝试 ${attempt + 1}/${this.maxRetries})`, error); await this.delay(delay); } } throw lastError; } private delay(ms: number): Promise<void> { return new Promise(resolve => setTimeout(resolve, ms)); } } // 增强的工作流执行器 with retry export class RobustWorkflowExecutor { private retryStrategy: ExponentialBackoffRetry; constructor() { this.retryStrategy = new ExponentialBackoffRetry(); } async executeRobustly(workflow: any, initialState: any): Promise<any> { return this.retryStrategy.executeWithRetry( () => workflow.invoke(initialState), (error) => { // 只对网络错误和限流错误重试 return error.code === 'NETWORK_ERROR' || error.code === 'RATE_LIMIT' || error.message?.includes('timeout'); } ); } }7. 常见问题与排查指南
7.1 典型错误场景与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 工作流卡在某个节点 | 节点逻辑死循环或等待超时 | 检查条件路由逻辑,添加超时机制 |
| Agent响应时间过长 | LLM API延迟或网络问题 | 实现请求超时,添加重试机制 |
| 状态数据丢失 | 通道配置错误或reducer逻辑问题 | 验证状态通道配置,检查reducer函数 |
| 内存使用持续增长 | 状态累积未清理或内存泄漏 | 实现状态清理策略,监控内存使用 |
7.2 调试技巧与工具使用
使用LangSmith进行详细的执行追踪:
// src/debugging/tracing-debug.ts export async function debugWorkflowExecution(workflow: any, input: any) { // 启用详细日志记录 const config = { callbacks: [ { handleChainStart(chain: any) { console.log(`🔗 链开始: ${chain.name}`); }, handleChainEnd(output: any) { console.log(`✅ 链结束:`, output); }, handleLLMStart(llm: any, prompts: string[]) { console.log(`🤖 LLM调用: ${llm.modelName}`); console.log(`提示词:`, prompts); } } ] }; return workflow.invoke(input, config); }7.3 性能监控指标
建立关键性能指标监控体系:
// src/monitoring/performance-metrics.ts export class WorkflowMetrics { private metrics: Map<string, number[]> = new Map(); recordMetric(metricName: string, value: number) { if (!this.metrics.has(metricName)) { this.metrics.set(metricName, []); } this.metrics.get(metricName)!.push(value); } getSummary(): Record<string, { avg: number; min: number; max: number }> { const summary: Record<string, any> = {}; for (const [name, values] of this.metrics) { if (values.length > 0) { summary[name] = { avg: values.reduce((a, b) => a + b, 0) / values.length, min: Math.min(...values), max: Math.max(...values), count: values.length }; } } return summary; } } // 集成到工作流执行中 export class InstrumentedWorkflowExecutor { private metrics: WorkflowMetrics; constructor() { this.metrics = new WorkflowMetrics(); } async executeWithMetrics(workflow: any, input: any) { const startTime = Date.now(); try { const result = await workflow.invoke(input); const duration = Date.now() - startTime; this.metrics.recordMetric('execution_time', duration); this.metrics.recordMetric('success_rate', 1); return result; } catch (error) { this.metrics.recordMetric('success_rate', 0); this.metrics.recordMetric('error_count', 1); throw error; } } getPerformanceReport() { return this.metrics.getSummary(); } }通过本文的完整实战指南,你应该已经掌握了使用LangGraph.js构建企业级多Agent系统的核心技能。从基础的状态机原理到高级的层次化团队设计,从单机部署到生产环境优化,这些经验都是在实际项目中经过验证的最佳实践。
在实际应用中,建议先从简单的双Agent协作开始,逐步增加复杂度。重点关注状态管理、错误处理和性能监控这三个核心方面,它们决定了系统在真实业务场景中的稳定性和可用性。