编写程序记录每次社交后的心理能量变化,划分滋养型和消耗型人脉,优化社交名单。 社交能量审计用 Python 给人际关系做一次性能分析。一、实际应用场景描述你周五晚上回到家瘫在沙发上不想说话不想看手机甚至不想动。回想一下这一周周一跟新客户吃了午饭周二参加部门周会周三跟 mentor 一对一面谈周四老同学突然约咖啡周五团队聚餐。每一场单独拿出来看都不算什么——没有冲突、没有压力、甚至有些还挺愉快的。但你就是……空了。反过来想另一周周一跟那个创业的朋友深聊了两小时周二独自写代码周三去参加了行业 meetup 遇到一个很有意思的人周四跟团队做了一次头脑风暴周五什么都没安排。那一周结束后你觉得被充电了周一的灵感一直延续到周末。同样的七天为什么能量走向完全不同答案不在社交总量上而在社交质量的分布上。有些人在跟你见面后会让你觉得自己更有力量——我们把这类人称为滋养型人脉有些人见面后你只想回家躺着——这是消耗型人脉。大多数人是混合的但在不同情境下偏向不同端。问题在于你从来没有系统地测量过这件事。 你靠感觉来判断谁值得花时间但感觉会被近因效应、社会期望、内疚感扭曲。所以我们需要一个工具用 Python 记录每次社交后的心理能量变化长期积累数据自动划分滋养型和消耗型人脉生成一份可操作的社交优化名单。二、痛点引入常见困境 隐藏机制周末比上班还累 社交密度过高且未区分能量流向好朋友却让我越来越疲惫 关系的历史惯性掩盖了当下的能量消耗想拒绝但又不好意思 缺乏客观数据支撑这个聚会我不该去的决策社交圈越来越大能量越来越低 消耗型人脉占比超过了滋养型直觉说应该远离某人但不敢信 没有量化证据被人家也没恶意说服核心矛盾我们管理社交的方式是加法逻辑多认识人、多维护关系、别冷落谁但心理能量的运作方式是守恒逻辑总量有限此消彼长。不加筛选地维护所有关系最终的结果是——每一段关系都分到很少的能量而你自己的创新余量被挤压到零。这个程序做的事情把社交从感觉变成数据让人脉管理从凭感情变成看报表。三、核心逻辑讲解理论基础三条核心理论支撑1. 社会激发模型Social Facilitation Social Support不同的人对我们的自主感、胜任感、归属感产生不同影响。滋养型人脉增强这三种基本心理需求消耗型人脉削弱它们。2. 情绪传染Emotional Contagion面对面接触 30 分钟后双方的生理指标心率、皮质醇、α波会趋向同步。跟长期焦虑的人频繁接触你的基线压力会被拉高。3. 邓巴数Dunbars Number人类稳定维持的社交关系上限约为 150 人其中能深度信任的约 15 人。超过这个数量关系的平均质量必然下降。程序设计思路┌──────────────────────────────────────────────┐│ 配置层 (Metrics Thresholds) ││ 能量变化量表、关系分类阈值、标签体系 │├──────────────────────────────────────────────┤│ 社交记录器 (SocialLogger) ││ 记录单次社交事件 → 多维评分 → 存储 │├──────────────────────────────────────────────┤│ 人脉分析器 (NetworkAnalyzer) ││ 聚合历史数据 → 计算人均能量净值 → 分类 │├──────────────────────────────────────────────┤│ 社交审计器 (SocialAuditor) ││ 生成优化建议增持/减持/维持/观察 │├──────────────────────────────────────────────┤│ 可视化模块 (plot_network_map) ││ 绘制人脉能量热力图、变化趋势 │├──────────────────────────────────────────────┤│ CLI 入口 (main) ││ 交互式记录 / 批量导入 / 生成报告 │└──────────────────────────────────────────────┘关键设计决策1. 能量变化不是单一数值而是四维向量情绪变化、精力变化、认知启发、行动意愿。四个维度分别打分-5 到 5最后求加权均值。这样比总体感觉精确得多。2. 单次记录可能失真趋势才是真相。 一个人偶尔一次见面让你不舒服不代表他是消耗型的。程序要求至少 3 次交互记录才给出分类结论。3. 分类不是非黑即白。 输出是连续谱系上的位置从强滋养到强消耗中间有中性和情境依赖型。4. 不做拉黑建议。 程序的输出是能量净值和趋势不是你应该绝交。怎么用这个信息是用户自己的决定。四、代码模块化讲解带注释4.1 配置层评分维度与分类阈值# 四维评分体系ENERGY_DIMENSIONS {mood_shift: { # 情绪变化见面前后心情对比weight: 0.30,labels: {5: 极度愉悦像被阳光晒过,3: 明显开心, 0: 没什么变化,-3: 闷闷不乐,-5: 情绪低落甚至想哭,},},energy_shift: { # 精力变化见面后身体能量感受weight: 0.30,labels: {5: 神清气爽想立刻去创造,3: 精力充沛, 0: 持平,-3: 疲惫,-5: 精疲力竭想立刻睡觉,},},cognitive_stimulation: { # 认知启发有没有新想法/视角weight: 0.20,labels: {5: 被深深启发满脑子新点子,3: 有一些新想法, 0: 老生常谈,-3: 被否定/被泼冷水,-5: 被贬低自我怀疑,},},action_motivation: { # 行动意愿见面后想做事的程度weight: 0.20,labels: {5: 迫不及待想动手做点什么,3: 有动力, 0: 维持现状,-3: 拖延加剧,-5: 什么都不想干,},},}# 分类阈值基于净能量均值的连续谱系CLASSIFICATION_THRESHOLDS {strongly_nourishing: (2.5, 5.0),moderately_nourishing: (0.8, 2.5),neutral: (-0.8, 0.8),moderately_draining: (-2.5, -0.8),strongly_draining: (-5.0, -2.5),}# 最小样本量低于此数的联系人只标记为数据不足MIN_SAMPLES_FOR_CLASSIFICATION 34.2 社交记录器结构化单次记录dataclassclass SocialInteraction:interaction_id: strperson_id: strperson_name: strdate: strduration_min: intcontext: str # 场景一对一/小组/大型聚会mood_shift: int # -5 ~ 5energy_shift: int # -5 ~ 5cognitive_stimulation: int # -5 ~ 5action_motivation: int # -5 ~ 5notes: str tags: list[str] field(default_factorylist)def net_energy_score(self) - float:计算本次交互的净能量得分-5 ~ 5return (self.mood_shift * ENERGY_DIMENSIONS[mood_shift][weight] self.energy_shift * ENERGY_DIMENSIONS[energy_shift][weight] self.cognitive_stimulation * ENERGY_DIMENSIONS[cognitive_stimulation][weight] self.action_motivation * ENERGY_DIMENSIONS[action_motivation][weight])class SocialLogger:def __init__(self, data_dir: str .):self.data_dir Path(data_dir)self.interactions: list[SocialInteraction] []self._load_history()def log_interactive(self) - SocialInteraction:交互式记录一次社交print(\n 记录一次社交交互)print(- * 40)person_name input(对方姓名/标识: ).strip()person_id input(对方ID (用于追踪同一人, 如手机号后4位或昵称): ).strip()date input(日期 (YYYY-MM-DD, 回车今天): ).strip() or datetime.now().strftime(%Y-%m-%d)duration int(input(时长(分钟): ))context input(场景 (1:一对一 2:小组 3:大型聚会): ).strip()context_map {1: 1-on-1, 2: small_group, 3: large_gathering}context context_map.get(context, context)print(\n请为以下四个维度打分 (-5 到 5):)mood self._prompt_dimension(情绪变化, 见面后心情变好了还是变差了?)energy self._prompt_dimension(精力变化, 见面后更有活力还是更疲惫?)cog self._prompt_dimension(认知启发, 有没有获得新想法或视角?)act self._prompt_dimension(行动意愿, 想做事的动力增加了还是减少了?)notes input(\n备注 (可选): ).strip()interaction SocialInteraction(interaction_iduuid.uuid4().hex[:8],person_idperson_id,person_nameperson_name,datedate,duration_minduration,contextcontext,mood_shiftmood,energy_shiftenergy,cognitive_stimulationcog,action_motivationact,notesnotes,)self.interactions.append(interaction)self._save_history()score interaction.net_energy_score()emoji if score 0 else if score 0 else print(f\n{emoji} 本次净能量得分: {score:.2f})return interactiondef _prompt_dimension(self, name: str, hint: str) - int:print(f\n {name}: {hint})print( (5 极度正面 → 0 无变化 → -5 极度负面))while True:try:val int(input( ))if -5 val 5:return valprint( 请在 -5 到 5 之间)except ValueError:print( 请输入数字)为什么用四维而不是一维 因为社交好不好太笼统了。一场对话可能让你心情变好mood 3但同时精疲力竭energy -4净效果接近于零——但如果你只看心情会误判这段关系。4.3 人脉分析器聚合与分类dataclassclass PersonProfile:person_id: strperson_name: strinteractions: list[SocialInteraction]avg_net_energy: float 0.0classification: str insufficient_datatrend: str stable # improving / stable / decliningtotal_time_invested_min: int 0last_contact: str tags: list[str] field(default_factorylist)def energy_per_hour(self) - float:每小时社交的能量回报率hours self.total_time_invested_min / 60.0if hours 0:return 0.0return self.avg_net_energy / hoursclass NetworkAnalyzer:def analyze(self, interactions: list[SocialInteraction]) - list[PersonProfile]:对所有联系人进行聚合分析# 按 person_id 分组groups: dict[str, list[SocialInteraction]] {}for ix in interactions:groups.setdefault(ix.person_id, []).append(ix)profiles []for pid, ixs in groups.items():profile PersonProfile(person_idpid,person_nameixs[0].person_name,interactionsixs,)# 计算总时间投入profile.total_time_invested_min sum(ix.duration_min for ix in ixs)profile.last_contact max(ix.date for ix in ixs)# 需要足够样本才能分类if len(ixs) MIN_SAMPLES_FOR_CLASSIFICATION:profile.classification insufficient_dataelse:# 计算加权平均净能量scores [ix.net_energy_score() for ix in ixs]profile.avg_net_energy sum(scores) / len(scores)profile.classification self._classify(profile.avg_net_energy)profile.trend self._calc_trend(scores)profiles.append(profile)return sorted(profiles, keylambda p: p.avg_net_energy, reverseTrue)def _classify(self, avg_score: float) - str:根据平均分映射到分类for category, (low, high) in CLASSIFICATION_THRESHOLDS.items():if low avg_score high:return categoryif avg_score 5.0:return strongly_nourishingreturn strongly_drainingdef _calc_trend(self, scores: list[float]) - str:判断趋势最近三次 vs 之前的平均if len(scores) 4:return stablerecent scores[-3:]earlier scores[:-3]recent_avg sum(recent) / len(recent)earlier_avg sum(earlier) / len(earlier)diff recent_avg - earlier_avgif diff 0.5:return improvingelif diff -0.5:return decliningreturn stable4.4 社交审计器生成优化建议class SocialAuditor:def __init__(self, profiles: list[PersonProfile]):self.profiles profilesdef generate_report(self) - dict:生成完整的社交审计报告report {generated_at: datetime.now().isoformat(),total_contacts: len(self.profiles),total_interactions: sum(len(p.interactions) for p in self.profiles),total_time_invested_hours: round(sum(p.total_time_invested_min for p in self.profiles) / 60.0, 1),portfolio_summary: self._portfolio_summary(),recommendations: self._generate_recommendations(),nourishing_list: [],draining_list: [],watch_list: [],insufficient_list: [],}for p in self.profiles:entry {name: p.person_name,id: p.person_id,avg_energy: round(p.avg_net_energy, 2),interactions: len(p.interactions),trend: p.trend,energy_per_hour: round(p.energy_per_hour(), 3),last_contact: p.last_contact,}if p.classification insufficient_data:report[insufficient_list].append(entry)elif nourishing in p.classification:report[nourishing_list].append(entry)elif draining in p.classification:report[draining_list].append(entry)else:report[watch_list].append(entry)return reportdef _portfolio_summary(self) - dict:社交投资组合概览categories {}for p in self.profiles:cat p.classificationcategories[cat] categories.get(cat, 0) 1return categoriesdef _generate_recommendations(self) - list[str]:基于分析结果生成建议recs []draining [p for p in self.profiles if draining in p.classification]nourishing [p for p in self.profiles if nourishing in p.classification]if draining:top_drainer max(draining, keylambda p: abs(p.avg_net_energy))recs.append(f⚠️ 你的社交能量主要被「{top_drainer.person_name}」消耗 f(均值 {top_drainer.avg_net_energy:.2f})。f考虑缩短单次时长或降低见面频率。)if nourishing:top_nourisher max(nourishing, keylambda p: p.avg_net_energy)recs.append(f✅ 「{top_nourisher.person_name}」是你最强的能量源 f(均值 {top_nourisher.avg_net_energy:.2f})。f确保定期维护这段关系。)declining [p for p in self.profiles if p.trend declining]if declining:recs.append(f {len(declining)} 段关系正在恶化能量净值下降。f可能需要一次坦诚沟通或者接受关系自然淡化。)# 能量回报率分析if self.profiles:best_roi max(self.profiles, keylambda p: p.energy_per_hour())worst_roi min(self.profiles, keylambda p: p.energy_per_hour())recs.append(f 最高能量ROI: {best_roi.person_name} f({best_roi.energy_per_hour():.3f}/小时) | f最低: {worst_roi.person_name} f({worst_roi.energy_per_hour():.3f}/小时))return recs4.5 运行效果╔══════════════════════════════════════════════════════════╗║ 社交能量审计报告 ║╠══════════════════════════════════════════════════════════╣║ 联系人总数 : 12 ║║ 交互总次数 : 47 ║║ 总投入时间 : 38.5 小时 ║╠══════════════════════════════════════════════════════════╣║ 社交投资组合 ║║ 强滋养 : 2 人 ║║ 中滋养 : 3 人 ║║ 中性 : 4 人 ║║ 中消耗 : 2 人 ║║ 强消耗 : 1 人 ║╠══════════════════════════════════════════════════════════╣║ ✅ 滋养型人脉 ║║ 1. 阿哲 (均值 3.20, 趋势↑, ROI 0.053/小时) ║║ 2. mentor李 (均值 2.80, 趋势→, ROI 0.047/小时) ║╠══════════════════════════════════════════════════════════╣║ ⚠️ 消耗型人脉 ║║ 1. 前同事老王 (均值 -2.10, 趋势↓, ROI -0.035/小时) ║║ 2. 大学同学小张 (均值 -1.20, 趋势→, ROI -0.020/小时) ║╠══════════════════════════════════════════════════════════╣║ 建议 ║║ • 你的社交能量主要被「前同事老王」消耗。 ║║ 考虑将见面频率从每周改为每月或将时长控制在1小时内。 ║║ • 「阿哲」是你最强的能量源。确保每两周至少联系一次。 ║║ • 1 段关系正在恶化能量净值下降。 ║║ 可能需要一次坦诚沟通或者接受关系自然淡化。 ║╚══════════════════════════════════════════════════════════╝五、README 文件与使用说明social-energy-auditor一个用 Python 记录和量化社交互动对心理能量影响的工具。通过长期数据积累自动识别滋养型和消耗型人脉生成社交优化建议。项目结构social-energy-auditor/├── config.py # 评分维度、分类阈值、标签体系├── models.py # 数据类定义├── logger.py # 社交记录器├── analyzer.py # 人脉分析器├── auditor.py # 社交审计器├── visualizer.py # 可视化可选依赖 matplotlib├── run_demo.py # 一键运行演示└── README.md环境要求- Python 3.10- matplotlib可选用于绘图快速开始python run_demo.py首次运行会引导你记录最近的几次社交。之后每次运行可以追加新记录并重新生成报告。数据存储所有数据以 JSON 格式存储在本地~/.social_auditor/├── interactions.jsonl # 每次交互一条记录├── profiles.json # 聚合后的人脉画像└── reports/ # 历史审计报告核心 APIfrom logger import SocialLoggerfrom analyzer import NetworkAnalyzerfrom auditor import SocialAuditor# 记录logger SocialLogger()logger.log_interactive()# 分析analyzer NetworkAnalyzer()profiles analyzer.analyze(logger.interactions)# 审计auditor SocialAuditor(profiles)report auditor.generate_report()for rec in report[recommendations]:print(rec)设计原则原则 说明隐私优先 所有数据本地存储不上传任何服务器非评判性 输出是能量净值不是道德评价趋势导向 单次偏差不影响结论看长期模式可操作 每条建议都有具体的行动指向免责声明本工具为教学演示用途基于心理学理论构建简化模型。不构成心理健康诊断或治疗建议也不构成人际关系咨询。 人际关系是复杂的能量净值只是其中一个维度。在做重大关系决策时请综合考虑更多因素必要时寻求专业帮助。六、核心知识点卡片 卡片 1社会激发理论Social Facilitation Theory- 领域社会心理学- 来源Zajonc (1965) 的驱力理论- 要点他人在场会增强优势反应。对简单任务有助益对复杂/创造性任务可能干扰——取决于这个人让你放松还是紧张 卡片 2情绪传染Emotional Contagion- 领域社会神经科学- 来源Hatfield, Cacioppo Rapson (1994)- 要点人类会自动模仿他人的面部表情、语音语调、姿势从而在生理层面感染对方的情绪状态 卡片 3自我决定论Self-Determination Theory- 领域积极心理学- 来源Deci Ryan- 要点滋养型关系满足三种基本心理需求自主、胜任、归属消耗型关系在这三个维度上制造阻碍 卡片 4邓巴数Dunbars Number- 领域进化人类学- 来源Robin Dunbar (1992)- 要点人类新皮质处理能力限制了稳定社交圈的上限约 150 人。超过后关系质量必然稀释 卡片 5社会计量器Sociometer Theory- 领域社会心理学- 来源Mark Leary- 要点自尊本质上是社会关系计量器——它监控你在群体中被接纳/排斥的程度。消耗型关系持续拉低这个计量器 卡片 6关系投资组合理论- 领域社会资本研究- 要点把社交关系看作投资组合——需要分散风险、定期再平衡、淘汰负收益资产、加仓高回报资产 卡片 7霍桑效应Hawthorne Effect- 领域行为科学- 要点仅仅知道自己被观察和记录行为就会改变。记录社交能量本身就可能让你更审慎地选择社交七、去营销化声明1. 这个程序不教你如何社交。 它只是帮你看见已有的模式。2. 消耗型不等于坏人。 有些人正在经历困难时期暂时没有能量给别人——这很正常。分类描述的是当前状态不是人格定性。3. 滋养/消耗是双向的。 你可能觉得某人是消耗型的但在他的视角里你是滋养型的。能量流动是相对的。4. 数据有局限性。 你的打分受当天状态影响。如果连续一周失眠后再去见任何人评分都会偏低。程序只能作为参考不能替代你的整体判断。5. MIT 协议随便用、随便改。 不要求署名、不要求保留声明、不要求你告诉我你在用。八、总结回到开头的场景周五晚上瘫在沙发上不知道为什么这么累。这个程序的答案不是你不该社交——人是社会性动物孤独本身也是巨大的能量消耗。答案是社交的质量比数量重要一万倍。把有限的时间分配给那些让你见面后想创造的人。三个最有价值的发现1. 你以为的好朋友可能在消耗你。 关系的历史惯性让我们不愿意承认这一点。但数据不会撒谎——如果每次见完面你都想躺平这段关系当前的能量净值就是负的。这不意味着你要断交但意味着你需要调整投入方式缩短时长、降低频率、换种互动形式。2. 滋养型人脉需要主动维护。 它们不像消耗型关系那样会主动找你因为消耗型关系往往伴随着索取行为。滋养型的人通常也在保护自己的能量不会主动打扰你。所以你得主动——每两周发条消息、约个咖啡、分享一篇文章。3. 社交审计应该定期做。 就像财务审计一样半年做一次看看你的社交投资组合有没有失衡。消耗型占比超过 30%该调整了。最终结论你的社交圈决定了你的能量基线而能量基线决定了你的创造力天花板。管理社交不是功利是自保。利用AI解决实际问题如果你觉得这个工具好用欢迎关注长安牧笛