|
@@ -14,6 +14,7 @@ import cozepy
|
|
from sqlalchemy.orm import sessionmaker, Session
|
|
from sqlalchemy.orm import sessionmaker, Session
|
|
|
|
|
|
from pqai_agent import configs
|
|
from pqai_agent import configs
|
|
|
|
+from pqai_agent.clients.relation_stage_client import RelationStageClient
|
|
from pqai_agent.data_models.agent_push_record import AgentPushRecord
|
|
from pqai_agent.data_models.agent_push_record import AgentPushRecord
|
|
from pqai_agent.logging_service import logger
|
|
from pqai_agent.logging_service import logger
|
|
from pqai_agent.database import MySQLManager
|
|
from pqai_agent.database import MySQLManager
|
|
@@ -125,6 +126,9 @@ class DialogueManager:
|
|
self.history_dialogue_service = HistoryDialogueService(
|
|
self.history_dialogue_service = HistoryDialogueService(
|
|
config['storage']['history_dialogue']['api_base_url']
|
|
config['storage']['history_dialogue']['api_base_url']
|
|
)
|
|
)
|
|
|
|
+ # FIXME: 实际为无状态接口,不需要每个DialogueManager持有一个单独实例
|
|
|
|
+ self.relation_stage_client = RelationStageClient()
|
|
|
|
+ self.relation_stage = self.relation_stage_client.get_relation_stage(staff_id, user_id)
|
|
self.agent_db_session_maker = agent_db_session_maker
|
|
self.agent_db_session_maker = agent_db_session_maker
|
|
self._recover_state()
|
|
self._recover_state()
|
|
# 由于本地状态管理过于复杂,引入事务机制做状态回滚
|
|
# 由于本地状态管理过于复杂,引入事务机制做状态回滚
|
|
@@ -155,6 +159,10 @@ class DialogueManager:
|
|
|
|
|
|
def refresh_profile(self):
|
|
def refresh_profile(self):
|
|
self.staff_profile = self.user_manager.get_staff_profile(self.staff_id)
|
|
self.staff_profile = self.user_manager.get_staff_profile(self.staff_id)
|
|
|
|
+ relation_stage = self.relation_stage_client.get_relation_stage(self.staff_id, self.user_id)
|
|
|
|
+ if relation_stage and relation_stage != self.relation_stage:
|
|
|
|
+ logger.info(f"staff[{self.staff_id}], user[{self.user_id}]: relation stage changed from {self.relation_stage} to {relation_stage}")
|
|
|
|
+ self.relation_stage = relation_stage
|
|
|
|
|
|
def _recover_state(self):
|
|
def _recover_state(self):
|
|
self.current_state, self.previous_state = self.state_cache.get_state(self.staff_id, self.user_id)
|
|
self.current_state, self.previous_state = self.state_cache.get_state(self.staff_id, self.user_id)
|
|
@@ -530,7 +538,6 @@ class DialogueManager:
|
|
return True
|
|
return True
|
|
return False
|
|
return False
|
|
|
|
|
|
-
|
|
|
|
def is_in_human_intervention(self) -> bool:
|
|
def is_in_human_intervention(self) -> bool:
|
|
"""检查是否处于人工介入状态"""
|
|
"""检查是否处于人工介入状态"""
|
|
return self.current_state == DialogueState.HUMAN_INTERVENTION
|
|
return self.current_state == DialogueState.HUMAN_INTERVENTION
|
|
@@ -559,6 +566,7 @@ class DialogueManager:
|
|
"last_interaction_interval": self._get_hours_since_last_interaction(2),
|
|
"last_interaction_interval": self._get_hours_since_last_interaction(2),
|
|
"if_first_interaction": True if self.previous_state == DialogueState.INITIALIZED else False,
|
|
"if_first_interaction": True if self.previous_state == DialogueState.INITIALIZED else False,
|
|
"if_active_greeting": False if user_message else True,
|
|
"if_active_greeting": False if user_message else True,
|
|
|
|
+ "relation_stage": self.relation_stage,
|
|
"formatted_staff_profile": prompt_utils.format_agent_profile(self.staff_profile),
|
|
"formatted_staff_profile": prompt_utils.format_agent_profile(self.staff_profile),
|
|
"formatted_user_profile": prompt_utils.format_user_profile(self.user_profile),
|
|
"formatted_user_profile": prompt_utils.format_user_profile(self.user_profile),
|
|
**self.user_profile,
|
|
**self.user_profile,
|