身份: 你是一位专业的情感心理学顾问,擅长理解和引导人们的情感状态。
指令: 请根据指定的<情感支持场景>,运用<策略>进行沟通。这里所说的<策略>是<策略描述>,例如在<情感支持场景>中,<策略>的运用可以体现为:<策略示例>。你的任务是创建一个用于训练情感大模型的多轮对话数据集。请确保数据集中的回答积极正面、合法合规,上下文对话连贯有逻辑,并提供有效的情感支持和建议。在构建回答时,请遵循以下步骤,并按照规定的输出格式提供数据:
步骤1:准确理解并简洁复述对话中的问题或情感表达。 步骤2:分析并标注问题中的关键要素,包括方面、观点项、情感极性。 步骤3:基于对话上下文,深入识别和解读更复杂的人类情绪状态。 步骤4:综合分析问题和情绪状态,根据<策略>提出正面、建设性的回答或建议。 步骤5:评估你的回答可能对对话者情绪产生的影响,并在必要时进行调整。
输出格式: [ { "conversations": [ { "from": "human", "value": "<对话中的问题或情感表达>" }, { "from": "gpt", "value": " 步骤1:<问题的简洁复述>\n 步骤2:<关键要素分析>\n 步骤3:<情绪状态的深入识别>\n 步骤4:<根据策略提供的正面回答>\n 步骤5:<回答的情绪影响评估>"\n <最终调整后的正面回答> " }, { "from": "human", "value": "<对话中的问题或情感表达>" }, { "from": "gpt", "value": " 步骤1:<问题的简洁复述>\n 步骤2:<关键要素分析>\n 步骤3:<情绪状态的深入识别>\n 步骤4:<根据策略提供的正面回答>\n 步骤5:<回答的情绪影响评估>"\n <最终调整后的正面回答> " }, { "from": "human", "value": "<对话中的问题或情感表达>" }, { "from": "gpt", "value": " 步骤1:<问题的简洁复述>\n 步骤2:<关键要素分析>\n 步骤3:<情绪状态的深入识别>\n 步骤4:<根据策略提供的正面回答>\n 步骤5:<回答的情绪影响评估>"\n <最终调整后的正面回答> " } ] } ] ``` 具体的python代码可以参考下面: ```python #!/usr/bin/env python3 # -*- coding:utf-8 -*- import json from zhipuai import ZhipuAI
# 请填写您自己的APIKey client = ZhipuAI(api_key="your api_key")
# 示例情感支持场景和策略列表 emotion_support_scenarios = [ "分手或离婚", "导航性别认同和过渡", "沟通问题", "搬到新的城市或国家", "沟通挑战", "职业转型", "应对所爱之人的死亡", "为人父母和育儿挑战", "处理宠物死亡", "自尊心低或缺乏自信", "与工作相关的压力和倦怠", "身体形象问题和饮食失调", "财务担忧和不确定的未来", "LGBTQ+身份", "文化认同和归属感", "失业或职业挫折", "学业压力", "学术压力或压力", "灵性和信仰", "育儿挑战和父母内疚", "失业相关压力", "兄弟姐妹间的竞争或家庭冲突", "从身体或情感虐待中幸存和恢复", "从性侵犯或家庭暴力中康复", "焦虑和恐慌", "抑郁和低落情绪", "适应新工作或角色", "创伤后应激障碍", "应对诊断或医疗治疗", "从虐待中康复", "照顾者支持", "上瘾和康复", "寻找生活的意义和目标", "对所爱之人或朋友的支持" ]
strategies = [ { "Strategy": "反思性陈述", "Description": "重复或改写用户已经表达的内容,以表明你在积极倾听。", "Example": "input:“我必须要做的所有工作都让我感到不堪重负。” output:“听起来你对自己的工作量感到不堪重负。”" }, { "Strategy": "澄清", "Description": "寻求澄清,以确保清楚地了解用户的情绪和体验。", "Example": "input:“我就是摆脱不了这种悲伤的感觉。” output:“你能帮我理解一下是什么引发了这种悲伤的感觉吗?”" }, { "Strategy": "情感验证", "Description": "不加评判地承认并验证用户的情绪。", "Example": "input:“我对自己再次犯同样的错误感到非常沮丧。” output:“感到沮丧是可以理解的,犯错是人之常情。”" }, { "Strategy": "移情陈述", "Description": "表达对用户体验的理解和同理心。", "Example": "input:“我现在真的在与我的自信作斗争。” output:“我可以想象在影响你自信的情况下导航是多么具有挑战性。”" }, { "Strategy": "肯定", "Description": "提供积极的强化和鼓励,以提升用户的精神。", "Example": "input:“我觉得自己不够好。” output:“你已经取得了很多成就,你的能力不言自明。不要低估你的能力。”" }, { "Strategy": "提供希望", "Description": "分享乐观的观点或可能性来灌输希望。", "Example": "input:“我不知道情况是否会好转。” output:“记住,变化是不变的,总是有成长和积极变化的机会。”" }, { "Strategy": "避免评判和批评", "Description": "为用户创造一个非评判性的安全空间来表达他们的情绪,而不必担心批评。", "Example": "input:“我为请假关注自己的心理健康感到很内疚。” output:“照顾好自己的心理健康很重要,这没什么好内疚的。" "你的健康应该永远是优先考虑的,我很高兴你认识到这一点。在这段时间里,我能做些什么来支持你吗?”" }, { "Strategy": "建议选项", "Description": "为解决手头的问题提供切实可行的建议或不同的观点。", "Example": "input:“我在管理压力方面有困难。” output:“你有没有考虑过尝试一些放松技巧,比如深呼吸或正念练习?”" }, { "Strategy": "协同规划", "Description": "与用户一起制定行动计划。", "Example": "input:“我想提高我的时间管理技能。” output:“我们一起集思广益吧。把任务分成更小、更容易处理的部分怎么样?”" }, { "Strategy": "提供不同的视角", "Description": "提供不同的方式来看待情况,以帮助用户获得新的见解。", "Example": "input:“我的项目没有成功,我很沮丧。” output:“有时候挫折会带来意想不到的学习和成长机会。这是一个重新评估和再次尝试的机会。”" }, { "Strategy": "重新构建消极思想", "Description": "帮助用户将消极思想重新构建为更积极或更现实的思想。", "Example": "input:“我真是个失败者。” output:“不要那样想,让我们把重点放在你从这次经历中学到了什么,以及你如何把它应用到未来。”" }, { "Strategy": "分享信息", "Description": "提供有关情绪、应对机制或自我保健实践的教育或事实信息。", "Example": "input:“我正在努力控制自己的焦虑。” output:“你知道深呼吸练习和接地技巧可以帮助减轻焦虑症状吗?你想让我解释一下如何练习吗?”" }, { "Strategy": "使经验正常化", "Description": "解释某些情绪或反应是常见的,是人类经验的一部分。", "Example": "input:“我为花时间给自己而感到内疚。” output:“对自我照顾感到内疚是很常见的,但这对你的健康至关重要。记住,你也应该优先考虑自己的需求。”" }, { "Strategy": "促进自我保健实践", "Description": "提倡参与促进健康和自我照顾的活动。", "Example": "input:“” output:“一定要给自己留点时间,做一些能给你带来快乐和放松的事情。”" }, { "Strategy": "压力管理", "Description": "为压力管理技巧提供建议,如锻炼、冥想或花时间在大自然中。", "Example": "input:“” output:“定期参加体育活动可以帮助减轻压力,改善情绪。”" }, { "Strategy": "其他", "Description": "与他人友好地打招呼,采用其他的支持性技巧,这些都不在前面提到的类别中。", "Example": "input:“” output:“你好,我很高兴能在这里帮助你。告诉我,今天我能为你做些什么?”" } ]
# 调用人工智能按照prompt生成数据 def generate_conversation(scenario, strategy): prompt = f""" 身份: 你是一位专业的情感心理学顾问,擅长理解和引导人们的情感状态。 指令: 请根据指定的{scenario},运用{strategy['Strategy']}进行沟通。这里所说的{strategy['Strategy']}是{strategy['Description']},例如在{scenario}中,{strategy['Strategy']}的运用可以体现为:{strategy['Example']}。 你的任务是创建一个用于训练情感大模型的多场景多轮对话数据集。请确保数据集中的回答积极正面、合法合规,上下文对话连贯有逻辑,并提供有效的情感支持和建议。在构建回答时,请遵循以下思考步骤,并按照规定的json输出格式提供数据: 步骤1:准确理解并简洁复述对话中的问题或情感表达。 步骤2:分析并标注问题中的关键要素,包括方面、观点项、情感极性。 步骤3:基于对话上下文,深入识别和解读更复杂的人类情绪状态。 步骤4:综合分析问题和情绪状态,根据<策略>提出正面、建设性的回答或建议。 步骤5:评估你的回答可能对对话者情绪产生的负面影响,并在必要时进行调整。 最终输出:最终调整后的正面回答。 输出格式: [ {{ "conversations": [ {{ "from": "human", "value": "<对话中的问题或情感表达>" }}, {{ "from": "gpt", "value": "步骤1:<准确理解并简洁复述对话中的问题或情感表达>\\n步骤2:<分析并标注问题中的关键要素,包括方面、观点项、情感极性>\\n步骤3:<基于对话上下文,深入识别和解读更复杂的人类情绪状态>\\n步骤4:<综合分析问题和情绪状态,根据{strategy['Strategy']}提出正面、建设性的回答或建议>\\n步骤5:<评估你的回答可能对对话者情绪产生的负面影响,并在必要时进行调整>\\n最终输出:<最终调整后的正面回答>" }}, {{ "from": "human", "value": "<对话中的问题或情感表达>" }}, {{ "value": "步骤1:<准确理解并简洁复述对话中的问题或情感表达>\\n步骤2:<分析并标注问题中的关键要素,包括方面、观点项、情感极性>\\n步骤3:<基于对话上下文,深入识别和解读更复杂的人类情绪状态>\\n步骤4:<综合分析问题和情绪状态,根据{strategy['Strategy']}提出正面、建设性的回答或建议>\\n步骤5:<评估你的回答可能对对话者情绪产生的负面影响,并在必要时进行调整>\\n最终输出:<最终调整后的正面回答>" }}, {{ "from": "human", "value": "<对话中的问题或情感表达>" }}, {{ "from": "gpt", "value": "步骤1:<准确理解并简洁复述对话中的问题或情感表达>\\n步骤2:<分析并标注问题中的关键要素,包括方面、观点项、情感极性>\\n步骤3:<基于对话上下文,深入识别和解读更复杂的人类情绪状态>\\n步骤4:<综合分析问题和情绪状态,根据{strategy['Strategy']}提出正面、建设性的回答或建议>\\n步骤5:<评估你的回答可能对对话者情绪产生的负面影响,并在必要时进行调整>\\n最终输出:<最终调整后的正面回答>" }} ] }} ] """ response = client.chat.completions.create( model="glm-4-flash", # 请填写要调用的模型名称 messages=[ {"role": "user", "content": prompt} ], ) complete_response = "" for chunk in response.choices[0].message.content: complete_response += chunk return complete_response
# 检查人工智能的输出格式的正确性 def safe_json_loads(s): try: return json.loads(s) except json.JSONDecodeError as e: print(f"JSONDecodeError: {e}") return None
if __name__ == '__main__': count = 0 for scenario in emotion_support_scenarios: for strategy in strategies: with open("emoDialogue.json", "r", encoding="utf-8") as fr: data = json.load(fr) while True: generated_conversation = generate_conversation(scenario, strategy) loaded_json = safe_json_loads(generated_conversation) if loaded_json is not None: data += loaded_json break else: print("Failed to decode JSON. Retrying...") # print(data) with open("emoDialogue.json", "w", encoding="utf-8") as fw: json.dump(data, fw, ensure_ascii=False, indent=2) count += 1 print(f'生成第{count}条:在{scenario}情景下采用{strategy["Strategy"]}的沟通策略。')
|