""" 巴纳姆冷读引擎 - Barnum Cold Reader Engine 将机械解读转化为温暖有共鸣的语言 Version: 1.0 Created: 2026-02-03 Author: Sisi & TH Studio 核心技巧: 1. 两面性描述:"您有时候A,有时候B" 2. 条件性语言:"当...时","如果..." 3. 验证性钩子:让用户感觉被"看透" 4. 普遍但个性化:听起来只说给你一个人听 """ from typing import Dict, List, Any, Optional from enum import Enum class BarnumTone(Enum): """巴纳姆语调类型""" WARM = "warm" # 温暖亲切 INSIGHTFUL = "insightful" # 洞察深刻 SUPPORTIVE = "supportive" # 支持鼓励 CAUTIOUS = "cautious" # 谨慎提醒 class BarnumColdReader: """ 巴纳姆冷读引擎 将机械断语转化为温暖有共鸣的语言 """ def __init__(self): """初始化巴纳姆引擎""" # 两面性描述模板 self.duality_templates = { 'personality': [ "您内心深处{trait_a},但在外人面前往往展现出{trait_b}的一面", "您有时候{trait_a},有时候又{trait_b}——这种矛盾正是您独特魅力的来源", "在熟悉的人面前,您会展露{trait_a}的性格;而面对陌生环境,您更倾向于{trait_b}", "您可能已经注意到,内在的{trait_a}与外在的{trait_b},让您比一般人更能理解人性的复杂" ], 'career': [ "您既有{strength_a}的能力,也有{strength_b}的潜质——关键在于何时发挥哪种特长", "您的职业天赋在于:能够灵活切换{strength_a}和{strength_b}两种模式", "当需要{strength_a}时,您能做到;当需要{strength_b}时,您同样不会让人失望" ], 'relationship': [ "在感情中,您渴望{need_a},同时又珍惜{need_b}", "您理想的伴侣,应该能够理解您对{need_a}和{need_b}的双重需求", "您有时候需要{need_a},有时候更想要{need_b}——这很正常,真正爱您的人会懂得平衡" ] } # 条件性语言模板 self.conditional_templates = { 'opportunity': [ "当{condition}时,您会发现机会自然而然地向您靠近", "如果您能够{condition},接下来的发展将会超出您的预期", "在{condition}的情况下,您的优势会得到最大发挥" ], 'challenge': [ "当{condition}时,需要特别注意——但这同时也是成长的契机", "如果遇到{condition},不必过于担忧,您完全有能力化解", "在{condition}的时候,放慢脚步反而是明智之选" ] } # 验证性钩子模板(让用户感觉被"看透") self.validation_hooks = { 'personality': [ "您可能已经注意到,", "旁人或许不理解,但您心里清楚,", "您曾经有过这样的经历——", "有些事情您不说,但其实您早就意识到了,", "这一点您可能不会轻易告诉别人," ], 'experience': [ "回想过去,您应该能找到印证——", "这解释了为什么您曾经会{event}", "您过去的某些经历,其实正是这种特质的体现", "或许您已经隐约感受到了这一点" ] } # 星曜个性化描述(温暖版) self.star_warm_descriptions = { '紫微': { 'opening': "紫微坐命的您,内心深处有着与生俱来的领袖气质。", 'insight': "您可能已经注意到,人们常常自然而然地向您寻求建议——即使您有时并不刻意追求这种角色。", 'duality': "有趣的是,您既有掌控全局的魄力,同时又保持着适度的谨慎。您知道什么时候该果断决策,什么时候该静观其变。", 'empathy': "当然,'高处不胜寒'的感觉您可能也体会过。但请记住,真正的领导者,往往都经历过这样的磨练。", 'closing': "您的贵气不在于张扬,而在于那份从容不迫的气度。" }, '天机': { 'opening': "天机星让您拥有敏锐的观察力和快速的反应能力。", 'insight': "您的思维转换之快,有时候甚至会让身边的人跟不上您的节奏。", 'duality': "您既能在宏观层面把握大局,又能注意到别人忽略的细节。这种能力在适当的时候是巨大的优势。", 'empathy': "唯一需要注意的是,过度的思考有时会让您感到疲惫。学会适时放空,对您尤为重要。", 'closing': "您的智慧在于洞察,更在于知道何时该思考,何时该行动。" }, '太阳': { 'opening': "太阳坐命,赋予您开朗热情的性格和乐于助人的天性。", 'insight': "您可能已经发现,人们喜欢围绕在您身边——您的光芒会感染周围的人。", 'duality': "您既有燃烧自己照亮他人的热忱,同时内心也渴望被理解和认可。", 'empathy': "有时候,您付出很多却不一定得到等量的回报,这会让您感到委屈。但请相信,您的善良终会得到回应。", 'closing': "您最大的财富,是那颗永远温暖的心。" }, '武曲': { 'opening': "武曲星赋予您刚毅果断的性格和出色的理财能力。", 'insight': "您做事讲求效率,不喜欢绕弯子——这种直接的风格在关键时刻往往能发挥奇效。", 'duality': "您外表看起来强硬,但内心其实非常重情义。只是您习惯用行动而非言语来表达关心。", 'empathy': "有时候,您的直接可能会无意中伤害到敏感的人。学会适度柔软,会让您的人际关系更加融洽。", 'closing': "您的力量在于坚定,更在于知道为什么而坚定。" }, '天同': { 'opening': "天同星让您拥有温和随性的性格,懂得享受生活的美好。", 'insight': "您可能已经注意到,自己很容易知足,对物质的追求不如别人那么强烈。", 'duality': "您既有安于现状的一面,也有追求更好生活的内在动力——关键是找到两者的平衡。", 'empathy': "有时候别人会觉得您不够上进,但其实您只是更看重内心的平静和幸福。这是一种智慧。", 'closing': "您最大的福气,是懂得什么才是真正重要的。" }, '廉贞': { 'opening': "廉贞星赋予您多才多艺的特质和出色的社交能力。", 'insight': "您在人际交往中游刃有余,能够快速与他人建立联系。", 'duality': "您既有热情主动的一面,也有谨慎保护自己的本能。这让您在社交场合收放自如。", 'empathy': "有时候,您可能会觉得自己扮演了太多角色,不确定哪个才是真正的自己。这种困惑其实是深度自我觉察的体现。", 'closing': "您的魅力在于灵活,更在于始终保持真实的那份底色。" }, '天府': { 'opening': "天府星让您拥有稳重踏实的性格和善于积累的能力。", 'insight': "您做事有规划,不喜欢冒险,这让您在长期发展中更有优势。", 'duality': "您既有保守谨慎的一面,也有对美好生活的追求。您知道如何在安全的范围内实现最大的收益。", 'empathy': "有时候,过于谨慎可能会让您错失一些机会。但您的稳健,在关键时刻往往能保护您免受更大的损失。", 'closing': "您最大的财富,是那份稳中求进的智慧。" }, '太阴': { 'opening': "太阴坐命,赋予您细腻敏感的内心和深厚的情感能力。", 'insight': "您能够感知到他人忽略的情绪变化,这种能力让您在关系中更有同理心。", 'duality': "您既有温柔体贴的一面,也有坚强独立的内核。柔软是您的选择,不是软弱。", 'empathy': "敏感有时会让您承受更多的情绪波动,学会适度屏蔽负面能量,会让您更加自在。", 'closing': "您的光芒不在于耀眼,而在于那份温润如玉的气质。" }, '贪狼': { 'opening': "贪狼星让您拥有多才多艺的特质和永不满足的进取心。", 'insight': "您的兴趣广泛,总是对新鲜事物充满好奇——这让您的人生比一般人更加丰富多彩。", 'duality': "您既有追求刺激的冒险精神,也有脚踏实地的务实一面。关键是找到两者的平衡点。", 'empathy': "有时候,您可能会感到欲望太多,精力不够分配。学会取舍,反而能成就更多。", 'closing': "您最大的魅力,是那份永远年轻的热情和好奇心。" }, '巨门': { 'opening': "巨门星赋予您出色的口才和敏锐的分析能力。", 'insight': "您善于发现问题、表达观点,在需要沟通和辩论的场合往往能脱颖而出。", 'duality': "您既有直言不讳的勇气,也有察言观色的智慧。关键在于把握说话的时机和分寸。", 'empathy': "有时候,您的直接可能会引来是非。但请相信,真诚的沟通最终会被理解。", 'closing': "您的力量在于表达,更在于懂得何时该说、何时该静。" }, '天相': { 'opening': "天相星让您拥有温和忠诚的性格和出色的协调能力。", 'insight': "您是天生的调和者,能够在冲突中找到各方都能接受的解决方案。", 'duality': "您既有服务他人的热心,也有坚守原则的底线。您的柔软不是没有棱角,而是知道什么时候该圆滑。", 'empathy': "有时候,您可能会因为过度照顾他人而忽略自己的需求。记住,照顾好自己,才能更好地帮助别人。", 'closing': "您最大的价值,是那份让周围人都感到舒适的能力。" }, '天梁': { 'opening': "天梁星赋予您正直善良的性格和乐于助人的天性。", 'insight': "您有一种与生俱来的使命感,喜欢为他人排忧解难。", 'duality': "您既有清高自持的一面,也有融入世俗的智慧。您知道如何在保持原则的同时与人为善。", 'empathy': "有时候,您的善良可能不被理解,甚至被人利用。但请相信,您的付出终会得到回报——即使方式和时间出乎意料。", 'closing': "您最大的福报,是那颗始终向善的心。" }, '七杀': { 'opening': "七杀星赋予您果敢刚毅的性格和独立自主的特质。", 'insight': "您不喜欢被束缚,喜欢按自己的方式做事——这种独立精神是您最大的优势。", 'duality': "您外表看起来强硬无畏,但内心其实非常细腻。只是您习惯了独自承担,不愿轻易示弱。", 'empathy': "有时候,您可能会觉得自己走得太孤独。但请记住,领先者往往都是孤独的——这是荣耀的代价。", 'closing': "您的力量在于勇往直前,更在于知道自己为何而战。" }, '破军': { 'opening': "破军星让您拥有开创变革的精神和不安于现状的特质。", 'insight': "您不喜欢一成不变,总是在寻找突破和改变的机会。", 'duality': "您既有破旧立新的勇气,也有深思熟虑的一面。您的变革不是盲目的,而是有方向的。", 'empathy': "有时候,您的变化可能会让身边的人感到不安。学会在变革中给他人安全感,会让您走得更远。", 'closing': "您最大的价值,是那份敢于打破常规的勇气。" } } # 宫位温暖描述 self.palace_warm_descriptions = { '命宫': { 'positive': "这颗星落在命宫,为您的一生定下了{quality}的基调。", 'negative': "虽然这个配置带来一些挑战,但正是这些经历,造就了您的独特和坚强。", 'advice': "把握好这份特质,您的人生将会充满可能。" }, '财帛宫': { 'positive': "这颗星守护您的财运,预示着{quality}。", 'negative': "在财务方面,您可能需要比别人多一些谨慎。但这恰恰培养了您稳健的理财能力。", 'advice': "记住,真正的财富不仅是金钱,还有您创造价值的能力。" }, '夫妻宫': { 'positive': "这颗星照耀您的感情宫位,带来{quality}。", 'negative': "感情路上或许会有些曲折,但每一次经历都在帮您认清什么是真正的爱。", 'advice': "相信爱情,它会在对的时间、以对的方式来到您身边。" }, '官禄宫': { 'positive': "事业宫中的这颗星,为您的职业发展带来{quality}。", 'negative': "事业上的挑战,正是磨练您能力的机会。每一次困难,都让您变得更强。", 'advice': "坚持下去,您的价值终会被看见。" }, '福德宫': { 'positive': "福德宫的这个配置,赋予您{quality}的内在品质。", 'negative': "内心的波动有时会困扰您,但这也让您比别人更能体会人生的深度。", 'advice': "内心的平静是可以修炼的,您正在这条路上。" } } # 四化温暖描述 self.sihua_warm_descriptions = { '化禄': { 'meaning': "这份化禄,是命运给您的礼物。", 'insight': "它代表着{area}方面的顺遂和收获。", 'advice': "好好珍惜这份恩赐,它会在关键时刻护佑您。" }, '化权': { 'meaning': "化权赋予您在{area}方面的掌控力。", 'insight': "您有能力主导自己的命运,而不是被动等待。", 'advice': "善用这份力量,但也记得保持谦逊。" }, '化科': { 'meaning': "化科带来{area}方面的名声和认可。", 'insight': "您的才华和努力,会被越来越多的人看见。", 'advice': "继续保持学习和精进的心态,好名声会自然而来。" }, '化忌': { 'meaning': "{area}方面可能需要您多一些关注和谨慎。", 'insight': "但请记住,这不是诅咒,而是提醒——提前知道需要注意的领域,本身就是一种保护。", 'advice': "谨慎不等于恐惧。用智慧去化解,用行动去转变,您完全有能力把挑战变成机遇。" } } # 敏感内容替代词 self.sensitive_replacements = { '主死': '需要特别关注健康和安全', '横死': '需要特别注意人身安全', '夭折': '早年健康需要特别呵护', '绝后': '子女运势需要积极调整', '克夫': '婚姻需要用心经营', '克妻': '夫妻关系需要多些包容', '丧偶': '需要关注配偶的健康', '牢狱': '需要特别注意法律风险', '破财': '财务方面需要谨慎规划', '凶': '需要特别注意', '死限': '健康和安全需要重点关注', '孤独': '独立自主,个人空间需要', '刑克': '关系中需要多些理解和沟通' } def apply_barnum_effect( self, original_text: str, star_name: str = None, palace_name: str = None, tone: BarnumTone = BarnumTone.WARM ) -> Dict[str, Any]: """ 将机械断语转化为巴纳姆风格的温暖解读 Args: original_text: 原始断语 star_name: 星曜名称 palace_name: 宫位名称 tone: 语调类型 Returns: dict: 巴纳姆增强后的解读 """ result = { 'original': original_text, 'enhanced': '', 'tone': tone.value, 'components': { 'opening': '', 'insight': '', 'duality': '', 'empathy': '', 'closing': '' } } # 处理敏感内容 processed_text = self._process_sensitive_content(original_text) # 如果有星曜名称,使用星曜专属描述 if star_name and star_name in self.star_warm_descriptions: star_desc = self.star_warm_descriptions[star_name] result['components']['opening'] = star_desc['opening'] result['components']['insight'] = star_desc['insight'] result['components']['duality'] = star_desc['duality'] result['components']['empathy'] = star_desc['empathy'] result['components']['closing'] = star_desc['closing'] # 组合增强文本 result['enhanced'] = f""" {star_desc['opening']} {star_desc['insight']} {star_desc['duality']} {star_desc['empathy']} {star_desc['closing']} """.strip() else: # 通用巴纳姆增强 result['enhanced'] = self._apply_generic_barnum(processed_text, tone) return result def _process_sensitive_content(self, text: str) -> str: """处理敏感内容,用温和的表达替代(私有方法)""" processed = text for sensitive, replacement in self.sensitive_replacements.items(): processed = processed.replace(sensitive, replacement) return processed def replace_sensitive_content(self, text: str) -> str: """公共API:处理敏感内容,用温和的表达替代""" return self._process_sensitive_content(text) def _apply_generic_barnum(self, text: str, tone: BarnumTone) -> str: """应用通用巴纳姆效果""" # 添加验证性钩子 hook = self.validation_hooks['personality'][0] # "您可能已经注意到," # 根据语调调整 if tone == BarnumTone.WARM: enhanced = f"{hook}{text}\n\n但请记住,了解自己的特质,是为了更好地发挥优势、化解挑战。您完全有能力掌控自己的命运。" elif tone == BarnumTone.INSIGHTFUL: enhanced = f"深入分析您的命盘,{text}\n\n这种配置揭示了您独特的人生路径。理解这一点,您会对过去的经历有新的认识,对未来的选择更有把握。" elif tone == BarnumTone.SUPPORTIVE: enhanced = f"{text}\n\n无论命盘如何显示,您的未来永远掌握在自己手中。这只是参考,不是定数。带着这份了解,积极行动,您一定可以创造自己想要的人生。" elif tone == BarnumTone.CAUTIOUS: enhanced = f"{hook}{text}\n\n这需要您多一些关注,但请不要担忧——提前知道需要注意的领域,本身就是一种保护。用智慧去应对,您完全可以化险为夷。" else: enhanced = text return enhanced def generate_personality_reading( self, main_stars: List[str], palace_positions: Dict[str, str] ) -> str: """ 生成性格解读(巴纳姆风格) Args: main_stars: 命宫主星列表 palace_positions: 宫位星曜位置 Returns: str: 巴纳姆风格的性格解读 """ readings = [] for star in main_stars: if star in self.star_warm_descriptions: desc = self.star_warm_descriptions[star] readings.append(desc['opening']) readings.append(desc['insight']) readings.append(desc['duality']) if not readings: # 通用解读 readings.append("您的命盘展现出独特的性格特质。") readings.append("您既有理性分析的能力,也有感性直觉的一面。这种平衡是您的优势。") readings.append("在不同场合,您能够灵活调整自己的表现——这是一种难得的能力。") # 添加验证性钩子 readings.insert(1, "您可能已经注意到,这些特质在您的生活中不断得到印证。") # 添加积极结尾 readings.append("\n💕 思思提示:了解自己是为了更好地发挥优势。您的命运,永远掌握在自己手中。") return "\n\n".join(readings) def enhance_fortune_text(self, fortune_level: str, score: int) -> Dict[str, str]: """ 增强运势文本(巴纳姆风格) Args: fortune_level: 运势级别 score: 运势分数 Returns: dict: 增强后的运势文本 """ if score >= 30: return { 'level': '上上吉', 'emoji': '✨', 'summary': "您的命盘格局优秀,一生多有贵人相助。这并不意味着一切都会轻松,而是说当您努力时,回报会比别人更可观。", 'insight': "您可能已经感受到,自己总是能在关键时刻遇到帮助——这不是偶然,而是您命盘中的贵气在起作用。", 'advice': "把握住这份优势,积极进取,您的成就将会超出预期。", 'tone': 'very_positive' } elif score >= 15: return { 'level': '上吉', 'emoji': '🌟', 'summary': "您的命盘配置良好,整体运势稳健向上。只要把握机会,努力奋斗,定能成就一番事业。", 'insight': "您的人生轨迹会有起伏,但总体是上升的。那些暂时的困难,回头看都是必要的铺垫。", 'advice': "保持积极心态,您正走在正确的道路上。", 'tone': 'positive' } elif score >= 0: return { 'level': '中吉', 'emoji': '🌤️', 'summary': "您的命盘平稳中带有机遇。人生不会大起大落,但需要您主动把握机会,稳健发展。", 'insight': "您可能觉得自己不够幸运,但其实您的优势在于稳定——在变化的时代,这是一种宝贵的品质。", 'advice': "不必羡慕别人的起伏跌宕,您的平稳正是许多人求而不得的。在稳定中寻找突破,是您的最佳策略。", 'tone': 'balanced' } elif score >= -15: return { 'level': '平', 'emoji': '⚖️', 'summary': "您的命盘有些挑战需要面对,但同样有转机可以把握。关键在于您的选择和行动。", 'insight': "您经历的困难可能比别人多一些,但这些经历正在锻造一个更强大的您。", 'advice': "不要被眼前的困难吓倒。每一个挑战都是化妆的祝福,只要您坚持下去。", 'tone': 'cautious' } else: return { 'level': '需化解', 'emoji': '🔔', 'summary': "您的命盘存在一些需要特别关注的配置。但请记住,命运不是定数——了解这些,是为了更好地化解。", 'insight': "知道自己的挑战在哪里,本身就是一种保护。很多人盲目前行,您却能有的放矢。", 'advice': "积极行动比消极等待更有意义。每一个化解的努力,都在改写您的命运轨迹。命运掌握在自己手中。", 'tone': 'supportive' } def get_star_warm_description(self, star_name: str) -> Optional[Dict[str, str]]: """ 获取星曜的温暖描述(公共API) Args: star_name: 星曜名称(如:紫微、天机) Returns: dict: 星曜温暖描述,包含opening/insight/duality/empathy/closing None: 如果星曜不存在 """ return self.star_warm_descriptions.get(star_name) def add_disclaimer(self) -> str: """添加免责声明""" return """ --- ⚠️ 温馨提示: 紫微斗数是中华传统文化的瑰宝,提供了一种认识自我的视角。但命理分析仅供参考,不能替代: • 医学诊断和治疗 • 法律咨询和建议 • 专业心理辅导 • 重大人生决策 您的命运,永远掌握在自己手中。积极行动比被动等待更重要。 🦊 Generated with knowledge & love by Sisi """.strip() # 单例模式 _barnum_instance = None def get_barnum_reader() -> BarnumColdReader: """获取巴纳姆冷读器单例""" global _barnum_instance if _barnum_instance is None: _barnum_instance = BarnumColdReader() return _barnum_instance # 导出类 __all__ = ['BarnumColdReader', 'BarnumTone', 'get_barnum_reader']