news 2026/2/28 13:24:56

AI职场压力监测与调节助手,分析用户语音/文字情绪,推送放松文案与心理疏导建议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI职场压力监测与调节助手,分析用户语音/文字情绪,推送放松文案与心理疏导建议

AI职场压力监测与调节助手

下面是一个基于Python的AI职场压力监测与调节助手程序,它结合了创新与变革管理课程的理念,通过分析用户的语音/文字情绪,提供个性化的放松文案和心理疏导建议。

import tkinter as tk

from tkinter import ttk, scrolledtext, messagebox

import random

import datetime

import matplotlib.pyplot as plt

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

import numpy as np

import pandas as pd

from PIL import Image, ImageTk

import os

import threading

import time

# 模拟语音识别模块

class SpeechRecognizer:

def __init__(self):

self.phrases = [

"我感觉工作压力好大,项目 deadline 快到了",

"最近团队变动很大,我有点适应不过来",

"老板总是给我额外任务,我感到不堪重负",

"同事之间竞争激烈,关系有点紧张",

"我对自己的职业发展感到迷茫",

"工作量太大,我经常加班到深夜",

"我觉得自己在工作中没有得到足够的认可",

"公司变革太快,我有点跟不上节奏",

"我担心自己会被裁员",

"工作与生活平衡被打破了"

]

def recognize_speech(self):

"""模拟语音识别过程"""

time.sleep(2) # 模拟识别延迟

return random.choice(self.phrases)

# 情绪分析模块

class EmotionAnalyzer:

def __init__(self):

# 关键词映射情绪

self.keyword_map = {

"压力大": "stress", "deadline": "stress", "不堪重负": "stress",

"紧张": "anxiety", "担心": "anxiety", "迷茫": "confusion",

"裁员": "fear", "竞争": "competition", "认可": "recognition",

"加班": "burnout", "平衡": "balance", "变革": "change",

"适应": "adaptation", "发展": "growth", "团队": "teamwork"

}

# 情绪映射到建议

self.emotion_advice = {

"stress": {

"emoji": "😰",

"level": "高",

"description": "您表现出明显的压力迹象",

"suggestions": [

"尝试番茄工作法:25分钟专注工作+5分钟休息",

"将大任务分解为小目标,每完成一项给自己小奖励",

"每天安排15分钟'担忧时间',专门思考压力源",

"练习4-7-8呼吸法:吸气4秒,屏气7秒,呼气8秒"

],

"relaxation": [

"想象自己站在宁静的海边,听着海浪声",

"回忆一次让您感到自豪的成功经历",

"写下三件今天值得感恩的小事",

"听一段自然声音的音频(雨声、鸟鸣)"

]

},

"anxiety": {

"emoji": "😟",

"level": "中高",

"description": "您表现出焦虑情绪",

"suggestions": [

"建立早晨仪式:起床后先喝杯水,做5分钟伸展",

"创建每日优先级清单,只关注最重要的3件事",

"限制咖啡因摄入,尤其在下午",

"练习正念冥想:每天10分钟专注于呼吸"

],

"relaxation": [

"尝试渐进式肌肉放松:从脚趾到头部逐部位紧张再放松",

"写下所有担忧,然后撕碎象征性释放",

"观看一段萌宠视频,观察它们的无忧无虑",

"哼唱一首熟悉的歌曲,感受旋律带来的平静"

]

},

"confusion": {

"emoji": "🤔",

"level": "中",

"description": "您对职业方向感到困惑",

"suggestions": [

"与导师或职业教练进行一次结构化对话",

"制作个人技能地图:列出优势、待发展领域",

"探索公司内部轮岗机会或跨部门项目",

"参加行业交流活动,了解不同职业路径",

"设定3个月短期目标,明确可衡量的里程碑"

],

"relaxation": [

"绘制您的理想工作环境图,包括物理和情感要素",

"读一本关于职业发展的励志书籍",

"采访一位您敬佩的职业人士的经历",

"尝试新技能学习,激活大脑的探索模式"

]

},

"fear": {

"emoji": "😨",

"level": "高",

"description": "您表达了对未来的担忧",

"suggestions": [

"更新简历和LinkedIn资料,增强掌控感",

"识别可控与不可控因素,专注前者",

"建立应急基金,增加财务安全感",

"发展副业或提升技能,创造更多可能性",

"定期进行自我肯定练习:写下自己的价值"

],

"relaxation": [

"练习自我同情冥想:像安慰朋友一样对待自己",

"创建愿景板:可视化理想的工作生活场景",

"回顾过去克服困难的经历,提醒自己的韧性",

"种植小盆栽,观察生命成长的疗愈力量"

]

},

"burnout": {

"emoji": "😫",

"level": "高",

"description": "您显示出职业倦怠迹象",

"suggestions": [

"严格执行工作边界:设定下班时间和免打扰时段",

"每周安排半日'数字排毒'时间",

"学会说'不',保护自己的时间和精力",

"寻找工作中的意义点,哪怕是很小的贡献",

"确保每晚7-8小时高质量睡眠"

],

"relaxation": [

"泡个热水澡,加入几滴薰衣草精油",

"做30分钟有氧运动,促进内啡肽分泌",

"准备健康零食盒,避免血糖波动影响情绪",

"整理工作空间,创造清爽环境"

]

},

"neutral": {

"emoji": "😐",

"level": "低",

"description": "您的情绪状态相对平稳",

"suggestions": [

"建立晨间习惯:运动、冥想或阅读",

"定期与同事进行非工作话题的交流",

"主动寻求反馈,了解改进空间",

"规划小型职业发展学习活动"

],

"relaxation": [

"欣赏办公室窗外的风景,练习专注当下",

"尝试新口味的茶或咖啡,体验微小变化",

"给绿植浇水,观察生命细节",

"写工作日记,记录积极时刻"

]

}

}

