Browse Source

Update dialogue_manager: switch to new coze variable settings

StrayWarrior 1 month ago
parent
commit
87a38faa02
3 changed files with 31 additions and 1 deletions
  1. 8 1
      pqai_agent/dialogue_manager.py
  2. 0 0
      pqai_agent/utils/__init__.py
  3. 23 0
      pqai_agent/utils/prompt_utils.py

+ 8 - 1
pqai_agent/dialogue_manager.py

@@ -23,6 +23,8 @@ from pqai_agent.message import MessageType, Message
 from pqai_agent.toolkit.lark_alert_for_human_intervention import LarkAlertForHumanIntervention
 from pqai_agent.toolkit.lark_sheet_record_for_human_intervention import LarkSheetRecordForHumanIntervention
 from pqai_agent.user_manager import UserManager
+from pqai_agent.utils import prompt_utils
+
 
 class DummyVectorMemoryManager:
     def __init__(self, user_id):
@@ -480,6 +482,10 @@ class DialogueManager:
         self.user_profile = self.user_manager.get_user_profile(self.user_id)
         # 刷新员工画像(不一定需要)
         self.staff_profile = self.user_manager.get_staff_profile(self.staff_id)
+        # 员工画像添加前缀,避免冲突,实现Coze Prompt模板的平滑升级
+        legacy_staff_profile = {}
+        for key in self.staff_profile:
+            legacy_staff_profile[f'agent_{key}'] = self.staff_profile[key]
 
         current_datetime = datetime.now()
         context = {
@@ -493,8 +499,9 @@ class DialogueManager:
             "last_interaction_interval": self._get_hours_since_last_interaction(2),
             "if_first_interaction": True if self.previous_state == DialogueState.INITIALIZED else False,
             "if_active_greeting": False if user_message else True,
+            "formatted_staff_profile": prompt_utils.format_agent_profile(self.staff_profile),
             **self.user_profile,
-            **self.staff_profile
+            **legacy_staff_profile
         }
 
         # 获取长期记忆

+ 0 - 0
pqai_agent/utils/__init__.py


+ 23 - 0
pqai_agent/utils/prompt_utils.py

@@ -0,0 +1,23 @@
+from typing import Dict
+
+
+def format_agent_profile(profile: Dict) -> str:
+    fields = [
+        ('name', '名字'),
+        ('gender', '性别'),
+        ('age', '年龄'),
+        ('region', '所在地'),
+        ('previous_location', '之前所在地'),
+        ('education', '学历'),
+        ('occupation', '职业'),
+        ('work_experience', '工作经历'),
+        ('family_members', '家庭成员'),
+        ('family_occupation', '家庭成员职业')
+    ]
+    strings_to_join = []
+    for field in fields:
+        if not profile.get(field[0], None):
+            continue
+        cur_string = f"- {field[1]}:{profile[field[0]]}"
+        strings_to_join.append(cur_string)
+    return "\n".join(strings_to_join)