from typing import Optional from app.tools.java_client import JavaClient import logging logger = logging.getLogger(__name__) class ChatAgent: """家庭聊天 Agent: 包装业务逻辑, 被 StateGraph 节点调用""" def __init__(self): self.java = JavaClient() async def load_context(self, user_id: int, child_id: Optional[int] = None) -> dict: """从 Java 侧加载用户上下文""" params = {} if child_id: params["childId"] = child_id return await self.java.get_user_context(user_id, params) async def extract_tasks(self, answer: str, user_id: int, conv_id: str) -> list[dict]: """从 AI 回答中解析 [TASK] 标记""" import re tasks = [] pattern = r'\[TASK:\s*\{([^}]+)\}\]' matches = re.findall(pattern, answer) for match in matches: task_info = {} for kv in match.split(","): if ":" in kv: k, v = kv.split(":", 1) task_info[k.strip()] = v.strip().strip('"').strip("'") if task_info.get("title"): tasks.append(task_info) return tasks