def analyze_text(self, text):

"""分析文本情绪"""

emotions = []

for keyword, emotion in self.keyword_map.items():

if keyword in text:

emotions.append(emotion)

if not emotions:

return "neutral"

# 返回出现频率最高的情绪

return max(set(emotions), key=emotions.count)

def get_advice(self, emotion):

"""获取情绪对应的建议"""

return self.emotion_advice.get(emotion, self.emotion_advice["neutral"])

# 创新与变革管理建议生成器

class ChangeManagementAdvisor:

def __init__(self):

self.quotes = [

"变革不是威胁,而是机遇。拥抱变化者将引领未来。",

"创新源于不同视角的碰撞,保持开放心态至关重要。",

"在变革时期,学习能力比现有知识更重要。",

"真正的稳定来自于适应变化的能力,而非固守现状。",

"每一次组织变革都是重塑自我的机会,你是自己职业生涯的CEO。",

"创新往往发生在学科交叉处,拓展你的知识边界。",

"领导变革的关键不是消除不确定性,而是学会在不确定中前行。",

"文化变革始于个体行为的改变,从自身做起。",

"数字化转型不仅是技术升级,更是思维方式的转变。",

"可持续的创新需要将人、流程和技术有机结合。"

]

self.strategies = {

"压力管理": [

"实施EAP员工援助计划,提供专业心理咨询",

"建立压力监测系统,定期评估团队心理状态",

"推广正念领导力培训,管理者以身作则",

"设计弹性工作安排,尊重工作生活边界"

],

"变革适应": [

"创建变革故事:清晰传达'为什么变'和'变向何方'",

"建立变革大使网络,培养内部倡导者",

"采用分阶段实施策略,降低变革冲击",

"设立短期胜利庆祝机制,维持变革动力"

],

"创新激发": [

"设立'创新沙盒'实验区,允许试错",

"举办跨学科创新挑战赛,打破部门墙",

"实施'20%时间'政策,鼓励自主探索",

"建立快速原型迭代机制,加速创意验证"

],

"团队协作": [

"引入协作技术工具,减少沟通摩擦",

"设计跨职能团队任务,促进知识共享",

"建立心理安全机制,鼓励建设性冲突",

"实施团队反思会议,持续优化协作方式"

]

}

