import json from openai import OpenAI def fetch_deepseek_completion(prompt, output_type='text'): """ deep_seek方法 """ client = OpenAI( api_key='sk-cfd2df92c8864ab999d66a615ee812c5', base_url="https://api.deepseek.com" ) # get response format if output_type == "json": response_format = {"type": "json_object"} else: response_format = {"type": "text"} chat_completion = client.chat.completions.create( messages=[ { "role": "user", "content": prompt, } ], model="deepseek-chat", response_format=response_format, ) response = chat_completion.choices[0].message.content if output_type == "json": response_json = json.loads(response) return response_json return response class PushAgentEvaluator: def __init__(self, dialogue_history, push_message, push_time, user_profile, agent_profile): self.dialogue_history = dialogue_history self.push_message = push_message self.user_profile = user_profile self.agent_profile = agent_profile self.push_time = push_time def evaluate_user_match(self): """用户匹配度评估(24分)""" out_put_format = { "语言风格": { "score": 8, "reason": "语言风格符合用户特征,年龄、性别、地域等特征都匹配" }, "信息边界": { "score": 10, "reason": "信息范围符合用户认知范围" }, "特征匹配": { "score": 10, "reason": "特征匹配度高,user_profile中有兴趣爱好,健康状态,用药状态,居住地址,家庭成员等特征,在 push_message需要体现出来" } } analysis_prompt = f""" 通过分析用户的以下特征 年龄: {self.user_profile['age']}, 性别: {self.user_profile['gender']}, 兴趣: {self.user_profile['interests']}, 健康状态: {self.user_profile['health_conditions']}, 用药状态: {self.user_profile['medications']}, 居住地址: {self.user_profile['region']}, 家庭成员: {self.user_profile['family_members']}, 和 agent 发送的消息: {self.push_message}, 判断该消息是否和该用户的特征匹配 包括一下三点,每一点的满分为 8 分: 语言风格:是否符合用户的年龄、性别、地域等特征; 信息范围:是否超出用户认知范围; 特征匹配:如果 user_profile中有兴趣爱好,健康状态,用药状态,居住地址,家庭成员等特征,在 push_message需要体现出来 输出的格式为 JSON,示例如:{out_put_format} """ completion = fetch_deepseek_completion(prompt=analysis_prompt, output_type='json') return completion def evaluate_agent_consistency(self): """人设一致性评估(16分)""" out_put_format = { "语言风格": { "score": 8, "reason": "语言风格符合用户特征,年龄、性别、地域等特征都匹配" }, "消息边界": { "score": 8, "reason": "信息范围符合用户认知范围" }, } analysis_prompt = f""" 通过分析 agent 的一下特征: 职业:{self.agent_profile['occupation']}, 年龄:{self.agent_profile['age']}, 性别:{self.agent_profile['gender']}, 地址:{self.agent_profile['region']}, 教育背景:{self.agent_profile['education']}, 工作经验:{self.agent_profile['work_experience']} 和 agent 发送的消息: {self.push_message}, 判断该消息是否和该 agent 的特征匹配 包括一下 2 点,每一点的满分为 8 分: 语言风格:是否符合 agent 的年龄、性别、地域等特征;需要从不同性别,不同职业,不同年龄, 不同地域的人的说话风格去分析 信息范围:是否超出 agent 认知范围; 输出的格式为 JSON,示例如:{out_put_format} """ completion = fetch_deepseek_completion(prompt=analysis_prompt, output_type='json') return completion def evaluate_interest_arousal(self): """兴趣激发评估(30)""" out_put_format = { "好奇设计": { "score": 15, "reason": "包含开放式问题,包括对用户认知边界的探索,用户兴趣爱好的联想等方面" }, "利益设计": { "score": 15, "reason": "如果用户在历史对话中提到了某种需求,新的唤起消息是否有为用户解决需求的趋势" } } analysis_prompt = f""" 通过分析用户的以下特征 年龄: {self.user_profile['age']}, 性别: {self.user_profile['gender']}, 兴趣: {self.user_profile['interests']}, 健康状态: {self.user_profile['health_conditions']}, 用药状态: {self.user_profile['medications']}, 居住地址: {self.user_profile['region']}, 家庭成员: {self.user_profile['family_members']}, 和 agent 发送的消息: {self.push_message}, 以及用户和 agent 的历史对话: {self.dialogue_history}, 判断该消息是否能唤起用户的兴趣,驱动用户的聊天激情,主要从以下几2个方面考虑,每一个要点满分 15分 好奇设计:是否包含开放式问题,包括对用户认知边界的探索,用户兴趣爱好的联想等方面 利益设计:如果用户在历史对话中提到了某种需求,新的唤起消息是否有为用户解决需求的趋势; 如果没提出,可以从用户特征中联想出用户的需求,比如用户的兴趣爱好,健康状态,用药状态,居住地址,家庭成员等特征, 在 push_message需要体现出来 输出的格式为 JSON,示例如:{out_put_format} """ completion = fetch_deepseek_completion(prompt=analysis_prompt, output_type='json') return completion def evaluate_execution_quality(self): """执行质量评估(15分)""" output_format = { "信息保真": { "score": 5, "reason": "信息真实" }, "政策合规": { "score": 5, "reason": "发送消息是否符合现有政策要求,是否违反相关规则" }, "语言拟人": { "score": 5, "reason": "表现出一定的拟人化和情商" } } analysis_prompt = f""" 通过分析 agent 发送的消息:{self.push_message}, 信息保真(满分 5 分): 拆分消息重点各个事件点,联网搜索,判断事件是否为真实事件,比如说节日祝福需要和发送时间{self.push_time}对应, 天气需要和地区相关 不能在早上发晚上好之类等等 政策合规(满分 5 分): 并且判断发送的消息是否存在违反规则的现象。 语言拟人:(满分 5 分): 判断发送的消息是否存在机械化,同质化的现象,比如重复发相同或者相似的消息,比如过于机械的回复等等 输出的格式为 JSON,示例如:{output_format} """ completion = fetch_deepseek_completion(prompt=analysis_prompt, output_type='json') return completion def evaluate_emotional_intelligence(self): """情感智能评估(15分)""" output_format = { "共情深度": { "score": 10, "reason": "识别用户情感状态,提供相应的回应" }, } analysis_prompt = f""" 通过分析用户的以下特征 年龄: {self.user_profile['age']}, 性别: {self.user_profile['gender']}, 兴趣: {self.user_profile['interests']}, 健康状态: {self.user_profile['health_conditions']}, 用药状态: {self.user_profile['medications']}, 居住地址: {self.user_profile['region']}, 家庭成员: {self.user_profile['family_members']}, 和 agent 和用户的对话:{self.dialogue_history} 挖掘出用户的情感需求 并且 agent 发送的消息: {self.push_message}, 判断该message是否能和用户共情,提升用户的情感体验 满分 15分 输出格式为 JSON,示例如:{output_format} """ completion = fetch_deepseek_completion(prompt=analysis_prompt, output_type='json') return completion def evaluate_push_agent( dialogue_history, push_message, push_time, user_profile, agent_profile ): # 创建评估引擎实例 evaluator = PushAgentEvaluator( dialogue_history, push_message, push_time, user_profile, agent_profile, ) # 执行模块化评估 evaluation_report = { "基础能力": { "用户匹配": evaluator.evaluate_user_match(), "人设一致": evaluator.evaluate_agent_consistency() }, "任务效能": { "兴趣激发": evaluator.evaluate_interest_arousal(), "执行质量": evaluator.evaluate_execution_quality(), "情感智能": evaluator.evaluate_emotional_intelligence() } } return evaluation_report if __name__ == '__main__': with open("dev.json") as f: data = json.load(f) evaluation_report = evaluate_push_agent( data['dialogue_history'], data['push_message'], data['push_time'], data['user_profile'], data['agent_profile'] ) print(json.dumps(evaluation_report, indent=4, ensure_ascii=False))