Some checks failed
构建并部署 AI Agent 服务 / deploy (push) Failing after 6m15s
- 更新 intent.py 为 React 模式推理器 - 新增 react_nodes.py: React 模式节点 - 新增 retry_utils.py: 超时和重试工具 - 更新 state.py: 支持循环步数和错误记录 - 重写 subgraph_builder.py: 完整 React 循环流程 - 结构化错误输出,符合 Agent 执行循环最佳实践 - 限制最大推理步数 ≤40,防止无限循环 - RAG 检索带重试和超时保护 - 子图错误可传递给主图处理
114 lines
3.7 KiB
Python
114 lines
3.7 KiB
Python
"""
|
||
主图状态定义 - React 模式增强版
|
||
Main Graph State Definition - React Mode Enhanced
|
||
"""
|
||
|
||
from enum import Enum, auto
|
||
from typing import Optional, Dict, Any, Annotated, Sequence, TypedDict, List
|
||
from dataclasses import dataclass, field
|
||
from langgraph.graph import add_messages
|
||
from langchain_core.messages import BaseMessage
|
||
|
||
|
||
# ========== 兼容旧代码的类型 ==========
|
||
class MessagesState(TypedDict):
|
||
"""旧的MessagesState类型(保留兼容性)"""
|
||
messages: Annotated[Sequence[BaseMessage], add_messages]
|
||
|
||
|
||
class GraphContext(TypedDict):
|
||
"""旧的GraphContext类型(保留兼容性)"""
|
||
llm_calls: int
|
||
memory_context: str
|
||
system_prompt: str
|
||
|
||
|
||
# ========== 新的类型 ==========
|
||
class CurrentAction(Enum):
|
||
"""主图当前操作类型"""
|
||
NONE = auto()
|
||
GENERAL_CHAT = auto()
|
||
NEWS_ANALYSIS = auto()
|
||
DICTIONARY = auto()
|
||
CONTACT = auto()
|
||
|
||
|
||
class ErrorSeverity(Enum):
|
||
"""错误严重程度"""
|
||
INFO = auto() # 信息级别,继续执行
|
||
WARNING = auto() # 警告级别,可以重试
|
||
ERROR = auto() # 错误级别,需要处理
|
||
FATAL = auto() # 致命错误,终止执行
|
||
|
||
|
||
@dataclass
|
||
class ErrorRecord:
|
||
"""错误记录"""
|
||
error_type: str
|
||
error_message: str
|
||
severity: ErrorSeverity = ErrorSeverity.ERROR
|
||
source: str = "" # 来源:哪个节点/子图/工具
|
||
timestamp: str = ""
|
||
retry_count: int = 0 # 已重试次数
|
||
max_retries: int = 3 # 最大重试次数
|
||
context: Dict[str, Any] = field(default_factory=dict) # 错误上下文
|
||
|
||
|
||
@dataclass
|
||
class MainGraphState:
|
||
"""
|
||
主图状态 - React 循环推理版本
|
||
|
||
包含:
|
||
1. 旧代码的MessagesState兼容性字段
|
||
2. React 推理控制字段
|
||
3. 循环和错误处理
|
||
4. 子图结果占位
|
||
5. 用户信息
|
||
"""
|
||
# ========== 兼容性字段(保留旧的MessagesState) ==========
|
||
messages: Annotated[Sequence[BaseMessage], add_messages] = field(default_factory=list)
|
||
llm_calls: int = 0
|
||
memory_context: str = ""
|
||
system_prompt: str = ""
|
||
|
||
# ========== 主图控制字段 ==========
|
||
user_query: str = "" # 用户当前查询
|
||
current_action: CurrentAction = CurrentAction.NONE # 当前操作
|
||
intent_confidence: float = 0.0 # 意图识别置信度
|
||
|
||
# ========== React 推理专用字段 ==========
|
||
reasoning_step: int = 0 # 当前推理步数
|
||
max_steps: int = 40 # 最大推理步数(≤40)
|
||
last_action: str = "" # 上一步动作
|
||
reasoning_history: List[Dict[str, Any]] = field(default_factory=list) # 推理历史
|
||
|
||
# ========== RAG 相关字段 ==========
|
||
rag_context: str = "" # RAG 检索到的上下文
|
||
rag_retrieved: bool = False # 是否已经检索过
|
||
rag_docs: List[Dict[str, Any]] = field(default_factory=list) # 检索到的文档
|
||
|
||
# ========== 错误处理字段 ==========
|
||
errors: List[ErrorRecord] = field(default_factory=list) # 错误列表
|
||
current_error: Optional[ErrorRecord] = None # 当前错误
|
||
retry_action: Optional[str] = None # 重试动作
|
||
|
||
# ========== 子图结果占位 ==========
|
||
news_result: Optional[Dict[str, Any]] = None # 资讯子图结果
|
||
dictionary_result: Optional[Dict[str, Any]] = None # 词典子图结果
|
||
contact_result: Optional[Dict[str, Any]] = None # 通讯录子图结果
|
||
|
||
# ========== 用户信息 ==========
|
||
user_id: str = ""
|
||
|
||
# ========== 执行状态 ==========
|
||
current_phase: str = "init"
|
||
error_message: str = ""
|
||
final_result: str = ""
|
||
success: bool = False
|
||
|
||
# ========== 元数据 ==========
|
||
start_time: Optional[str] = None
|
||
end_time: Optional[str] = None
|
||
debug_info: Dict[str, Any] = field(default_factory=dict)
|