From 0c12948fa485f8070648bbbc7eaf0ad325de851c Mon Sep 17 00:00:00 2001 From: selfrelease Date: Wed, 15 Jul 2026 11:56:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E7=BA=A4=E7=9B=8A?= =?UTF-8?q?=E5=87=8F=E8=82=A5=E7=9B=8A=E7=94=9F=E8=8F=8C=E5=85=A8=E5=A5=97?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mock_sync.py: 新增6个减肥场景模板(成交/异议/咨询/对比/复购) + 分配给李娜和王强 - analyze.py: 扩展关键词(减肥/减脂/B420/纤益/代餐等) + 行业识别支持年轻女性 + LLM prompt增加减肥产品背景 - run_demo.sh: 新增4条减肥益生菌预置成交记录(小鹿/阿狸/小鹿复购) --- demo/agent/mock_sync.py | 174 ++++++++++++++++++++++++++++++++++++++-- demo/ai/analyze.py | 16 ++-- demo/run_demo.sh | 25 ++++++ 3 files changed, 203 insertions(+), 12 deletions(-) diff --git a/demo/agent/mock_sync.py b/demo/agent/mock_sync.py index db50726..16b089c 100644 --- a/demo/agent/mock_sync.py +++ b/demo/agent/mock_sync.py @@ -299,6 +299,150 @@ SCENARIO_VARIANTS = [ }, ] +# --------------------------------------------------------------------------- +# 减肥益生菌场景模板 — 纤益益生菌(女性减肥) +# --------------------------------------------------------------------------- + +DIET_SCENARIOS = [ + { + "name": "减肥咨询后成交", + "stage": "成交", + "contact": { + "nickname": "小鹿同学", + "remark": "小鹿-减肥-26岁", + "industry": "年轻女性", + "intent_level": "high", + }, + "messages": [ + ("customer", "text", "你好,看到你朋友圈发的减肥益生菌,真的有用吗?"), + ("sales", "text", "小鹿你好!是的,我们这款纤益益生菌含专利B420菌株,临床验证可以减少体脂率。请问你目前身高体重多少?"), + ("customer", "text", "163cm,125斤,想减到110"), + ("sales", "text", "了解了,BMI偏高一丢丢。B420菌株是通过调节肠道菌群来促进脂肪代谢的,不需要节食,不腹泻,健康减脂"), + ("customer", "text", "不用节食?那我感兴趣,之前试过节食反弹了"), + ("sales", "text", "对,节食反弹是因为代谢没调好。益生菌是从根源改善肠道代谢,配合正常饮食就能看到效果"), + ("sales", "image", "[图片:B420菌株临床数据]"), + ("customer", "text", "看起来有科学依据,多少钱?"), + ("sales", "text", "单盒328元30天用量,建议2盒一个周期656元,坚持2个月效果明显"), + ("customer", "text", "2盒656是吧,有没有优惠?"), + ("sales", "text", "现在新客户首单送一盒膳食纤维体验装,配合吃效果更好"), + ("customer", "text", "好的,那来2盒"), + ("sales", "text", "好的小鹿!纤益益生菌2盒套餐656元,送膳食纤维体验装,您方便现在付款吗?"), + ("customer", "text", "付了,麻烦尽快发货"), + ("sales", "text", "收到!今天就发顺丰,另外附上饮食建议手册"), + ("customer", "emoji", "[表情:期待]"), + ], + }, + { + "name": "产后减肥咨询后犹豫", + "stage": "异议处理", + "contact": { + "nickname": "暖暖妈咪", + "remark": "暖暖妈-产后减肥-29岁", + "industry": "年轻女性", + "intent_level": "medium", + }, + "messages": [ + ("customer", "text", "你好,生完宝宝一直瘦不下来,益生菌能帮到吗?"), + ("sales", "text", "暖暖妈你好!产后体重管理确实是个痛点。我们的B420菌株专门针对脂肪代谢,很多产后妈妈反馈不错"), + ("customer", "text", "哺乳期可以吃吗?"), + ("sales", "text", "建议断奶后再吃哦,哺乳期不太适合"), + ("customer", "text", "那我家宝宝8个月还在喂奶"), + ("sales", "text", "可以等断奶后再开始,现在先了解一下"), + ("customer", "text", "多少钱?"), + ("sales", "text", "单盒328,2盒套餐656"), + ("customer", "text", "有点贵,等断奶再说吧"), + ("sales", "text", "没关系的,可以先关注我朋友圈,有活动会通知你"), + ("customer", "text", "好的,谢谢"), + ], + }, + { + "name": "朋友推荐来咨询减肥", + "stage": "需求发现", + "contact": { + "nickname": "Cici", + "remark": "Cici-朋友推荐-减肥", + "industry": "年轻女性", + "intent_level": "medium", + }, + "messages": [ + ("customer", "text", "你好,是小鹿推荐我加你的,她说你这边减肥益生菌不错"), + ("sales", "text", "Cici你好!谢谢小鹿推荐,请问你想减多少?"), + ("customer", "text", "想减10斤左右,主要是肚子和大腿"), + ("sales", "text", "B420菌株正好针对腹部脂肪,通过调节肠道菌群促进代谢。小鹿吃了2个月减了8斤"), + ("customer", "text", "真的假的?她那么快就有效果了?"), + ("sales", "text", "个体差异有的,但B420有临床数据支持,平均12周减少体脂率3-5%"), + ("sales", "image", "[图片:临床数据图表]"), + ("customer", "text", "成分安全吗?有没有拉肚子之类的副作用?"), + ("sales", "text", "完全安全,不腹泻不节食,是通过调节肠道菌群自然减脂"), + ("customer", "text", "好的,我先了解一下"), + ("sales", "text", "没问题,给你发个产品详情页看看"), + ("sales", "link", "[链接:纤益益生菌详情页]"), + ], + }, + { + "name": "对比其他减肥产品后选择", + "stage": "成交", + "contact": { + "nickname": "阿狸", + "remark": "阿狸-对比代餐-24岁", + "industry": "年轻女性", + "intent_level": "high", + }, + "messages": [ + ("customer", "text", "你好,我在对比你们益生菌和代餐奶昔,哪个效果好?"), + ("sales", "text", "阿狸你好!代餐是控制热量摄入,益生菌是调节肠道代谢,原理不同。代餐停了容易反弹,益生菌是从根源改善"), + ("customer", "text", "我之前吃过代餐,确实反弹了"), + ("sales", "text", "对,代餐靠饿,益生菌靠调。B420菌株有临床验证,不节食不腹泻,健康减脂"), + ("customer", "text", "那你们的价格呢?代餐一个月也要三四百"), + ("sales", "text", "单盒328元一个月,2盒套餐656元两个月。比代餐便宜,而且不用挨饿"), + ("customer", "text", "听着不错,但效果不好怎么办?"), + ("sales", "text", "我们有售后指导,配合饮食建议手册一起用。小鹿2个月减了8斤,Cici也在吃"), + ("sales", "link", "[链接:客户真实反馈]"), + ("customer", "text", "好的,来2盒试试"), + ("sales", "text", "好的阿狸!纤益益生菌2盒656元,今天就发货"), + ("customer", "text", "已付款"), + ("sales", "text", "收到!顺丰今天发,附饮食建议手册"), + ], + }, + { + "name": "价格异议后放弃", + "stage": "异议处理", + "contact": { + "nickname": "小丸子", + "remark": "小丸子-价格异议-减肥", + "industry": "年轻女性", + "intent_level": "low", + }, + "messages": [ + ("customer", "text", "减肥益生菌多少钱?"), + ("sales", "text", "小丸子你好!单盒328,2盒套餐656"), + ("customer", "text", "好贵,网上益生菌才几十块"), + ("sales", "text", "我们含专利B420菌株,有临床验证减脂效果,和普通益生菌不一样"), + ("customer", "text", "但也太贵了,算了吧"), + ("sales", "text", "理解,可以关注朋友圈,有活动时会通知"), + ("customer", "text", "好的"), + ], + }, + { + "name": "长期跟进后复购", + "stage": "成交", + "contact": { + "nickname": "小鹿同学", + "remark": "小鹿-复购-已减8斤", + "industry": "年轻女性", + "intent_level": "high", + }, + "messages": [ + ("customer", "text", "吃了2个月瘦了8斤,想继续买"), + ("sales", "text", "太棒了小鹿!B420效果确实不错,继续吃巩固一下"), + ("customer", "text", "再买2盒"), + ("sales", "text", "好的!老客户复购送一盒膳食纤维,2盒656元"), + ("customer", "text", "好的,付款了"), + ("sales", "text", "收到!今天就发货,继续加油"), + ], + }, +] + # --------------------------------------------------------------------------- # 非客户联系人模板 # --------------------------------------------------------------------------- @@ -462,7 +606,7 @@ GROUP_TEMPLATES = [ # scenario_index 指向 SCENARIO_TEMPLATES, variant_name 指向 SCENARIO_VARIANTS SALESPERSON_ASSIGNMENTS = { - 1: [ # 张伟 — 资深 + 1: [ # 张伟 — 资深(儿童益生菌为主) ("scenario_0", None, None), # 湿疹成交 ("scenario_2", None, None), # 朋友推荐 ("variant_食物过敏咨询后成交", None, None), @@ -480,12 +624,16 @@ SALESPERSON_ASSIGNMENTS = { ("group", "宝妈育儿交流群", ""), ("group", "过敏宝宝互助群", ""), ], - 2: [ # 李娜 — 新人 - ("scenario_1", None, None), # 鼻炎犹豫 + 2: [ # 李娜 — 新人(减肥益生菌为主) + ("scenario_1", None, None), # 鼻炎犹豫(儿童) ("variant_价格异议后放弃", None, None), - ("scenario_4", None, None), # 竞品对比 + ("scenario_4", None, None), # 竞品对比(儿童) ("variant_过早报价后被拒", None, None), ("scenario_2", "甜甜妈", "甜甜妈-推荐咨询"), + # 减肥益生菌场景 + ("diet_0", None, None), # 减肥咨询后成交(小鹿) + ("diet_1", None, None), # 产后减肥犹豫(暖暖妈) + ("diet_2", None, None), # 朋友推荐咨询减肥(Cici) # 潜在客户 ("scenario_2", "球球妈妈", "球球妈-咨询"), ("scenario_2", "米米妈", "米米妈-咨询"), @@ -497,12 +645,16 @@ SALESPERSON_ASSIGNMENTS = { ("group", "宝妈育儿交流群", ""), ("group", "育儿干货分享群", ""), ], - 3: [ # 王强 — 中等 - ("scenario_4", None, None), # 竞品对比 - ("scenario_3", None, None), # 长期跟进复购 + 3: [ # 王强 — 中等(两个产品线都做) + ("scenario_4", None, None), # 竞品对比(儿童) + ("scenario_3", None, None), # 长期跟进复购(儿童) ("variant_腹泻咨询后成交", None, None), ("variant_安全顾虑后犹豫", None, None), ("scenario_2", "星星妈", "星星妈-推荐咨询"), + # 减肥益生菌场景 + ("diet_3", None, None), # 对比代餐后成交(阿狸) + ("diet_5", None, None), # 减肥复购(小鹿) + ("diet_4", None, None), # 减肥价格异议(小丸子) # 潜在客户 ("scenario_2", "晨晨妈妈", "晨晨妈-咨询"), ("scenario_2", "露露妈", "露露妈-咨询"), @@ -548,6 +700,14 @@ def generate_contacts_for_salesperson(sp_id: int): is_group = False wx_username = f"{SALESPERSONS[sp_id]['wx_account']}_contact_{i+1}" result.append((nick, remark, is_group, wx_username, tpl)) + elif kind.startswith("diet_"): + idx = int(kind.split("_")[1]) + tpl = DIET_SCENARIOS[idx] + nick = nick_override or tpl["contact"]["nickname"] + remark = remark_override or tpl["contact"].get("remark", "") + is_group = False + wx_username = f"{SALESPERSONS[sp_id]['wx_account']}_contact_{i+1}" + result.append((nick, remark, is_group, wx_username, tpl)) elif kind == "non_customer": nick = nick_override remark = remark_override or "" diff --git a/demo/ai/analyze.py b/demo/ai/analyze.py index ff239e3..e1c3c40 100644 --- a/demo/ai/analyze.py +++ b/demo/ai/analyze.py @@ -38,32 +38,36 @@ DASHSCOPE_MODEL = "qwen-plus" SYMPTOM_WORDS = [ "湿疹", "过敏", "鼻炎", "腹泻", "便秘", "免疫力", "体质", "红疹", "胀气", "拉肚子", "打喷嚏", "流鼻涕", "感冒", "食物过敏", "牛奶蛋白过敏", + "减肥", "减脂", "瘦身", "产后", "体脂", "肚子", "大腿", "反弹", "代餐", ] PRODUCT_WORDS = [ "益生菌", "菌株", "进口", "配方", "成分", "丹麦", "鼠李糖", "无敏", "LGG", "临床", "调理", "肠道", "免疫", + "B420", "纤益", "脂肪代谢", "减脂", "肠道代谢", "膳食纤维", ] PRICE_WORDS = [ "价格", "多少钱", "费用", "报价", "优惠", "套餐", "盒", "周期", - "298", "798", "1499", "贵", "便宜", "划算", + "298", "798", "1499", "328", "656", "贵", "便宜", "划算", ] DEAL_WORDS = [ "下单", "付款", "发货", "来几盒", "定了", "来3盒", "来6盒", "已付", "转过去", "签收", "已经转", "麻烦尽快发", + "来2盒", "付了", "已付款", ] OBJECTION_WORDS = [ "贵", "太贵", "考虑", "商量", "老公", "副作用", "安全吗", "有没有效", "没用过", "合生元", "对比", "担心", "再看看", "网上", "几十块", + "哺乳期", "反弹", "代餐", "节食", "拉肚子", ] # 阶段关键词(按优先级排序) STAGE_KEYWORDS = [ ("成交", DEAL_WORDS), - ("报价", ["多少钱", "价格", "套餐", "298", "798", "1499", "报价"]), + ("报价", ["多少钱", "价格", "套餐", "298", "798", "1499", "328", "656", "报价"]), ("异议处理", OBJECTION_WORDS), ("需求发现", SYMPTOM_WORDS + ["什么情况", "多大了", "几个月", "症状"]), ("建立联系", ["你好", "在吗", "请问"]), @@ -122,8 +126,9 @@ def identify_customer(messages: list[dict], salesperson_name: str | None = None) if len(key_needs) >= 3: break - # 行业 - industry = "宝妈" + # 行业:减肥相关标记为年轻女性,否则宝妈 + diet_words = ["减肥", "减脂", "瘦身", "B420", "纤益", "代餐", "体脂", "产后减肥"] + industry = "年轻女性" if any(w in all_text for w in diet_words) else "宝妈" return { "is_customer": True, @@ -171,7 +176,8 @@ def generate_summary_llm(messages: list[dict]) -> dict | None: prompt = f"""你是一个微信销售对话分析助手。以下是销售与客户的微信对话记录,请分析并输出 JSON 格式的沟通摘要。 ## 产品背景 -益童宝儿童益生菌粉:丹麦进口菌株,主打小儿抗过敏(湿疹、鼻炎、食物过敏),298元/盒,3盒套餐798元,6盒套餐1499元。目标客户是宝妈。 +1. 益童宝儿童益生菌粉:丹麦进口菌株,主打小儿抗过敏(湿疹、鼻炎、食物过敏),298元/盒,3盒套餐798元,6盒套餐1499元。目标客户是宝妈。 +2. 纤益减肥益生菌:含专利B420菌株,主打健康减脂不反弹,不节食不腹泻,通过调节肠道菌群促进脂肪代谢。328元/盒(30天用量),2盒套餐656元。目标客户是18-35岁有体重管理需求的年轻女性。 ## 对话记录 {dialog_text} diff --git a/demo/run_demo.sh b/demo/run_demo.sh index 216d520..fee9ac5 100755 --- a/demo/run_demo.sh +++ b/demo/run_demo.sh @@ -95,6 +95,31 @@ SELECT s.id, cu.id, 1, '益童宝益生菌 3盒套餐', 798, '2026-06-20', 'clos FROM salesperson s, customer cu WHERE s.id = 3 AND cu.salesperson_id = 3 AND cu.customer_name LIKE '糖糖%' AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '益童宝益生菌 3盒套餐' AND deal_date = '2026-06-20'); + +-- 减肥益生菌预置成交 +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-08', 'closed' +FROM salesperson s, customer cu +WHERE s.id = 2 AND cu.salesperson_id = 2 AND cu.customer_name LIKE '小鹿%' +AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-08'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-14', 'closed' +FROM salesperson s, customer cu +WHERE s.id = 3 AND cu.salesperson_id = 3 AND cu.customer_name LIKE '阿狸%' +AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-14'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 5, '纤益益生菌 单盒', 328, '2026-07-10', 'closed' +FROM salesperson s, customer cu +WHERE s.id = 2 AND cu.salesperson_id = 2 AND cu.customer_name LIKE '小鹿%' +AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '纤益益生菌 单盒' AND deal_date = '2026-07-10'); + +INSERT INTO deal (salesperson_id, customer_id, product_id, product_name, amount, deal_date, status) +SELECT s.id, cu.id, 4, '纤益益生菌 2盒套餐', 656, '2026-07-13', 'closed' +FROM salesperson s, customer cu +WHERE s.id = 3 AND cu.salesperson_id = 3 AND cu.customer_name LIKE '小鹿%' +AND NOT EXISTS (SELECT 1 FROM deal WHERE customer_id = cu.id AND product_name = '纤益益生菌 2盒套餐' AND deal_date = '2026-07-13'); " 2>/dev/null || true DEAL_COUNT=$($PSQL -t -c "SELECT count(*) FROM deal")