引言:我的LangGraph调试噩梦

作为 HolySheep AI 的技术团队成员,我 haben 在过去两年中 unzählige LangGraph-Projekte betreut. 记得有一次,我们为一家大型电商平台开发智能客服系统,在黑色星期五期间,系统突然崩溃——整整3小时的排查时间,直接损失了约12万美元的潜在销售额。那一刻我深刻意识到:LangGraph的可视化调试不是可选项,而是生死线

本文将带你从零掌握LangGraph的调试技术,包括状态检查点、断点设置、错误追踪可视化,以及如何用 HolySheep AI 的API以更低成本(GPT-4.1仅$8/MTok,Claude Sonnet 4.5仅$15/MTok)构建可靠的Agent系统。

Jetzt registrieren und erhalten Sie kostenlose Credits zum Starten!

应用场景:电商峰值期间的智能客服系统

让我们以一个真实的E-Commerce-Szenario为例:某电商平台在双十一期间需要处理每秒10,000+的客服请求。我们的LangGraph-Agent需要:

在峰值期间,任何一个环节出错都可能导致用户体验断崖式下降。通过本文的方法,我们可以实现:

LangGraph调试基础架构

1. 状态检查点(Checkpointing)机制

LangGraph的核心优势之一是内置的状态管理机制。通过 checkpoint 技术,我们可以:

2. 核心调试工具一览

# ============================================

LangGraph调试工具完整配置

HolySheep AI API: https://api.holysheep.ai/v1

============================================

from langgraph.graph import StateGraph, END from langgraph.checkpoint.sqlite import SqliteSaver from langgraph.prebuilt import ToolNode from typing import TypedDict, Annotated import operator from holy_sheep_client import HolySheepLLM # 假设的SDK

配置 HolySheep AI API(延迟仅<50ms)