def get_random_quote(self):

return random.choice(self.quotes)

def get_strategy(self, category):

return random.choice(self.strategies[category])

# 主应用类

class StressMonitorApp:

def __init__(self, root):

self.root = root

self.root.title("AI职场压力监测与调节助手")

self.root.geometry("1000x700")

self.root.configure(bg="#f0f8ff")

# 初始化组件

self.speech_recognizer = SpeechRecognizer()

self.emotion_analyzer = EmotionAnalyzer()

self.change_advisor = ChangeManagementAdvisor()

# 创建历史记录

self.history = []

# 创建UI

self.create_widgets()

# 加载图标

self.load_images()

# 初始显示

self.show_welcome()

def load_images(self):

# 创建简单的表情图标

self.emojis = {

"stress": self.create_emoji_image("😰"),

"anxiety": self.create_emoji_image("😟"),

"confusion": self.create_emoji_image("🤔"),

"fear": self.create_emoji_image("😨"),

"burnout": self.create_emoji_image("😫"),

"neutral": self.create_emoji_image("😐")

}

def create_emoji_image(self, emoji_char):

# 创建一个包含表情符号的图像

fig, ax = plt.subplots(figsize=(2, 2))

ax.text(0.5, 0.5, emoji_char, fontsize=40, ha='center', va='center')

ax.axis('off')

canvas = FigureCanvasTkAgg(fig, master=self.root)

canvas.draw()

return canvas

def create_widgets(self):

# 创建主框架

main_frame = ttk.Frame(self.root)

main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)

# 左侧面板 - 输入区域

left_frame = ttk.LabelFrame(main_frame, text="压力输入与分析")

left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=10, pady=10)

# 输入方式选择

input_frame = ttk.Frame(left_frame)

input_frame.pack(fill=tk.X, padx=10, pady=10)

ttk.Label(input_frame, text="输入方式:").pack(side=tk.LEFT)

self.input_var = tk.StringVar(value="text")

ttk.Radiobutton(input_frame, text="文字输入", variable=self.input_var,

value="text", command=self.toggle_input).pack(side=tk.LEFT, padx=5)

ttk.Radiobutton(input_frame, text="语音输入", variable=self.input_var,

value="voice", command=self.toggle_input).pack(side=tk.LEFT, padx=5)

# 文字输入区域

self.text_frame = ttk.Frame(left_frame)

self.text_frame.pack(fill=tk.X, padx=10, pady=5)

ttk.Label(self.text_frame, text="描述您的职场压力:").pack(anchor=tk.W)

self.text_input = scrolledtext.ScrolledText(self.text_frame, height=5, wrap=tk.WORD)

self.text_input.pack(fill=tk.X, pady=5)

self.text_input.insert(tk.END, "例如:我感觉工作压力好大,项目 deadline 快到了...")

# 语音输入按钮

self.voice_frame = ttk.Frame(left_frame)

self.voice_btn = ttk.Button(self.voice_frame, text="开始语音识别", command=self.start_voice_recognition)

self.voice_btn.pack(pady=10)

self.voice_status = ttk.Label(self.voice_frame, text="")

self.voice_status.pack()

# 分析按钮

btn_frame = ttk.Frame(left_frame)

btn_frame.pack(fill=tk.X, padx=10, pady=10)

ttk.Button(btn_frame, text="分析压力状态", command=self.analyze_stress).pack(pady=5)

# 右侧面板 - 结果显示

right_frame = ttk.LabelFrame(main_frame, text="分析与建议")

right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10)

# 情绪分析结果

self.result_frame = ttk.Frame(right_frame)

self.result_frame.pack(fill=tk.X, padx=10, pady=10)

ttk.Label(self.result_frame, text="情绪分析结果:", font=("Arial", 10, "bold")).pack(anchor=tk.W)

self.emotion_result = ttk.Label(self.result_frame, text="等待分析...", font=("Arial", 12))

self.emotion_result.pack(anchor=tk.W, pady=5)

# 建议区域

self.advice_frame = ttk.Frame(right_frame)

