浏览代码

Update dialogue_manager: generate_multimodal_response with full function

StrayWarrior 1 周之前
父节点
当前提交
5a795754fe
共有 1 个文件被更改,包括 25 次插入4 次删除
  1. 25 4
      pqai_agent/dialogue_manager.py

+ 25 - 4
pqai_agent/dialogue_manager.py

@@ -422,6 +422,7 @@ class DialogueManager:
         message_ts = int(time.time() * 1000)
         self.append_dialogue_history({
             "role": "assistant",
+            "type": MessageType.TEXT,
             "content": llm_response,
             "timestamp": message_ts,
             "state": self.current_state.name
@@ -430,27 +431,47 @@ class DialogueManager:
 
         return llm_response
 
-    def generate_multimodal_response(self, content: Dict) -> Optional[Dict]:
+    def generate_multimodal_response(self, item: Dict) -> Optional[Dict]:
         """
         处理LLM的多模态响应,更新对话状态和对话历史。
         注意:所有的LLM多模态响应都必须经过这个函数来处理!
-        :param content: 包含多模态内容的字典
+        :param item: 包含多模态内容的字典
         :return: None
         """
         if self.current_state == DialogueState.HUMAN_INTERVENTION:
             return None
 
+        raw_type = item.get("type", "text")
+        if isinstance(raw_type, str):
+            item["type"] = MessageType.from_str(raw_type)
+
+        if item["type"] == MessageType.TEXT:
+            if '<人工介入>' in item["content"]:
+                reason = item["content"].replace('<人工介入>', '')
+                logger.warning(f'staff[{self.staff_id}], user[{self.user_id}]: human intervention triggered, reason: {reason}')
+                self.do_state_change(DialogueState.HUMAN_INTERVENTION)
+                self._send_alert('人工介入', reason)
+                return None
+
+            if '<结束>' in item["content"] or '<负向情绪结束>' in item["content"]:
+                logger.warning(f'staff[{self.staff_id}], user[{self.user_id}]: conversation ended')
+                self.do_state_change(DialogueState.FAREWELL)
+                if '<负向情绪结束>' in item["content"]:
+                    self._send_alert("用户负向情绪")
+                return None
+
         # 记录响应到对话历史
         message_ts = int(time.time() * 1000)
         self.append_dialogue_history({
             "role": "assistant",
-            "content": content,
+            "type": item["type"],
+            "content": item["content"],
             "timestamp": message_ts,
             "state": self.current_state.name
         })
         self.update_interaction_time(message_ts)
 
-        return content
+        return item
 
     def _get_hours_since_last_interaction(self, precision: int = -1):
         time_diff = (time.time() * 1000) - self.last_interaction_time_ms