|
@@ -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
|