self.advice_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

# 标签页

self.notebook = ttk.Notebook(self.advice_frame)

self.notebook.pack(fill=tk.BOTH, expand=True)

# 心理疏导建议标签

self.counseling_tab = ttk.Frame(self.notebook)

self.notebook.add(self.counseling_tab, text="心理疏导建议")

self.counseling_text = scrolledtext.ScrolledText(self.counseling_tab, wrap=tk.WORD)

self.counseling_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

self.counseling_text.insert(tk.END, "分析结果将显示在这里...")

self.counseling_text.config(state=tk.DISABLED)

# 放松文案标签

self.relaxation_tab = ttk.Frame(self.notebook)

self.notebook.add(self.relaxation_tab, text="放松文案")

self.relaxation_text = scrolledtext.ScrolledText(self.relaxation_tab, wrap=tk.WORD)

self.relaxation_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

self.relaxation_text.insert(tk.END, "放松内容将显示在这里...")

self.relaxation_text.config(state=tk.DISABLED)

# 创新与变革管理标签

self.change_tab = ttk.Frame(self.notebook)

self.notebook.add(self.change_tab, text="创新与变革管理")

self.change_text = scrolledtext.ScrolledText(self.change_tab, wrap=tk.WORD)

self.change_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)

self.change_text.insert(tk.END, "创新与变革建议将显示在这里...")

self.change_text.config(state=tk.DISABLED)

# 底部功能区

bottom_frame = ttk.Frame(main_frame)

bottom_frame.pack(fill=tk.X, padx=10, pady=10)

ttk.Button(bottom_frame, text="查看历史记录", command=self.show_history).pack(side=tk.LEFT, padx=5)

ttk.Button(bottom_frame, text="压力趋势图", command=self.show_trend).pack(side=tk.LEFT, padx=5)

ttk.Button(bottom_frame, text="退出", command=self.root.quit).pack(side=tk.RIGHT, padx=5)

# 初始隐藏语音相关元素

self.toggle_input()

def toggle_input(self):

if self.input_var.get() == "text":

self.text_frame.pack(fill=tk.X, padx=10, pady=5)

self.voice_frame.pack_forget()

else:

self.text_frame.pack_forget()

self.voice_frame.pack(fill=tk.X, padx=10, pady=5)

def start_voice_recognition(self):

self.voice_btn.config(state=tk.DISABLED)

self.voice_status.config(text="正在聆听...请说话")

# 模拟语音识别线程

threading.Thread(target=self.simulate_voice_recognition, daemon=True).start()

def simulate_voice_recognition(self):

# 模拟语音识别过程

time.sleep(2)

text = self.speech_recognizer.recognize_speech()

# 更新UI

self.root.after(0, lambda: self.update_voice_result(text))

def update_voice_result(self, text):

self.text_input.delete(1.0, tk.END)

self.text_input.insert(tk.END, text)

self.voice_btn.config(state=tk.NORMAL)

self.voice_status.config(text=f"识别成功: {text}")

def analyze_stress(self):

# 获取输入文本

if self.input_var.get() == "text":

text = self.text_input.get(1.0, tk.END).strip()

if not text or text.startswith("例如:"):

messagebox.showwarning("输入为空", "请输入您的压力描述")

return

else:

text = self.text_input.get(1.0, tk.END).strip()

if not text:

messagebox.showwarning("识别失败", "未能识别到有效语音内容")

return

# 分析情绪

emotion = self.emotion_analyzer.analyze_text(text)

advice_data = self.emotion_analyzer.get_advice(emotion)

# 添加到历史记录

timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

self.history.append({

"timestamp": timestamp,

"text": text,

"emotion": emotion,

"advice": advice_data

})

# 显示结果

self.display_results(emotion, advice_data)

# 显示创新与变革管理建议

self.display_change_management_advice()

def display_results(self, emotion, advice_data):

# 更新情绪结果

self.emotion_result.config(

text=f"{advice_data['emoji']} {emotion.upper()} ({advice_data['level']}压力水平) - {advice_data['description']}"

)

