差评回复助手(review-reply-pro)
定位
竞品给「一段话术」,本 Skill 给「一套处置」:规则引擎先判定这是什么差评(命中规则可见、
该人工的明说),行业语料决定怎么回,合规引擎保证回的不违规,挽回决策告诉你要不要私下跟。
> 免责:差评回复内容为处置建议,不代表平台立场;食品安全、人身伤害、监管投诉等重大投诉请人工处理。
触发词
差评回复、回复差评、顾客投诉、中差评、美团差评、大众点评差评、恶意差评、评价申诉、
店铺评分、差评怎么办、差评私了
能力一:差评分类 classify(review_text, industry, stars=None, order_verifiable=None)
三维分类,每条结论附命中规则 ID(可解释、可回归):
- 性质(5 类):genuine 真实问题 / expectation_gap 期望落差 / emotional 情绪发泄 /
suspected_malicious 疑似恶意 / silent 沉默差评(空串或纯表情) - 根因:6 行业根因词表(餐饮的上菜慢/口味/卫生/分量/服务/价格/配送;
汽修的返修/价格争议/等待/配件/过度维修;美容/健身/教培/家居同构) - 严重度:A 恶性需立即处理(食安/人身安全/监管词,或一星真实问题)/ B 一般 / C 轻微
判定规则(按优先级短路):R0 空文本→沉默;R1 高危词表→A 级+强制人工;
R2 敲诈句式「不赔…就差评」→疑似恶意;R3 无消费细节+导流/劝退/全盘否定→疑似恶意;
R4 「图片/宣传…不符/失望」→期望落差;R5 含时间数字/根因词/角色称呼→真实问题;
R6 短文本+情绪词/高感叹号密度→情绪发泄;兜底按真实问题处理并提示人工。
边界声明:对「疑似恶意/敲诈/竞对」引擎只输出疑似标记 + 取证清单,
最终判定与申诉提交必须商家人工完成——引擎不替商家指控顾客。
能力二:回复生成 generate_reply(review_text, industry, store_facts, tone="诚恳", stars=None)
输出 short(≤80 字公开版)与 full(≤200 字详细版)两版回复 + 策略说明(为什么这么回)。
- store_facts 强制注入(反编造硬规则):
{'neg': 负面情况的客观解释, 'pos': 可证实的正面事实},
真实问题/期望落差类回复必须写入门店事实;用户拒绝提供时降级为「无解释版」并提示风险 - facts 注入双闸:注入前先过红线行为词表(加微信/私下转账/返现/删差评类)与广告法词表,
命中即剔除并标记rejected_facts;facts 与差评原文公然矛盾时不注入并标记facts_conflict - A 级不走营销式模板:公开回复只写「已启动内部核查」,禁止补偿了事话术
- 合规自检:每条回复输出前强制过 library.check_compliance(59 词库+变体正则+抗插入归一化),
命中按 BANNED_REPLACE 自动替换并记录;叠加平台红线正则(诱导删改评/导流线下) - 确定性:同一组输入输出逐字相同(seed 为参数 md5)
能力三:申诉与挽回 suggest_action(classify_result)
- 疑似恶意 →
appeal:任何严重度都附申诉取证清单(订单截图/监控记录/历史评价/聊天记录/
平台时限:抖音约 7 天、美团与大众点评约 30 天,以平台最新规则为准);同时命中高危词的 A 级加急提示优先固定证据 - 真实问题且星级 ≤2 →
winback/recommend:私信话术(致歉+核实订单号+两个补偿选项) - 期望落差 →
winback/optional:赠券邀请再体验 - 情绪发泄/沉默 →
standard:公开回复即可,不建议补偿(过度补偿培养职业差评师) - A 级 →
manual:不主动私信补偿(避免「花钱消灾」留证),走线下核实+平台报备 - 全部分支红线写死在输出里:补偿不得与删除或修改评价挂钩
硬规则
- 疑似恶意只标「疑似」,最终判定须人工;A 级强制人工复核
- 回复不得出现广告法违禁词、不得出现「删除差评请联系」类诱导表述
- 不编造门店事实:store_facts 缺失即降级,绝不虚构解释
- 同一组输入输出逐字相同,RULE_VERSION 可定位规则版本
引擎用法
python3 scripts/reviewreply/test_reviewreply.py # 回归断言
import sys; sys.path.insert(0, "scripts")
from reviewreply import classify, generate_reply, suggest_action
cls = classify("等了40分钟菜还没上,服务员还爱答不理", "餐饮", stars=1)
rep = generate_reply("等了40分钟菜还没上", "餐饮",
{"neg": "当天晚市高峰外卖爆单", "pos": "汤底每天现熬"})
act = suggest_action(cls)