chat_agent.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. from typing import Optional
  2. from app.tools.java_client import JavaClient
  3. import logging
  4. logger = logging.getLogger(__name__)
  5. class ChatAgent:
  6. """家庭聊天 Agent: 包装业务逻辑, 被 StateGraph 节点调用"""
  7. def __init__(self):
  8. self.java = JavaClient()
  9. async def load_context(self, user_id: int, child_id: Optional[int] = None) -> dict:
  10. """从 Java 侧加载用户上下文"""
  11. params = {}
  12. if child_id:
  13. params["childId"] = child_id
  14. return await self.java.get_user_context(user_id, params)
  15. async def extract_tasks(self, answer: str, user_id: int, conv_id: str) -> list[dict]:
  16. """从 AI 回答中解析 [TASK] 标记"""
  17. import re
  18. tasks = []
  19. pattern = r'\[TASK:\s*\{([^}]+)\}\]'
  20. matches = re.findall(pattern, answer)
  21. for match in matches:
  22. task_info = {}
  23. for kv in match.split(","):
  24. if ":" in kv:
  25. k, v = kv.split(":", 1)
  26. task_info[k.strip()] = v.strip().strip('"').strip("'")
  27. if task_info.get("title"):
  28. tasks.append(task_info)
  29. return tasks