# 更新心理疏导建议

self.counseling_text.config(state=tk.NORMAL)

self.counseling_text.delete(1.0, tk.END)

self.counseling_text.insert(tk.END, f"【{emotion.upper()}情绪疏导建议】\n\n")

for i, suggestion in enumerate(advice_data["suggestions"], 1):

self.counseling_text.insert(tk.END, f"{i}. {suggestion}\n")

self.counseling_text.config(state=tk.DISABLED)

# 更新放松文案

self.relaxation_text.config(state=tk.NORMAL)

self.relaxation_text.delete(1.0, tk.END)

self.relaxation_text.insert(tk.END, f"【{emotion.upper()}情绪放松文案】\n\n")

for i, relaxation in enumerate(advice_data["relaxation"], 1):

self.relaxation_text.insert(tk.END, f"• {relaxation}\n")

self.relaxation_text.insert(tk.END, "\n【每日正念提醒】\n\n")

self.relaxation_text.insert(tk.END, "此刻的呼吸,连接着生命的能量。\n")

self.relaxation_text.insert(tk.END, "感受空气进入鼻腔的清凉,充满肺部的舒展。\n")

self.relaxation_text.insert(tk.END, "让思绪如云朵般飘过,不执着,不评判。\n")

self.relaxation_text.insert(tk.END, "你在此刻是安全的,完整的。")

self.relaxation_text.config(state=tk.DISABLED)

def display_change_management_advice(self):

# 获取随机引言

quote = self.change_advisor.get_random_quote()

# 获取随机策略

strategies = []

for category in self.change_advisor.strategies:

strategies.append(f"{category}: {self.change_advisor.get_strategy(category)}")

# 更新创新与变革管理建议

self.change_text.config(state=tk.NORMAL)

self.change_text.delete(1.0, tk.END)

self.change_text.insert(tk.END, f"【创新与变革智慧】\n\n\"{quote}\"\n\n")

self.change_text.insert(tk.END, "【实用变革策略】\n\n")

for strategy in strategies:

self.change_text.insert(tk.END, f"• {strategy}\n")

self.change_text.insert(tk.END, "\n【变革适应宣言】\n\n")

self.change_text.insert(tk.END, "我接纳变化为成长的催化剂,\n")

self.change_text.insert(tk.END, "在不确定中保持内在指南针,\n")

self.change_text.insert(tk.END, "将挑战转化为展现韧性的舞台,\n")

self.change_text.insert(tk.END, "以学习者姿态拥抱每个新可能。")

self.change_text.config(state=tk.DISABLED)

def show_history(self):

if not self.history:

messagebox.showinfo("历史记录", "暂无分析记录")

return

history_win = tk.Toplevel(self.root)

history_win.title("压力分析历史记录")

history_win.geometry("600x400")

frame = ttk.Frame(history_win)

frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

columns = ("时间", "压力描述", "情绪类型")

tree = ttk.Treeview(frame, columns=columns, show="headings")

for col in columns:

tree.heading(col, text=col)

tree.column(col, width=150)

tree.column("压力描述", width=250)

for record in self.history:

tree.insert("", tk.END, values=(

record["timestamp"],

record["text"][:50] + "..." if len(record["text"]) > 50 else record["text"],

record["emotion"]

))

scrollbar = ttk.Scrollbar(frame, orient=tk.VERTICAL, command=tree.yview)

tree.configure(yscroll=scrollbar.set)

scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

tree.pack(fill=tk.BOTH, expand=True)

ttk.Button(history_win, text="关闭", command=history_win.destroy).pack(pady=10)

def show_trend(self):

if len(self.history) < 2:

messagebox.showinfo("压力趋势", "需要至少两次分析才能显示趋势")

return

trend_win = tk.Toplevel(self.root)

trend_win.title("压力趋势分析")

trend_win.geometry("800x500")

# 提取数据

timestamps = [datetime.datetime.strptime(r["timestamp"], "%Y-%m-%d %H:%M:%S") for r in self.history]

emotions = [r["emotion"] for r in self.history]