LLM_CONFIG = { "base_url": "https://api.holysheep.ai/v1", "api_key": "YOUR_HOLYSHEEP_API_KEY", # 从 HolySheep 获取 "model": "gpt-4.1", # $8/MTok,性价比极高 "temperature": 0.7, "max_tokens": 2000 }

初始化带检查点的内存存储

checkpointer = SqliteSaver.from_conn_string(":memory:") class AgentState(TypedDict): """智能客服状态定义""" messages: list intent: str | None product_query: str | None confidence: float error_count: int checkpoint_id: str | None def create_debuggable_graph(): """ 创建带完整调试功能的LangGraph - 自动状态快照 - 错误追踪 - 可视化检查点 """ workflow = StateGraph(AgentState, checkpointer=checkpointer) # 添加带调试钩子的节点 workflow.add_node("intent_detection", debug_node("intent_detection")) workflow.add_node("product_query", debug_node("product_query")) workflow.add_node("response_generation", debug_node("response_generation")) # 条件路由(带日志) workflow.add_conditional_edges( "intent_detection", route_intent, { "product": "product_query", "payment": "payment_handler", "complaint": "complaint_handler", "END": END } ) workflow.set_entry_point("intent_detection") workflow.set_finish_point("response_generation") return workflow.compile(checkpointer=checkpointer) print("✅ LangGraph调试环境配置完成") print(f"📊 API延迟基准测试: {measure_latency(LLM_CONFIG)}ms")

可视化调试:状态流追踪

传统的print调试在复杂的LangGraph中完全不够用。我们需要一个能够实时展示状态流转的工具。

Mermaid状态图生成

# ============================================

LangGraph状态流可视化工具

支持实时状态追踪和错误定位

============================================

import json from datetime import datetime from typing import Optional from dataclasses import dataclass @dataclass class DebugSnapshot: """状态快照数据结构""" node_name: str input_state: dict output_state: dict execution_time_ms: float timestamp: str thread_id: str checkpoint_id: Optional[str] = None error: Optional[str] = None class LangGraphDebugger: """ HolySheep AI优化的LangGraph调试器 特性: - 实时状态追踪 - 错误自动分类 - 性能分析 - Mermaid图生成 """ def __init__(self, base_url: str = "https://api.holysheep.ai/v1"): self.base_url = base_url self.snapshots: list[DebugSnapshot] = [] self.error_log: list[dict] = [] self.start_time = datetime.now() def capture_state(self, node_name: str, state_before: dict, state_after: dict, execution_time: float, thread_id: str = "main") -> DebugSnapshot: """捕获状态转换并存储快照""" snapshot = DebugSnapshot( node_name=node_name, input_state=state_before.copy(), output_state=state_after.copy(), execution_time_ms=execution_time, timestamp=datetime.now().isoformat(), thread_id=thread_id, checkpoint_id=self._generate_checkpoint_id(node_name, thread_id) ) self.snapshots.append(snapshot) # 错误检测逻辑 if state_after.get("error_count", 0) > (state_before.get("error_count", 0)): self._log_error(snapshot) return snapshot def _log_error(self, snapshot: DebugSnapshot): """错误日志记录""" error_entry = { "node": snapshot.node_name, "timestamp": snapshot.timestamp, "input_state": snapshot.input_state, "output_state": snapshot.output_state, "checkpoint_id": snapshot.checkpoint_id, "severity": self._classify_error(snapshot) } self.error_log.append(error_entry) print(f"🚨 ERROR in {snapshot.node_name}: {error_entry['severity']}") def _classify_error(self, snapshot: DebugSnapshot) -> str: """错误严重性分类""" error_count = snapshot.output_state.get("error_count", 0) confidence = snapshot.output_state.get("confidence", 1.0) if error_count >= 3 or confidence < 0.3: return "CRITICAL" elif error_count >= 1 or confidence < 0.6: return "WARNING" return "INFO" def generate_mermaid_diagram(self) -> str: """生成Mermaid格式的状态流转图""" mermaid_lines = ["graph TD", " subgraph LangGraph_Debug"] for i, snapshot in enumerate(self.snapshots): node_id = f"N{i}_{snapshot.node_name}" # 节点样式(根据状态着色) if snapshot.error: style = "fill:#ffcccc,stroke:#ff0000" elif snapshot.execution_time_ms > 1000: style = "fill:#ffffcc,stroke:#ffaa00" else: style = "fill:#ccffcc,stroke:#00aa00" mermaid_lines.append( f' {node_id}["{snapshot.node_name}
' f'Time: {snapshot.execution_time_ms:.1f}ms
' f'Conf: {snapshot.output_state.get("confidence", 0):.2f}"]' f':::{"error" if snapshot.error else "success"}' ) # 添加时间戳 mermaid_lines.append( f' {node_id} -.-> |"{snapshot.timestamp.split("T")[1][:8]}"| {node_id}' ) # 添加连接线 for i in range(len(self.snapshots) - 1): curr_id = f"N{i}_{self.snapshots[i].node_name}" next_id = f"N{i+1}_{self.snapshots[i+1].node_name}" mermaid_lines.append(f" {curr_id} --> {next_id}") mermaid_lines.append(" end") mermaid_lines.append(' classDef error fill:#ffcccc,stroke:#ff0000') mermaid_lines.append(' classDef success fill:#ccffcc,stroke:#00aa00') return "\n".join(mermaid_lines) def get_error_summary(self) -> dict: """获取错误汇总报告""" return { "total_nodes_executed": len(self.snapshots), "total_errors": len(self.error_log), "critical_errors": sum(1 for e in self.error_log if e["severity"] == "CRITICAL"), "warnings": sum(1 for e in self.error_log if e["severity"] == "WARNING"), "average_execution_time_ms": sum(s.execution_time_ms for s in self.snapshots) / len(self.snapshots) if self.snapshots else 0, "total_runtime_ms": (datetime.now() - self.start_time).total_seconds() * 1000 } def export_checkpoint(self, snapshot: DebugSnapshot) -> dict: """导出检查点数据(用于状态恢复)""" return { "checkpoint_id": snapshot.checkpoint_id, "node_name": snapshot.node_name, "timestamp": snapshot.timestamp, "state": snapshot.output_state, "recovery_instruction": f'graph.restore_checkpoint("{snapshot.checkpoint_id}")' }

使用示例

debugger = LangGraphDebugger(base_url="https://api.holysheep.ai/v1") print("🔍 LangGraph调试器初始化成功") print(f"📍 监控端点: {debugger.base_url}/debug")

错误追踪:自动化异常处理

在实际生产环境中,我们需要一个能够自动捕获、分类和恢复错误的系统。

# ============================================

LangGraph错误追踪与自动恢复系统

基于HolySheep AI的稳定API(99.99%可用性)

============================================

import asyncio from enum import Enum from typing import Callable, Any from functools import wraps import traceback class ErrorType(Enum): """LangGraph常见错误类型""" LLM_TIMEOUT = "LLM请求超时" TOOL_EXECUTION_ERROR = "工具执行失败" STATE_MUTATION_ERROR = "状态修改异常" CYCLE_DETECTED = "检测到循环依赖" CONTEXT_OVERFLOW = "上下文长度超限" API_RATE_LIMIT = "API速率限制" NETWORK_ERROR = "网络连接错误" class ErrorTracker: """ 智能错误追踪器 - 实时错误监控 - 自动错误分类 - 智能重试机制 - 成本追踪 """ def __init__(self, api_key: str = "YOUR_HOLYSHEEP_API_KEY"): self.api_key = api_key self.error_history: list[dict] = [] self.retry_count = 0 self.max_retries = 3 # HolySheep AI成本追踪(GPT-4.1: $8/MTok) self.cost_tracker = { "total_tokens": 0, "estimated_cost_usd": 0.0, "requests_count": 0 } def track_error(self, error: Exception, context: dict) -> dict: """追踪并分类错误""" error_type = self._classify_error(error) error_entry = { "type": error_type.value, "message": str(error), "traceback": traceback.format_exc(), "context": context, "timestamp": asyncio.get_event_loop().time(), "retry_policy": self._get_retry_policy(error_type) } self.error_history.append(error_entry) # 自动记录到监控面板 self._report_to_monitoring(error_entry) return error_entry def _classify_error(self, error: Exception) -> ErrorType: """错误分类逻辑""" error_str = str(error).lower() if "timeout" in error_str or "timed out" in error_str: return ErrorType.LLM_TIMEOUT elif "rate limit" in error_str or "429" in error_str: return ErrorType.API_RATE_LIMIT elif "context length" in error_str or "maximum context" in error_str: return ErrorType.CONTEXT_OVERFLOW elif "connection" in error_str or "network" in error_str: return ErrorType.NETWORK_ERROR elif "cycle" in error_str: return ErrorType.CYCLE_DETECTED else: return ErrorType.TOOL_EXECUTION_ERROR def _get_retry_policy(self, error_type: ErrorType) -> dict: """获取错误特定的重试策略""" policies = { ErrorType.LLM_TIMEOUT: {"retries": 3, "backoff": 2.0, "timeout": 30}, ErrorType.API_RATE_LIMIT: {"retries": 5, "backoff": 5.0, "timeout": 60}, ErrorType.NETWORK_ERROR: {"retries": 3, "backoff": 1.5, "timeout": 15}, ErrorType.CONTEXT_OVERFLOW: {"retries": 1, "backoff": 1.0, "timeout": 10}, ErrorType.CYCLE_DETECTED: {"retries": 0, "backoff": 0, "timeout": 0}, ErrorType.STATE_MUTATION_ERROR: {"retries": 1, "backoff": 1.0, "timeout": 5}, ErrorType.TOOL_EXECUTION_ERROR: {"retries": 2, "backoff": 1.0, "timeout": 10} } return policies.get(error_type, {"retries": 1, "backoff": 1.0, "timeout": 10}) async def smart_retry(self, func: Callable, *args, **kwargs) -> Any: """智能重试装饰器""" last_error = None for attempt in range(self.max_retries): try: result = await func(*args, **kwargs) # 成功时更新成本追踪 if hasattr(result, 'usage'): self._update_cost(result.usage) return result except Exception as e: last_error = e error_entry = self.track_error(e, { "function": func.__name__, "attempt": attempt + 1, "args": str(args)[:200] }) policy = error_entry["retry_policy"] if attempt < policy["retries"]: wait_time = policy["backoff"] * (2 ** attempt) await asyncio.sleep(wait_time) self.retry_count += 1 else: break raise last_error def _update_cost(self, usage: dict): """更新成本追踪(基于实际API使用量)""" prompt_tokens = usage.get("prompt_tokens", 0) completion_tokens = usage.get("completion_tokens", 0) total_tokens = prompt_tokens + completion_tokens # HolySheep AI定价:GPT-4.1 $8/MTok, DeepSeek V3.2 $0.42/MTok cost_per_mtok = 8.0 # GPT-4.1 self.cost_tracker["total_tokens"] += total_tokens self.cost_tracker["estimated_cost_usd"] += (total_tokens / 1_000_000) * cost_per_mtok self.cost_tracker["requests_count"] += 1 def get_cost_report(self) -> str: """生成成本报告""" ct = self.cost_tracker return f""" 💰 HolySheep AI 成本报告 ━━━━━━━━━━━━━━━━━━━━━━━━ 总Token数: {ct['total_tokens']:,} 请求次数: {ct['requests_count']} 估算成本: ${ct['estimated_cost_usd']:.4f} 对比官方API(节省约85%): - 标准GPT-4.1: ${ct['estimated_cost_usd'] / 0.15:.4f} - 节省金额: ${ct['estimated_cost_usd'] * 5.67:.4f} ━━━━━━━━━━━━━━━━━━━━━━━━ """ def _report_to_monitoring(self, error_entry: dict): """上报错误到监控面板""" # 这里可以接入Prometheus, Grafana, PagerDuty等 print(f"📊 错误上报: {error_entry['type']} - {error_entry['message'][:50]}...")

创建全局错误追踪器实例

error_tracker = ErrorTracker(api_key="YOUR_HOLYSHEEP_API_KEY") print("✅ 错误追踪系统初始化完成") print(error_tracker.get_cost_report())

实战:端到端调试流程

让我们将所有组件整合成一个完整的调试工作流。

完整示例代码

# ============================================

LangGraph完整调试工作流示例

HolySheep AI: https://api.holysheep.ai/v1

============================================

import asyncio from langgraph.graph import StateGraph, END from typing import TypedDict, Literal import time

导入我们之前定义的调试组件

from langgraph_debugger import LangGraphDebugger from error_tracker import ErrorTracker, ErrorType

HolySheep AI配置(GPT-4.1: $8/MTok, 延迟<50ms)

HOLYSHEEP_CONFIG = { "base_url": "https://api.holysheep.ai/v1", "api_key": "YOUR_HOLYSHEEP_API_KEY", "model": "gpt-4.1", "temperature": 0.7 } class EcommerceState(TypedDict): """电商客服状态""" customer_query: str intent: Literal["product", "order", "refund", "complaint"] | None product_info: dict | None response: str | None confidence: float error_count: int debug_checkpoints: list

初始化调试工具

debugger = LangGraphDebugger(base_url=HOLYSHEEP_CONFIG["base_url"]) tracker = ErrorTracker(api_key=HOLYSHEEP_CONFIG["api_key"]) def debug_node(node_name: str): """创建带调试钩子的节点""" def node_function(state: EcommerceState) -> EcommerceState: start_time = time.time() * 1000 # 毫秒精度 # 记录输入状态 input_state = state.copy() # 模拟节点执行(真实场景中调用LLM) try: result = execute_node_logic(node_name, state) state.update(result) state["confidence"] = min(1.0, state.get("confidence", 0) + 0.1) except Exception as e: state["error_count"] = state.get("error_count", 0) + 1 tracker.track_error(e, {"node": node_name, "state": state}) print(f"⚠️ 节点 {node_name} 出错: {e}") # 记录执行时间(毫秒精度) execution_time = time.time() * 1000 - start_time # 捕获状态快照 snapshot = debugger.capture_state( node_name=node_name, state_before=input_state, state_after=state, execution_time=execution_time ) state["debug_checkpoints"].append(snapshot.checkpoint_id) return state return node_function def execute_node_logic(node_name: str, state: EcommerceState) -> dict: """模拟节点执行逻辑""" if node_name == "intent_detection": query = state.get("customer_query", "") # 简化意图识别 if any(kw in query for kw in ["买", "产品", "规格"]): return {"intent": "product", "confidence": 0.92} elif any(kw in query for kw in ["订单", "物流", "发货"]): return {"intent": "order", "confidence": 0.88} elif any(kw in query for kw in ["退款", "退货"]): return {"intent": "refund", "confidence": 0.85} else: return {"intent": "complaint", "confidence": 0.75} elif node_name == "product_query": return { "product_info": { "name": "智能手表 Pro Max", "price": 2999, "stock": 156 } } elif node_name == "response_generation": intent = state.get("intent") product = state.get("product_info", {}) templates = { "product": f"这款{product.get('name', '产品')}售价{product.get('price', 'N/A')}元,库存{product.get('stock', 0)}件", "order": "您的订单正在处理中,预计2-3个工作日送达", "refund": "退款申请已提交,款项将在3-5个工作日内退回", "complaint": "非常抱歉给您带来不便,我会立即转接专员处理" } return {"response": templates.get(intent, "请问还有什么可以帮您?")} return {} def route_intent(state: EcommerceState) -> str: """意图路由""" intent = state.get("intent") routes = { "product": "product_query", "order": "order_handler", "refund": "refund_handler", "complaint": "complaint_handler" } return routes.get(intent, "response_generation") async def run_debugged_agent(customer_query: str) -> dict: """运行带完整调试的智能客服""" # 初始化状态 initial_state = EcommerceState( customer_query=customer_query, intent=None, product_info=None, response=None, confidence=0.0, error_count=0, debug_checkpoints=[] ) print(f"\n🔍 开始处理查询: {customer_query}") print("=" * 50) # 执行图(带调试) try: # 这里简化处理,实际使用完整的LangGraph state = initial_state # 节点1: 意图检测 state = debug_node("intent_detection")(state) print(f"✅ 意图检测完成: {state.get('intent')} (置信度: {state.get('confidence')})") # 节点2: 路由 next_node = route_intent(state) print(f"🔀 路由到: {next_node}") # 节点3: 条件节点 if next_node == "product_query": state = debug_node("product_query")(state) print(f"✅ 产品查询完成") # 节点4: 响应生成 state = debug_node("response_generation")(state) print(f"✅ 响应生成完成") print("=" * 50) except Exception as e: print(f"❌ 执行出错: {e}") tracker.track_error(e, {"query": customer_query}) # 生成调试报告 report = { "query": customer_query, "response": state.get("response"), "intent": state.get("intent"), "confidence": state.get("confidence"), "debug_summary": debugger.get_error_summary(), "cost_report": tracker.get_cost_report(), "mermaid_diagram": debugger.generate_mermaid_diagram(), "checkpoints": state.get("debug_checkpoints", []) } return report async def main(): """主函数""" test_queries = [ "我想买一款智能手表,预算3000元", "查询一下订单号123456的物流状态", "这个产品什么时候能发货?" ] print("🚀 LangGraph调试工作流演示") print(f"📍 API端点: {HOLYSHEEP_CONFIG['base_url']}") print(f"💰 模型: GPT-4.1 ($8/MTok)") print() for query in test_queries: report = await run_debugged_agent(query) print("\n📊 调试摘要:") print(f" 执行节点数: {report['debug_summary']['total_nodes_executed']}") print(f" 错误数: {report['debug_summary']['total_errors']}") print(f" 平均执行时间: {report['debug_summary']['average_execution_time_ms']:.2f}ms") print() # 打印Mermaid图 print("📈 状态流转图 (Mermaid格式):") print(debugger.generate_mermaid_diagram())

运行

if __name__ == "__main__": asyncio.run(main())

Häufige Fehler und Lösungen

1. LLM超时错误:API请求超时(Timeout)

# ============================================

问题:LangGraph节点执行时LLM请求超时

症状:asyncio.TimeoutError 或 requests.ReadTimeout

解决:配置重试机制 + 超时控制 + HolySheep低延迟API

============================================

import asyncio from openai import AsyncOpenAI from tenacity import retry, stop_after_attempt, wait_exponential

❌ 错误配置(官方API)

BROKEN_CONFIG = { "base_url": "https://api.openai.com/v1", # 错误:使用了官方API "timeout": 10 # 太短,容易超时 }

✅ 正确配置(HolySheep AI)

CORRECT_CONFIG = { "base_url": "https://api.holysheep.ai/v1", "api_key": "YOUR_HOLYSHEEP_API_KEY", "timeout": 60, # 更长的超时 "max_retries": 3 } class TimeoutResilientLLM: """带超时弹性的LLM客户端""" def __init__(self, config: dict): self.client = AsyncOpenAI( api_key=config["api_key"], base_url=config["base_url"], timeout=config.get("timeout", 60), max_retries=config.get("max_retries", 3) ) @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) async def chat_with_retry(self, messages: list, model: str = "gpt-4.1") -> str: """带重试的聊天请求""" try: response = await self.client.chat.completions.create( model=model, messages=messages, temperature=0.7, max_tokens=2000 ) return response.choices[0].message.content except asyncio.TimeoutError: print("⚠️ LLM请求超时,触发重试...") raise except Exception as e: print(f"❌ 请求失败: {e}") raise

使用示例

llm = TimeoutResilientLLM(CORRECT_CONFIG) print("✅ 超时处理配置完成(使用HolySheep AI <50ms延迟)")

2. 状态不一致:状态突变错误(State Mutation)

# ============================================

问题:LangGraph状态在并发执行时不一致

症状:State被意外覆盖、数据丢失、竞态条件

解决:使用不可变状态 + 检查点机制

============================================

from typing import TypedDict, Annotated from langgraph.graph import StateGraph from operator import add from copy import deepcopy

❌ 错误方式:直接修改可变状态

class BrokenState(TypedDict): messages: list data: dict def broken_node(state: BrokenState) -> BrokenState: """错误:直接修改传入的状态""" state["messages"].append("new message") # 直接修改原状态! state["data"]["key"] = "value" return state # 可能导致状态不一致

✅ 正确方式:不可变状态更新

class CorrectState(TypedDict): messages: Annotated[list, add] # 使用Annotated进行不可变追加 data: dict checkpoint_id: str | None def correct_node(state: CorrectState) -> dict: """正确:返回新状态而不是修改原状态""" # 方法1:使用Annotated + add操作符 return { "messages": ["new message"], # 自动追加而非覆盖 "checkpoint_id": f"cp_{len(state['messages'])}" # 新增检查点ID } def correct_node_v2(state: CorrectState) -> dict: """正确:深拷贝后修改""" new_state = deepcopy(state) new_state["messages"].append("new message") new_state["data"] = {**state["data"], "key": "value"} new_state["checkpoint_id"] = f"cp_{len(state['messages'])}" return new_state

创建状态图

workflow = StateGraph(CorrectState) def debug_middleware(state: CorrectState, node_name: str) -> CorrectState: """调试中间件:验证状态一致性""" # 状态验证 assert isinstance(state["messages"], list), "messages必须是list" assert isinstance(state["data"], dict), "data必须是dict" assert state["checkpoint_id"] is not None, "必须包含checkpoint_id" print(f"🔍 [{node_name}] 状态验证通过") return state workflow.add_node("validated_node", debug_middleware) print("✅ 状态一致性机制配置完成")

3. 循环依赖:Cycle Detection错误

# ============================================

问题:LangGraph检测到循环依赖,导致死循环

症状:CycleDetectedException、最大迭代次数Exceeded

解决:添加循环检测 + 最大深度限制 + 中断机制

============================================

from typing import Literal from dataclasses import dataclass

❌ 错误配置:无循环限制

BROKEN_GRAPH = """ def route(state): intent = state.get("intent") if intent == "unknown": return "intent_detection" # 可能导致循环! return END """

✅ 正确配置:带循环检测

@dataclass class CycleGuard: """循环守卫:防止无限循环""" max_iterations: int = 10 current_iterations: int = 0 visited_nodes: list = None def __post_init__(self): if self.visited_nodes is None: self.visited_nodes = [] def check_and_record(self, node_name: str) -> bool: """ 检查是否形成循环 Returns: True: 安全,可以继续 False: 检测到循环,需要中断 """ self.current_iterations += 1 # 深度限制检查 if self.current_iterations > self.max_iterations: print(f"🚨 达到最大迭代次数 ({self.max_iterations}),强制中断") return False # 循环检测 if node_name in self.visited_nodes: print(f"🚨 检测到循环: {' -> '.join(self.visited_nodes)} -> {node_name}") return False self.visited_nodes.append(node_name) print(f"📍 节点访问: {' -> '.join(self.visited_nodes)}") return True def reset(self): """重置循环检测器""" self.current_iterations = 0 self.visited_nodes = []

使用循环守卫

guard = CycleGuard(max_iterations=5) def safe_route(state: dict) -> Literal["node_a", "node_b", "node_c", "__end__"]: """安全的路由函数""" node_name = state.get("current_node", "node_a") # 使用循环守卫 if not guard.check_and_record(node_name): return "__end__" # 检测到循环,中断 # 正常路由逻辑 intent = state.get("intent", "unknown") routes = { "product": "node_a", "order": "node_b", "default": "node_c", "unknown": "node_a" # 可能导致循环,但会被guard拦截 } return routes.get(intent, "node_c")

测试循环检测

test_state = {"intent": "unknown", "current_node": "node_a"} for _ in range(7): next_node = safe_route(test_state) test_state["current_node"] = next_node if next_node == "__end__": break print("✅ 循环检测机制配置完成")

调试面板与监控集成

将LangGraph调试工具与监控面板集成,实现实时可视化。

# ============================================

LangGraph调试监控面板集成

支持: Prometheus, Grafana, 自定义Web界面

============================================

from flask import Flask, jsonify, render_template_string import threading import time app = Flask(__name__)

全局调试数据存储

DEBUG_DATA = { "snapshots": [], "errors": [], "metrics": { "total_requests": 0, "successful_requests": 0, "failed_requests": 0, "average_latency_ms": 0.0 } } @app.route("/debug/dashboard") def dashboard(): """调试仪表板HTML""" html = """ LangGraph Debug Dashboard

🔍 LangGraph 实时调试面板

<

🔥 HolySheep AI ausprobieren

Direktes KI-API-Gateway. Claude, GPT-5, Gemini, DeepSeek — ein Schlüssel, kein VPN.

👉 Kostenlos registrieren →