自动回话陪智能聊性质软件例
2026/6/26 21:42:09 网站建设 项目流程

运行方式:直接执行,在控制台输入文字即可对话,输入 'exit' 退出

"""

import re

import time

from 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_words

def 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_responses

def 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 None

def generate_safe_response(user_input, psych_responses, problem_advice):

"""

组合最终回应:优先心理学话术,其次问题解决建议,最后通用共情

"""

# 如果命中心理话术,随机返回一条(模拟自然)

if psych_responses:

# 为了演示效果,这里按顺序返回第一条,实际可使用 random.choice

return psych_responses[0] + "\n\n💡 我还可以为你提供更多相关建议,请随时告诉我。"

# 如果命中问题解决建议

if problem_advice:

return f"🛠️ 根据你的情况,这里有一条建议供参考:\n{problem_advice}"

# 通用安全回应(共情 + 引导)

return (

"我听到了你的诉说,每个人都会有困惑和压力的时候,这很正常。\n"

"如果你愿意,可以更具体地描述一下你的感受,我会尽力陪伴你。\n"

"或者,你也可以尝试用‘焦虑’、‘压力’、‘情感’等关键词,让我更懂你。"

)

def alert_developer(user_input, hit_words):

"""

模拟向开发者发送预警(实际可改为邮件/钉钉/短信API)

"""

timestamp = 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", encoding="utf-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("照顾好自己,如果需要我,我随时都在。再见。")

break

if 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()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询