# 情绪映射到数值

emotion_values = {

"stress": 5, "anxiety": 4, "confusion": 3,

"fear": 4, "burnout": 5, "neutral": 1

}

values = [emotion_values.get(e, 2) for e in emotions]

# 创建图表

fig, ax = plt.subplots(figsize=(10, 6))

ax.plot(timestamps, values, 'o-', color='#1f77b4', linewidth=2, markersize=8)

# 添加标签

for i, txt in enumerate(emotions):

ax.annotate(txt, (timestamps[i], values[i]),

textcoords="offset points", xytext=(0,10), ha='center')

# 设置图表属性

ax.set_title("职场压力变化趋势", fontsize=14)

ax.set_xlabel("时间", fontsize=10)

ax.set_ylabel("压力水平", fontsize=10)

ax.grid(True, linestyle='--', alpha=0.7)

ax.set_yticks([1, 2, 3, 4, 5])

ax.set_yticklabels(["低", "较低", "中", "较高", "高"])

plt.xticks(rotation=45)

plt.tight_layout()

# 嵌入到Tkinter

canvas = FigureCanvasTkAgg(fig, master=trend_win)

canvas.draw()

canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

ttk.Button(trend_win, text="关闭", command=trend_win.destroy).pack(pady=10)

def show_welcome(self):

welcome_msg = (

"欢迎使用AI职场压力监测与调节助手!\n\n"

"本系统结合创新与变革管理理念,通过智能分析帮助您:\n"

"• 识别职场压力源与情绪状态\n"

"• 提供个性化心理疏导建议\n"

"• 推送定制化放松文案\n"

"• 分享变革适应与创新策略\n\n"

"使用方法:\n"

"1. 选择输入方式(文字或语音)\n"

"2. 描述您的职场压力状况\n"

"3. 点击'分析压力状态'获取建议\n\n"

"祝您工作顺利,身心安康!"

)

messagebox.showinfo("欢迎使用", welcome_msg)

if __name__ == "__main__":

root = tk.Tk()

app = StressMonitorApp(root)

root.mainloop()

程序功能说明

这个AI职场压力监测与调节助手具有以下核心功能:

1. 多模态输入支持

- 文字输入:用户可以直接输入文字描述职场压力

- 语音输入:模拟语音识别功能(实际应用中可集成真实语音API)

2. 智能情绪分析

- 基于关键词识别情绪类型(压力、焦虑、困惑、恐惧、倦怠等)

- 评估压力水平(高、中、低)

- 提供情绪描述和表情符号可视化

3. 个性化建议推送

- 心理疏导建议:针对不同情绪提供具体应对策略

- 放松文案:包含正念练习、想象引导等放松技巧

- 创新与变革管理建议:结合课程内容提供职场适应策略

4. 历史记录与趋势分析

- 保存每次分析结果

- 可视化压力变化趋势

- 查看历史记录详情

5. 创新与变革管理整合

- 引用经典变革管理名言

- 提供实用的变革适应策略

- 分享创新激发方法

创新与变革管理课程整合

程序特别融入了创新与变革管理的核心理念:

1. 变革适应策略

- 强调变化作为成长机会的心态

- 提供分阶段实施、短期胜利庆祝等实用方法

2. 创新激发机制

- 建议设立"创新沙盒"实验区

- 提倡跨学科协作和"20%时间"政策

3. 压力管理与心理安全

- 整合EAP员工援助计划

- 强调建立心理安全机制的重要性

4. 持续学习与适应能力

- 突出学习能力比现有知识更重要的理念

- 鼓励发展适应变化的核心能力

使用说明

1. 运行程序后,选择输入方式(文字或语音)

2. 描述您的职场压力状况

3. 点击"分析压力状态"按钮

4. 查看右侧面板的分析结果和建议

5. 使用底部按钮查看历史记录或压力趋势图

这个程序通过结合情绪分析和创新管理理论,为用户提供了一个全面的职场压力管理解决方案,帮助用户更好地应对变革中的挑战。

我是编程小白,请大家多多指教,谢谢!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!