Spaces:
Running
Running
File size: 26,635 Bytes
1b83bb4 ac139d2 1b83bb4 ac139d2 1b83bb4 c4d5552 1b83bb4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 | """
巴纳姆冷读引擎 - 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']
|