微信接龙解析 Skill
触发条件
当用户粘贴一段包含「#接龙」标记的群聊文本,并要求解析、整理、统计或提取其中的订单信息时,调用本 Skill。
接龙文本的通用结构
一个典型的接龙消息由两大段落组成:
段落一:商品列表(上方)
#接龙
[可选:宣传文案/到货时间]
1️⃣ 商品全名A
[可选:一行或多行描述/卖点]
💰XX元/单位
2️⃣ 商品全名B
[可选:描述]
💰XX元/单位
...
- 商品按序号(1️⃣ 2️⃣ 3️⃣ / 1. 2. 3. / 1️⃣ 2️⃣ 3️⃣)逐条排列
- 每个商品至少包含:序号、商品全名、价格行
- 商品全名和价格行之间可能夹有描述行
- 价格行格式多样,详见下节
段落二:接龙订单(下方)
[序号]. [昵称]([房间号]) [商品简称][数量] [商品简称][数量] ...
- 每个参与者一行,以数字序号开头(有序列表)
- 昵称可能包含也可不包含房间号(格式:
数字-数字或(数字-数字)) - 每行包含一个或多个「商品简称 + 数量」对
价格行格式
常见格式:
| 格式 | 示例 |
|------|------|
| 💰XX元/单位 | 💰29.9元/1件(10个大果)、💰7元/袋 |
| 💰XX🉐单位 | 💰28.9🉐3斤、💰10🉐5个 |
| 💰XX元/个(重量) | 💰25元/个(7-8斤/个) |
| 混合 | 💰9.9元/4袋(100g/袋)、💰65🉐2斤/盒 |
解析要点:
- 价格行一定包含 💰 符号和数字
- 价格行可能包含优惠价标记如 (尝鲜价) (活动价) 等,这些不影响商品识别
商品简称匹配方法论(核心难点)
这是整个解析过程中最关键的环节。简称→全名的匹配不能靠预设映射表,而应该使用以下推理方法:
第一步:从商品列表中提取「关键词指纹」
对每个商品,从全名中提取一组可检索的特征词:
| 商品全名 | 特征词(按区分度排序) |
|---|---|
| 新西兰进口红玫瑰苹果 | 苹果、红玫瑰、玫瑰苹果、新西兰 |
| 自然熟青红脆李 | 李、脆李、青红脆、青红脆李 |
| 高端美都麒麟瓜 | 西瓜、麒麟瓜、美都、麒麟 |
| 黑羽绿壳初生土鸡蛋 | 鸡蛋、土鸡蛋、初生蛋、绿壳 |
| 泰国猫山王纯榴莲肉 | 榴莲、猫山王、榴莲肉 |
| 手工蜂蜜小面包 | 面包、蜂蜜面包、小面包 |
| 澳洲宝石红玫瑰李 | 李、玫瑰李、红玫瑰李、澳洲 |
| 岳阳网红大馒头 | 馒头、大馒头、岳阳馒头 |
提取规则:
- 去掉产地前缀(新西兰、新疆、海南、泰国等)、去掉修饰词(精品、高端、纯甜、纯等)
- 保留最核心的 2-4 个字作为搜索关键词
- 当一个特征词能匹配到多个商品时,需要更多特征词来区分
第二步:切割参与者的订单文本
参与者行中,商品简称和数量通常紧贴,没有明显分隔符。切割策略:
-
按商品特征词切割:将订单文本按参与者的商品简称进行分割
- 输入:苹果1葡萄2李子1西瓜1鸡蛋2酸奶1
- 方法:扫描每个已知商品的特征词,找到匹配的位置
- 输出:苹果→1,葡萄→2,李子→1,西瓜→1,鸡蛋→2,酸奶→1 -
数量格式归一化:
| 原始写法 | 归一化数量 |
|----------|-----------|
|苹果1| 苹果 × 1 |
|李子2份| 李子 × 2 |
|西瓜一个| 西瓜 × 1 |
|西瓜1个| 西瓜 × 1 |
|馒头2个| 馒头 × 2 |
|2个馒头| 馒头 × 2 |
|买2个馒头| 馒头 × 2 |
|4个(无商品名)| 见下方「唯一商品简写」规则 | -
唯一商品简写规则:
- 如果某一行只有数量没有商品名(如蓝本四中仅售一种商品"馒头",参与者写"4个"、"2个")
- 检查整个接龙是否只有一种商品 → 如果是,默认该商品
- 如果接龙有多种商品但这个参与者只写了数量 → 标记为"商品名缺失,请检查原文" -
错别字/重复字容错:
-香香干1份干1份→ 识别为香干1份 香干1份
-凤凰李1份蜂糖李1份→ 按特征词切分为两个商品
- 规则:优先按特征词切割,重叠部分重复利用
第三步:模糊匹配
对于参与者的商品简称,找出最匹配的商品全名:
商品简称 "李子" → 检查所有含"李"的商品:
- 自然熟青红脆李 → 匹配(含"李"、"脆李")
- 澳洲宝石红玫瑰李 → 匹配(含"李"、"玫瑰李")
- 新疆伊犁原味厚酸奶 → 不匹配
→ 如果多个匹配,进一步看简称中是否有更多特征词:
"李子" 两个匹配,需要看上下文或排序号
"玫瑰李" → 澳洲宝石红玫瑰李(明确匹配)
"凤凰李" → 商品列表中找含"凤凰李"的
"脆蜜梨/梨子" → 高山脆蜜梨(含"梨"、"脆蜜")
匹配优先级(从高到低):
1. 精确子串包含:简称是整个商品名的一部分(红玫瑰苹果 ← 苹果)
2. 核心词匹配:简称匹配商品名的核心词(李子 ← 青红脆李、凤凰李)
3. 同义词/类别词:梨子 ← 脆蜜梨、西瓜 ← 麒麟瓜、鸡蛋 ← 土鸡蛋
4. 上下文消歧:当唯一匹配无法确定时,参考:
- 商品序号(参与者的购买通常集中在靠前的热门商品)
- 价格区间(贵的商品订单量通常较小)
- 是否为复团品/活动品(通常有较多订单)
接龙中的特殊标注
"截单"(停止接单)
- 原文中可能出现如:
西瓜、芒果、酸奶、葡萄截单‼️ - 这些商品的订单已截止,但历史订单仍需纳入统计
- 建议在输出中标注
[已截单]
一人多次接龙
- 同一昵称可能出现多次(如蓝本二中"刘支援"出现在第11行和第13行)
- 保留多行,不合并,按原文顺序逐条列出
- 每条记录独立编号、独立展示该次下单内容
二楼式接龙
- 第一个人通常是"团长文文"或类似角色,其订单是预先配置的示例
- 也可以作为一个有效订单计入统计
输出格式
唯一输出:按人接龙明细(透视表)
每条接龙记录占一行,每个商品单独一列。不需要商品汇总表。
- 列名格式:
商品简称(单价)— 单价取自价格行的完整表述,如凤凰李(28.9/3斤) - 最后一列:订单总价 — 该行各商品数量 × 对应单价的加总
- 空白表示该条未订购该商品
> 以蓝本二为例:
| 行号 | 昵称 | 房号 | 凤凰李(28.9/3斤) | 麒麟瓜(25/个) | 紫苏桃子姜(18/桶) | 绿豆饼(10/份) | 香干(12.9/份) | 订单总价 |
|---|---|---|---|---|---|---|---|---|
| 1 | 团长文文 | 1-1002 | 2份 | - | 1 | 1 | 1 | 99.7元 |
| 2 | 4-501 | - | - | 1个 | - | - | - | 25元 |
| 11 | 刘支援 | - | - | - | - | 1份 | 2份 | 35.8元 |
| 13 | 刘支援 | - | - | - | - | 1份 | 1份 | 22.9元 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
列名规则:使用商品简称(凤凰李、麒麟瓜),后面括号标注单价原文 (28.9/3斤)。
总价计算规则(公式驱动,不预计算数值):
所有金额计算必须通过 表格公式 实现,大模型只负责:
- 提取单价数值(如 28.9/3斤 → 数值单价 28.9/3 ≈ 9.633)
- 提取数量数值(从"2份"→2,从"1个"→1)
- 写入公式到对应单元格
核心原则:单元格里存的是公式,不是结果数字。
腾讯文档落库(当 tencent-docs 连接器可用时)
解析完成后,除了在对话中展示透视表外,还应将结果写入腾讯文档在线表格,并返回文档链接。
建表流程
- 创建表格:使用腾讯文档 MCP 创建一个新的在线表格,文件命名格式
接龙_2026-07-08
- 使用当天日期,格式固定为YYYY-MM-DD
- 示例:接龙_2026-07-08
- 如果当天已有同名文档,则追加到新 sheet 而非覆盖 - 重命名默认工作表:获取默认 sheet 的 ID,重命名为
明细透视表 - 添加 Sheet 2:使用
add_sheet添加商品订单汇总表
- ⚠️ 必须传append_index: true,否则腾讯文档可能会把新表插入到最前面,导致 Sheet 1 和 Sheet 2 顺序颠倒 - 写入 Sheet 1:明细透视表(按人接龙明细)
- 表头行(第1行):- 第1列:行号
- 第2列:昵称
- 第3列:房号
- 第4列起:每组商品单独一列,列名用
商品简称(单价原文),如凤凰李(23.9/3斤)、榴莲(65/2斤) - 末尾列:订单总价
- 单价行(第2行,新建):
- 第1列留空(或写"单价"作为标注)
- 第2、3列留空(昵称、房号)
- 第4列起:每个商品列填入纯数值单价,数值严格取自接龙原文的单价,禁止估算/换算/猜测
- 如
💰28.9🉐3斤→ 纯数值填入28.9/3 = 9.633(每斤价格) - 如
💰2.5元/斤→ 纯数值填入2.5 - 如
💰13.9🉐一箱→ 纯数值填入13.9 - ⚠️ 禁止规则:严禁自行猜测"一个多重"、"一份多少斤"等换算。例如接龙写
2.5元/斤但大家按"个"下单 → 单价行仍然填2.5,不准擅自乘某个猜测的重量。单位不一致的问题需向用户确认 - 末尾列(订单总价):留空
- 此行可设为隐藏行,或保留可见供核对,建议行背景标灰区分
- 数据行(第3行起):
- 每条接龙记录一行
- 数量统一存为纯数字("2份"→2,"1个"→1,"一个"→1),不留单位后缀
- 未订购的商品填 0(不要留空,否则公式计算会出错)
- 订单总价列:
- 设计标准:全部使用 SUMPRODUCT 公式:
=SUMPRODUCT(D{row}:K{row}, D$2:K$2) - 公式适用的条件:所有商品的计价单位与下单单位一致。即:按斤卖就按斤下单、按个卖就按个下单
- 如果存在单位不一致(如按斤计价但按个下单),SUMPRODUCT 会算错,此时不写公式,改为 LLM 计算后填入纯数字,并在表格外标注"此项单价单位与下单单位不一致,已按LLM估算填入,请确认实际单重/单价"
- LLM 估算时须明确告知用户估算依据,不可隐瞒
- ⚠️ API 限制说明:若当前 MCP 工具不支持写入 FORMULA 类型(如 Tencent Docs
set_range_value的 FORMULA 不生效),则回退方案为:- LLM 按
单价行数值 × 对应数量计算每行订单总价,填入纯数字(NUMBER 类型) - 用户修改单价行后,告知用户需重新运行解析以更新订单总价
- 公式设计仍是标准,待 API 支持后应改回
- LLM 按
- 合计行(末尾):
- 添加
合计行,所有商品数量列用=SUM(D3:D{last})公式求和 - 订单总价列用
=SUM(L3:L{last})求和
- 写入 Sheet 2:商品订单汇总
- 表头行:序号 | 商品名 | 售价(元) | 总销量 | 销售额 | 订单明细
- 数据行:每个商品一行,售价和总销量通过跨表公式引用 Sheet 1 的单价行和合计行- 商品名:
='明细透视表'!{列}$1(引用 Sheet 1 表头) - 售价:
='明细透视表'!{列}$2(引用 Sheet 1 单价行) - 总销量:
='明细透视表'!{列}${合计行}(引用 Sheet 1 合计行) - 销售额:
=C{row}*D{row}(公式计算) - 订单明细:LLM 拼接文本
- 合计行:末尾加合计行,总销量和销售额列用 SUM 公式
- 商品名:
- 返回链接:获取文档的 URL 并返回给用户
格式约定
- 标题行加粗
- 数字列右对齐,文本列左对齐
- 商品数量必须存纯数字("2份"→2,"1个"→1,"一个"→1),不允许保留单位后缀,否则公式无法计算
- 未订购的商品填
0而非留空,保证 SUMPRODUCT 公式正确 - 金额列(订单总价、销售额)只存公式,不存预计算数值
- 单价行(Sheet 1 第2行)建议设为灰底或隐藏行,不影响视觉
- 若目标表格引擎不支持公式(如纯 CSV 导出),则回退为 LLM 计算数值并注明
示例表格结构
Sheet 1:明细透视表(以蓝本五为例,Row2 为单价行)
| 行号 | 昵称 | 房号 | 甜瓜(25/4斤) | 榴莲(65/2斤) | 柚子(19.9/个) | 蟠桃(18.9/2斤) | 凤凰李(23.9/3斤) | 蜂蜜面包(10/10个) | 牛筋干(12.9/1斤) | 馒头(7/2个) | 订单总价 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 单价 | 6.25 | 32.5 | 19.9 | 9.45 | 7.967 | 1 | 12.9 | 3.5 | |||
| 1 | 团长文文 | 1-1002 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 3 | =SUMPRODUCT(D3:K3, D$2:K$2) |
| 2 | 2-1004 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | =SUMPRODUCT(D4:K4, D$2:K$2) |
|
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 合计 | =SUM(D3:D19) |
=SUM(E3:E19) |
... | ... | ... | ... | ... | ... | =SUM(L3:L19) |
Sheet 2:商品订单汇总
Sheet 2 的售价和总销量必须通过 跨表公式 从 Sheet 1 引用,确保用户在明细表中调整数据后汇总自动更新。
列规则:
| 列 | 内容 | 数据来源 |
|:---:|:----|---------|
| 序号 | 1, 2, 3 ... | 顺序编号 |
| 商品名 | 从 Sheet 1 表头引用 | ='明细透视表'!D$1、='明细透视表'!E$1 ... |
| 售价(元) | 从 Sheet 1 单价行引用 | ='明细透视表'!D$2、='明细透视表'!E$2 ... |
| 总销量 | 从 Sheet 1 合计行引用 | ='明细透视表'!D${合计行}、='明细透视表'!E${合计行} ... |
| 销售额 | =C{row}*D{row} 公式 | 基于售价和总销量自动计算 |
| 订单明细 | LLM 拼接的文本 | 如 团长文文×1, 2-401×2 |
示例(假设合计在第22行):
| 序号 | 商品名 | 售价(元) | 总销量 | 销售额 | 订单明细 |
|:---:|:-------|:--------:|:-----:|:-----:|:---------|
| 1 | ='明细透视表'!D$1 | ='明细透视表'!D$2 | ='明细透视表'!D$22 | =C2*D2 | 团长文文×1 |
| 2 | ='明细透视表'!E$1 | ='明细透视表'!E$2 | ='明细透视表'!E$22 | =C3*D3 | ... |
| ... | ... | ... | ... | ... | ... |
| | 合计 | | =SUM(D2:D...) | =SUM(E2:E...) | |
特殊标注
- 截单商品:在对应列的标题行追加
[截单]标记,如西瓜(25/个)[截单] - 错别字容错:在腾讯文档中还原为正确商品名,但追加备注列或批注标注原文
配合 ClawBot 微信远程使用
当通过微信 ClawBot 发送接龙文本时,执行流程为:
- 解析接龙文本
- 在对话中输出透视表
- 创建腾讯文档在线表格并写入数据(明细 + 汇总 两个 Sheet)
- 返回文档链接 + 简要汇总(商品数、记录数、总金额)
- 将表截图(如有条件)或直接返回链接供手机端查看
常见边界情况对照表
| 场景 | 原文示例 | 处理方式 |
|---|---|---|
| 仅有一种商品 | 全篇只有馒头,参与者写"4个" | 默认商品为馒头 |
| 商品名重复出现 | 同一昵称两次下单 | 按原文保留多行,不合并 |
| 歧义简称 | "李子"同时匹配凤凰李/玫瑰李/蜂糖李 | 检查昵称排序、历史购买倾向、价格行上下文推断,无法确定时同时标注 |
| 房间号格式 | 1-1002、(1-1002)、一期1-1001、一期公寓1916 |
优先提取数字-数字格式;无房间号留空 |
| 数字紧贴无分隔 | 李子2份西瓜1个凤凰李1份 |
用特征词表进行贪心匹配分割 |
| "截单"标注 | 西瓜、芒果、酸奶、葡萄截单‼️ |
在该商品列追加标注[截单],已接的订单照常计入统计和总价 |
| 单行多数量同商品 | 李子2份蜂糖李1斤 |
按商品名+数量对的顺序逐个解析 |
| 数量用中文数字 | 一个、一份、两个 |
统一转为阿拉伯数字 |
| 团长示范单 | 第一条总是"团长文文" | 正常作为一个有效订单处理 |
使用示例
用户输入:
> 帮我解析这个接龙:
> [粘贴接龙全文]
你的回复结构:
1. 先简要描述识别到的商品数量和参与记录数
2. 在对话中输出按人透视表(带单价列名和订单总价)
3. 创建腾讯文档在线表格(命名 接龙_YYYY-MM-DD),写入两个 Sheet:
- Sheet 1「明细透视表」:逐条接龙记录,订单总价列用 SUMPRODUCT 公式,合计行用 SUM 公式
- Sheet 2「商品订单汇总」:按商品统计销量 + 销售额,销售额列用 单价×销量 公式,合计行用 SUM 公式
4. 返回腾讯文档链接
5. 标注任何特殊发现(截单、商品名不在列表中、错别字容错、歧义匹配等)
6. 如有歧义商品名匹配,说明你的推理过程
> 注:如果 tencent-docs 连接器未连接或不可用,则跳过建表步骤,仅输出对话中的透视表。