用途:把任意 CRM 导出的 CSV 变成人工可核查的合并计划,以及可直接导入的清洗文件。因所有 CRM 都导出 CSV,故不依赖具体厂商。
主要能力:scripts/dedupe.py 是 dry-run 引擎,负责规范化、分块、打分、聚类、选择幸存记录和字段合并,依赖 pandas 与 rapidfuzz,可选 phonenumbers。scripts/evaluate.py 用带标注的真值文件计算成对精确率与召回率。assets/fixture/ 内置 41 条合成联系人和 14 家公司及植入的重复项与 truth.csv。references/ 提供字段规范、各厂商合并行为说明和安全上线流程。
使用方式:先获取含记录 ID 的全属性 CSV;合并前必须确认已有带日期且含关联关系的完整导出备份。运行示例: pip install pandas rapidfuzz phonenumbers python scripts/dedupe.py --contacts contacts.csv --companies companies.csv --out plan/ --as-of 2026-09-22 [--default-region GB] [--gmail-canonical] 脚本自动识别常见厂商表头,可用 --col email="E-mail 1" 修正。随后检查 summary.json 中的 column_map、phone_engine 与 warnings,按层级呈现结果,优先展示需要人工判断的复核队列。人工在 review_queue.csv 的 decision 列记录合并或保留,再依据 merge_plan.csv 的 kept_survivor_conflict 行核对将消失的值。用 CRM 原生工具先合并 5 到 10 个样本簇并验证,再分批执行,最后按记录 ID 导入清洗文件。
合并安全规则:绝不基于角色或共享标识自动合并,如 info@、sales@、家庭邮箱、办公室总机;自动合并需强标识(非共享的精确邮箱或电话)加兼容姓名;簇内每对都要复检,不兼容对或超过 --max-cluster(默认 5)的簇降级到复核;不用空值覆盖非空值;幸存者按 most_recent_activity、most_complete、oldest_created 顺序选择;Gmail 点号与加号折叠仅为可选(--gmail-canonical);始终保持 dry run,不调用 CRM API、不写入输入文件;过期、测试、无效记录只标记不删除。
输出文件包括 merge_plan.csv、review_queue.csv、cleaned_contacts.csv、record_flags.csv、companies_*.csv、cleaned_companies.csv、associations.csv 和 summary.json。调参项有 --auto-name-sim、--review-name-sim、--conflict-name-sim、--stale-days、--as-of、--max-block,可按区域或门户扩展脚本中的 NICKNAMES、ROLE_LOCALS、LIFECYCLE_MAP 或 LEGAL_SUFFIXES。
限制:它本身不执行合并,合并只能在 CRM 原生工具中进行;脚本不调用任何 CRM API,也不修改输入文件;导入清洗文件需要记录 ID。价格、平台支持细节等资料暂未提供。