自动回话陪智能聊性质软件例
运行方式直接执行在控制台输入文字即可对话输入 exit 退出import reimport timefrom datetime import datetime# 1. 数据库层模拟心理学、话术、常见问题库 # 1.1 绝对禁止词库触发开发者预警FORBIDDEN_WORDS [杀人, 自杀, 吸毒, 贩卖, 爆炸, 恐怖袭击, 制作炸弹,如何报复, 伤害他人, 违法, 犯罪]# 1.2 心理关键词 - 话术映射库分层设计PSYCHOLOGY_DB {# 情绪类焦虑: {keywords: [焦虑, 紧张, 不安, 担心, 害怕],responses: [我能感受到你内心的不安和紧张这种情绪是身体在提醒你关注自己。,焦虑有时源于对未来的不确定我们可以先深呼吸关注当下的一件小事。,你愿意和我具体聊聊是什么事情让你感到焦虑吗]},抑郁: {keywords: [抑郁, 低落, 没劲, 绝望, 想哭, 空虚],responses: [听起来你最近背负了很多沉重的东西愿意的话可以多说一点。,抑郁情绪像一片乌云但它不会永远遮住太阳我们可以一点点拨开它。,你现在的感受非常重要请允许自己有这样的情绪我在这里听着。]},压力: {keywords: [压力, 累, 喘不过气, 加班, 考试, 负担],responses: [长期的压力确实会让人身心俱疲你最近是否有机会让自己休息一下,有时候把大目标拆解成小步骤压力会减轻很多。你当前最困扰的是哪一步,适当的放松不是逃避而是为了更好地前进。你今天可以做一件让自己放松的小事。]},情感: {keywords: [分手, 失恋, 吵架, 冷战, 喜欢, 爱情],responses: [感情中的波动往往最触动人心你现在的心情我能够理解。,失去或矛盾都是一种经历它不会定义你但会丰富你。,如果你愿意可以和我聊聊你此刻最真实的感受。]},失眠: {keywords: [失眠, 睡不着, 熬夜, 噩梦, 睡眠],responses: [失眠时大脑常常无法停止思考我们可以试试‘478呼吸法’来放松。,睡前半小时远离电子屏幕听一些白噪音或许能帮你平静下来。,你最近是否有心事压在心头影响了睡眠质量]}}# 1.3 常见问题解决策略情景化应对PROBLEM_SOLVING_DB {职场: {keywords: [工作, 老板, 同事, 升职, 辞职, 裁员],advice: 职场困扰通常涉及边界和沟通。你可以尝试明确自己的职责范围并记录工作中的成就这能帮你更客观地看待现状。},学业: {keywords: [学习, 考试, 成绩, 挂科, 论文, 导师],advice: 学业压力常源于完美主义。试着把必须做好换成尽力完成并为自己设置合理的休息时间。},人际: {keywords: [朋友, 孤独, 社交, 信任, 背叛, 被孤立],advice: 健康的关系建立在相互尊重之上。当感到被伤害时表达你的感受比压抑更有助于关系的修复。}}# 2. 核心功能函数 def check_forbidden(user_input):检查是否包含绝对禁止词返回: (是否违规, 命中的词列表)hit_words []for word in FORBIDDEN_WORDS:if word in user_input:hit_words.append(word)return len(hit_words) 0, hit_wordsdef match_psychology_response(user_input):匹配心理学关键词返回对应的话术列表matched_responses []for category, data in PSYCHOLOGY_DB.items():for keyword in data[keywords]:if keyword in user_input:matched_responses.extend(data[responses])break # 每个分类只匹配一次避免过度重复# 去重并保持顺序seen set()unique_responses []for resp in matched_responses:if resp not in seen:seen.add(resp)unique_responses.append(resp)return unique_responsesdef match_problem_solving(user_input):匹配常见问题返回解决建议for category, data in PROBLEM_SOLVING_DB.items():for keyword in data[keywords]:if keyword in user_input:return data[advice]return Nonedef generate_safe_response(user_input, psych_responses, problem_advice):组合最终回应优先心理学话术其次问题解决建议最后通用共情# 如果命中心理话术随机返回一条模拟自然if psych_responses:# 为了演示效果这里按顺序返回第一条实际可使用 random.choicereturn psych_responses[0] \n\n 我还可以为你提供更多相关建议请随时告诉我。# 如果命中问题解决建议if problem_advice:return f️ 根据你的情况这里有一条建议供参考\n{problem_advice}# 通用安全回应共情 引导return (我听到了你的诉说每个人都会有困惑和压力的时候这很正常。\n如果你愿意可以更具体地描述一下你的感受我会尽力陪伴你。\n或者你也可以尝试用‘焦虑’、‘压力’、‘情感’等关键词让我更懂你。)def alert_developer(user_input, hit_words):模拟向开发者发送预警实际可改为邮件/钉钉/短信APItimestamp datetime.now().strftime(%Y-%m-%d %H:%M:%S)alert_message f开发者安全预警时间: {timestamp}用户输入包含违规词: {, .join(hit_words)}完整内容: {user_input}建议措施: 立即审查该用户会话必要时上报。# 控制台红色输出模拟预警print(\033[91m * 60 \033[0m)print(\033[91m alert_message \033[0m)print(\033[91m * 60 \033[0m)# 这里可以扩展发送邮件、写入日志文件等with open(developer_alert.log, a, encodingutf-8) as f:f.write(alert_message \n)print([系统] 预警已记录至 developer_alert.log 并通知开发者模拟)# 3. 主对话循环 def main():print(\n你好我是心理陪聊助手。我擅长倾听和陪伴。)print( 你可以随意倾诉我会尽力理解你。输入 exit 结束对话。\n)while True:user_input input(你: ).strip()# 退出条件if user_input.lower() in [exit, quit, q]:print(照顾好自己如果需要我我随时都在。再见。)breakif not user_input:continue# ----- 1. 安全过滤第一道防线 -----is_violation, hit_words check_forbidden(user_input)if is_violation:# 触发开发者预警alert_developer(user_input, hit_words)# 对用户进行安全阻断不给违规回应print( 对不起你输入的内容涉及违规词汇我将终止本次对话。)print(如果你有心理困扰建议联系专业心理援助热线。)continue # 跳过本次回复直接进入下一轮# ----- 2. 心理匹配与回应生成第二道防线 -----# 获取心理话术psych_responses match_psychology_response(user_input)# 获取问题解决建议problem_advice match_problem_solving(user_input)# 生成最终安全合法的回答reply generate_safe_response(user_input, psych_responses, problem_advice)print(f {reply}\n)# 4. 程序入口 if __name__ __main__:main()

相关新闻