相亲
这个 skill 解决什么
相亲场景里最消耗人的不是被拒绝,而是判断不了。对方回复慢、回复短、不主动,到底是忙、是慢热、是性格内向,还是根本没兴趣?只靠感觉判断,人会反复给自己找理由。
这个 skill 把"感觉"变成可以复核的观测:从聊天记录里算出对方的行为参数,再结合相亲特有的条件信息,给出当前互动状态的判定和下一步该做什么。
它不做命运判决。输出的是"这段对话现在的结构是什么样",不是"你们合不合适"或"他一定不爱你"。
为什么只做相亲
相亲是有第三方、有条件、有时间压力的场景,所以匹配度才有东西可算——自由恋爱场景里你拿不到对方的住房、家庭、婚育节奏,相亲场景里这些是默认信息。脱离这个场景,匹配度评估就只能靠猜。
工作流
严格按顺序执行,不要跳步。
第 1 步:收集输入
必需:
- 聊天记录。支持三种形态:微信导出的"昵称+时间戳独占一行"、[时间] 昵称: 内容 行内格式、以及无时间戳的纯文本。用户直接粘贴文本时,先用 Write 工具原样存成 UTF-8 的 .txt(不要改写、不要删行)。图片截图无法被脚本解析,请用户转成文字。
- 本人昵称 self_name。必须与记录里出现的昵称逐字一致。
强烈建议(不提供则匹配度评估只能留空):
- 双方条件信息:年龄、常驻城市、学历、职业、住房、婚育意向、介绍来源。
⚠️ 方向判定是这个 skill 唯一会全盘出错的地方。 self_name 写错、或者本人与对方昵称搞反,所有指标会整体反转——最冷淡的样本会得到"双向热络"的分数,且报告表面看不出异常。设定 self_name 前务必确认记录里哪个昵称是用户本人;不确定时直接问用户,不要猜。
第 2 步:写配置文件
在输出目录写一个 UTF-8 的 JSON 配置(例如 task.json)。字段定义见 scripts/run.py 顶部注释。最小可用:
{
"chat_file": "C:/path/chat.txt",
"self_name": "小雅",
"out_dir": "C:/path/out",
"name": "sample",
"context": {
"self": {"age": 29, "city": "深圳南山", "education": "本科", "job": "产品经理",
"housing": "有房(有贷)", "intent": "希望一年内确定关系并结婚"},
"other": {"age": 32, "city": "深圳南山", "education": "本科", "job": "互联网研发",
"housing": "暂未购房"}
}
}
为什么走配置文件而不是命令行参数:微信昵称基本都是中文,Windows 下用 --self-name 小雅 传参经常因编码问题变成乱码,导致方向判反。配置文件按 UTF-8 读入,没有这个风险。始终优先用配置文件。
第 3 步:计算指标
python scripts/run.py --config task.json --stage metrics
产出到 out_dir:
- <name>_metrics.json —— 全部指标的结构化数据
- <name>_summary.txt —— 可直接阅读的文本摘要(优先读这个,比 JSON 省 token)
- 终端输出与摘要内容相同
脚本纯标准库,无第三方依赖。
第 4 步:读指标,写定性诊断
读 <name>_summary.txt,按需再查 _metrics.json 的细节。然后撰写 <name>_diagnosis.json。
撰写前先读方法论:
- references/signal-dictionary.md —— 各种话术表达对应的行为含义
- references/obstacle-taxonomy.md —— 相亲卡点的分类与判定标准
- references/match-dimensions.md —— 匹配度维度、硬条件对齐规则、意向对等性算法
diagnosis.json 的结构:
{
"headline": "一句话结论",
"state_reading": "当前互动状态的解读,2-4 句,必须引用具体指标值",
"obstacles": [
{"title": "卡点名", "evidence": "指标值或聊天原文", "severity": "高|中|低", "note": "解读"}
],
"match": {
"verdict": "值得推进 | 建议再观察 | 建议收缩",
"hard_facts": [
{"dimension": "常驻城市", "self": "...", "other": "...",
"align": "对齐|有差异|冲突|未知", "note": ""}
],
"intent_parity": "意向对等性解读",
"communication_fit": "沟通风格兼容性解读",
"unknowns": ["必须确认但目前无法从聊天判断的事项"]
},
"next_actions": [
{"do": "具体动作", "why": "为什么这么做", "script": "可直接用的话,没有就填 null"}
],
"dont_do": ["这阶段不要做的事"],
"confidence_note": "数据质量与结论边界说明"
}
第 5 步:生成报告
python scripts/run.py --config task.json --stage report
生成 <name>_report.html:自包含、内联 CSS 与 SVG、离线可开。定量部分自动渲染,定性部分从 diagnosis.json 取。diagnosis.json 缺失时报告照常生成,只是卡点、匹配度、下一步三个区块留空并给出提示。
最后用 present_files 把 HTML 报告交付给用户。
可信度纪律(不可省略)
这些规则是本 skill 与"随便问 AI 聊两句"的区别所在。
-
每个结论必须挂证据。 说"对方兴趣不足"没有意义;说"18 条消息里主动提问 0 次、终结式回复占 78%"才有意义。
evidence字段不得写空话。 -
只描述行为,不做判决。 输出"当前这段对话的结构是单边的",不输出"他不喜欢你"。终局判断权属于用户。
-
样本不足就明说。 少于 12 条消息不出总分;30 条以下置信度标"低";60 条以下标"中"。低于门槛时把结论降级为"仅描述现象"。不要为了让报告好看而给一个虚假的精确分数。
-
未提供的信息一律进 unknowns,不得推测。 用户没给住房信息,就不要写"对方暂无房可能影响匹配"。缺失就是缺失。
-
硬条件差异不得单独推出结论。 住房、学历、收入有差异只能列为"有差异 + 需确认",不能直接判"不合适"。这些项的实际权重只有当事人知道。
-
不预测结局,不做心理诊断。 不使用"回避型依恋""PUA""拿捏"这类标签给对方法人格定性。单凭聊天记录做不到这件事。
-
建议必须克制。
dont_do里最重要的一条通常是"不要再追加投入"和"不要用降价换见面"。绝不提供操控性建议(制造焦虑、假装冷淡、贬低对方、伪造稀缺性)——这类做法在相亲场景里会把关系直接推向终止,且长期必然反噬。 -
主动说明指标的边界。 无时间戳时,回复延迟、会话节奏、主动发起率、热度趋势全部不可用,脚本会自动标注;此时不要把总分当回事。
易错点
- 方向判反(见第 1 步的警告)——最严重。
- 把"延迟回复"当成"主动发起"。相亲场景里对方隔天才回很正常。脚本用 18 小时阈值区分"开启新对话",与 6 小时的会话切分阈值分开;改动这两个常量前先读
chat_engine.py顶部的"两个容易踩的坑"注释。 - 把"吧"当疑问语气。"看情况吧""再说吧""慢慢来吧"是敷衍,不是提问。脚本已排除,不要加回去。
- 把用户提供的条件信息当成事实直接写进 hard_facts。相亲信息常由介绍人转述,可能有偏差,转述来源要标注。
- 不要替用户下"止损"或"继续"的决心。给结构、给选项、给话术,让用户自己按。
脚本清单
| 脚本 | 职责 |
|---|---|
scripts/run.py |
统一入口,读配置文件,串起解析→指标→报告 |
scripts/chat_engine.py |
聊天解析 + 全部指标计算 + 四维评分(纯标准库) |
scripts/make_report.py |
读 metrics.json + diagnosis.json,渲染自包含 HTML |
指标口径、评分曲线、阈值常量集中在 chat_engine.py 顶部与 compute_metrics 内。修改前先读文件头部的"两个容易踩的坑"注释。