Files
digital-psychology/apps/api/internal/relation/copy.go
T
jackyu66gitandCursor 19d3cd5945 refactor(ECR-001): 接入 ESS 并完成结构对齐 Phase A–E
绑定 ESS 双轨治理,拆分超大 H5 页与 Go 引擎,抽出 membership 服务,
并将 star/fortune 重命名为 outlook(JSON 双写兼容);同时修复 /psy API 代理与首页 + 菜单层级。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-05 17:51:40 +08:00

137 lines
10 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package relation
import "fmt"
func complementarityKey(a, b string) string {
if a == b {
return "same"
}
// simple buckets by trait family
drive := map[string]string{
"稳进探索者": "steady", "细腻分析者": "steady", "守护担当者": "steady", "洞察策略者": "steady",
"敏锐连接者": "warm", "温和协调者": "warm", "热忱鼓舞者": "warm",
"果断行动派": "drive", "自由创造者": "drive",
}
ak, bk := drive[a], drive[b]
if ak == "" || bk == "" {
return "mix"
}
if ak == bk {
return "same_family"
}
if (ak == "steady" && bk == "warm") || (ak == "warm" && bk == "steady") {
return "steady_warm"
}
if (ak == "drive" && bk == "steady") || (ak == "steady" && bk == "drive") {
return "drive_steady"
}
if (ak == "drive" && bk == "warm") || (ak == "warm" && bk == "drive") {
return "drive_warm"
}
return "mix"
}
type compCopy struct {
OneLiner, Overview, Chemistry, DeepOverview, CommDeep, ConflictDeep, IntimacyDeep, GrowthDeep string
ChemistryPoints, Watchouts, CommTips, ConflictTips, IntimacyTips, GrowthTips, Weekly, Scripts []string
}
func complementarityCopy(key, aName, bName, aLabel, bLabel string) compCopy {
base := compCopy{
OneLiner: fmt.Sprintf("%s偏「%s」,%s偏「%s」——差异可以写成相处说明书。", aName, aLabel, bName, bLabel),
Overview: fmt.Sprintf("双方在表达、节奏与需求上并不相同。把差异看清楚,比急着证明「谁更对」更有用。下面从沟通、冲突、亲密与共同成长几个维度展开。"),
Chemistry: "互补往往出现在:一方给结构,另一方给温度;或一方推进,另一方稳住质量。",
Weekly: []string{
"本周进行一次 20 分钟「非解决问题」闲聊或散步。",
"各自写三件「我需要你这样支持我」的具体行为,互换阅读。",
"约定一个冲突停火词,任一方说出即暂停 15 分钟。",
},
Scripts: []string{
fmt.Sprintf("%s可以说:我需要先把事实说清楚,再谈感受。", aName),
fmt.Sprintf("%s可以说:我希望你先听到我的感受,再给方案。", bName),
"我们可以先复述对方一句,再表达自己的需要。",
},
}
switch key {
case "same":
base.OneLiner = fmt.Sprintf("你们风格接近(都偏「%s」),默契来得快,也要防止一起陷入同样的盲区。", aLabel)
base.Chemistry = "同类相吸:理解成本低,推进或回避也可能同步发生。"
base.DeepOverview = "风格相近意味着你们很容易「懂对方在想什么」,但也可能同时逃避冲突,或同时过度冲刺。建议定期引入外部视角(朋友建议、清单复盘),打破镜像盲区。"
base.CommDeep = "沟通效率高,但要刻意练习提出不同意见。安排「唱反调」轮值:每周一人专门提出风险点。"
base.ConflictDeep = "冲突可能被快速和好掩盖,问题未真正处理。用「问题清单」追踪未完成议题。"
base.IntimacyDeep = "熟悉感强,新鲜感需主动创造:共同学习或小旅行比重复日常更能充电。"
base.GrowthDeep = "一起设定一个共同小目标,并互相做问责伙伴。"
base.ChemistryPoints = []string{"理解成本低", "节奏容易对齐", "共同语言多"}
base.Watchouts = []string{"共享同一盲区", "缺少外部校正", "意见过于一致缺少张力"}
base.CommTips = []string{"鼓励提出异议", "重要决定写利弊表", "避免默认对方已懂"}
base.ConflictTips = []string{"追踪未完成议题", "避免假性和好", "冷静后再做决定"}
base.IntimacyTips = []string{"主动制造新鲜体验", "表达感谢要具体", "保留个人空间"}
base.GrowthTips = []string{"共同目标 + 问责", "每月复盘一次关系", "引入可信第三方建议"}
case "steady_warm":
base.Chemistry = "稳与暖互补:一方提供结构与可靠,另一方提供连接与温度。"
base.DeepOverview = fmt.Sprintf("%s与%s之间,最常见的张力是「要先讲清楚」还是「要先被看见」。若能轮流满足这两种需求,关系会既安全又有温度。", aName, bName)
base.CommDeep = "沟通协议:情绪话题先共鸣 2 分钟,再进入事实与方案;事务话题先结论,再补感受。"
base.ConflictDeep = "稳的一方别用沉默当结束;暖的一方别用追问升级压力。停火后用「我需要…」重开。"
base.IntimacyDeep = "暖的一方需要回应频率;稳的一方需要可预期的独处。把两者写进约定。"
base.GrowthDeep = "把互补写成分工:谁更擅长安抚,谁更擅长推进落地。"
base.ChemistryPoints = []string{"结构 × 温度", "可靠 × 连接", "可形成完整支持系统"}
base.Watchouts = []string{"一方觉得被冷落", "一方觉得被情绪淹没", "节奏错位积累委屈"}
base.CommTips = []string{"情绪先共鸣再方案", "事务先结论再感受", "用文字确认关键约定"}
base.ConflictTips = []string{"禁止用沉默结束话题", "追问前先问是否方便", "停火词机制"}
base.IntimacyTips = []string{"约定回应窗口", "尊重独处不被解读为冷淡", "每周一次深度连接"}
base.GrowthTips = []string{"按优势分工", "互相学习对方语言", "月度关系复盘"}
case "drive_steady":
base.Chemistry = "推与稳互补:一方破局加速,另一方把关质量与可持续。"
base.DeepOverview = "行动派容易嫌分析派慢;稳健派容易嫌行动派莽。把「速度」用在试验,「稳健」用在关键承诺,冲突会下降。"
base.CommDeep = "行动方给时间盒与最小方案;稳健方在时限内给风险清单,而不是无限延期。"
base.ConflictDeep = "冲突焦点常是节奏。先对齐「这是可逆试验还是重大决定」,再选速度。"
base.IntimacyDeep = "行动方用陪伴质量弥补碎片时间;稳健方减少用担忧浇灭热情,改用「我支持你试,我们设检查点」。"
base.GrowthDeep = "共同项目里明确角色:谁启动、谁验收、何时复盘。"
base.ChemistryPoints = []string{"破局 × 把关", "速度 × 质量", "试验与承诺可分工"}
base.Watchouts = []string{"节奏互斥", "一方压抑热情", "一方焦虑失控"}
base.CommTips = []string{"先定义可逆/不可逆", "时间盒决策", "风险清单限时"}
base.ConflictTips = []string{"争论节奏前先分类问题", "避免人格化指责", "用检查点代替否决"}
base.IntimacyTips = []string{"质量陪伴", "支持试验+检查点", "庆祝小进展"}
base.GrowthTips = []string{"项目角色清晰", "复盘节奏", "互相翻译动机"}
case "drive_warm":
base.Chemistry = "驱动与连接互补:一方带节奏,另一方维系人心与氛围。"
base.DeepOverview = "热情与效率碰到一起很有火花,也容易在「推进」与「照顾感受」之间拉扯。约定场景切换:冲刺模式 / 连接模式。"
base.CommDeep = "冲刺时短讯同步进度;连接时关掉任务话题。不要用效率语言处理情绪时刻。"
base.ConflictDeep = "驱动方避免「你想太多」;连接方避免「你只在乎结果」。改说具体需求。"
base.IntimacyDeep = "用共同体验(运动、活动)同时满足推进感与连接感。"
base.GrowthDeep = "轮流做「本周关系主理人」,负责安排一次连接或一次共同目标。"
base.ChemistryPoints = []string{"推进力 × 氛围", "行动号召力强", "共同体验易充电"}
base.Watchouts = []string{"情绪被效率压过", "承诺过多难兑现", "连接变任务化"}
base.CommTips = []string{"模式切换:冲刺/连接", "情绪时刻禁用效率话术", "进度短讯化"}
base.ConflictTips = []string{"禁止否定感受", "需求具体化", "修复后再推进"}
base.IntimacyTips = []string{"共同体验", "兑现小承诺", "非任务陪伴"}
base.GrowthTips = []string{"轮值关系主理人", "控制并行承诺", "庆祝与复盘并重"}
case "same_family":
base.DeepOverview = "你们属于相近气质族,容易互相理解,也要主动制造一点建设性差异,避免舒适区停滞。"
base.CommDeep = "沟通顺畅时更要确认细节,防止「好像说好了」其实理解不同。"
base.ConflictDeep = "冲突可能被淡化。强制做一次「最担心的三件事」互换。"
base.IntimacyDeep = "在舒适之外增加挑战性共同任务,刷新关系动能。"
base.GrowthDeep = "互相指出对方一个盲区,并约定本月各改一项小行为。"
base.ChemistryPoints = []string{"气质相近", "理解门槛低", "协作起步快"}
base.Watchouts = []string{"舒适区停滞", "细节默认错误", "回避尖锐议题"}
base.CommTips = []string{"确认细节", "书面关键约定", "鼓励异议"}
base.ConflictTips = []string{"互换担忧清单", "不假性和好", "设讨论截止"}
base.IntimacyTips = []string{"共同挑战任务", "新鲜体验", "具体感谢"}
base.GrowthTips = []string{"互指一个盲区", "月改一小行为", "外部输入"}
default:
base.DeepOverview = fmt.Sprintf("%s与%s风格路径不同,说明书价值更高。先承认差异合法,再谈协作规则。", aName, bName)
base.CommDeep = "建立双通道:事实通道与感受通道,讨论前先声明走哪一条。"
base.ConflictDeep = "冲突时回到共同目标句:我们都希望关系更好/事情做成。"
base.IntimacyDeep = "用定期同步取代猜测;空间与连接都要有配额。"
base.GrowthDeep = "把差异写成「我擅长 / 我需要」对照表,贴在看得见的地方。"
base.ChemistryPoints = []string{"视角多样", "可互补决策", "扩展彼此舒适区"}
base.Watchouts = []string{"误解成本高", "价值观冲突需早谈", "节奏长期错位"}
base.CommTips = []string{"声明沟通通道", "复述再回应", "关键约定书面化"}
base.ConflictTips = []string{"回到共同目标", "停火机制", "一次只谈一个议题"}
base.IntimacyTips = []string{"定期同步", "空间与连接配额", "具体肯定"}
base.GrowthTips = []string{"擅长/需要对照表", "月度复盘", "小步共同目标"}
}
return base
}