QQ 群搜索排名:机制拆解 + 实现路径 + 监测工具
对象:QQ 群按关键词搜索的排序系统(
qun.qq.com/ 客户端找群入口)。 结论性质:机制部分基于腾讯历史公开规则 + 公开观测校准;权重是相对量级,不是腾讯真值。 工具:同目录rank_engine.py,只做解析/打分/追踪,不写目标群任何数据。
一、机制:一次搜索请求里发生了什么
关键词 + 游客画像(city/ip/版本)
│
├─ 1. 召回 反查倒排索引:群名称/标签/简介/分类 分词命中 → 候选集
├─ 2. 硬过滤 地域桶(同城/同省优先成独立候选池)、公开性、是否允许加群、状态正常
├─ 3. 特征 容量档位、群等级、月活跃(消息数/发言人数)、成员数、论坛帖数、相册数、群龄
├─ 4. 打分 加权求和(各特征归一后 × 权重)
├─ 5. 重排 地域加成 → 去重/去广告 → 截断
└─ 6. 输出 只展示前 300 名(历史规则),手机上通常只到前几十就被划走
关键点:排序不是单一指标,而是”能不能被召回”×”召回后打多高分”。绝大多数群的问题出在第 1 步(名称/标签没命中词)而不是第 4 步。
历史公开规则的 10 条(腾讯旧版说明,ZOL 归档)
- 关键词匹配程度最高 2. 群类型(超级群/高级群/普通群) 3. 群等级 4. 群聊天消息数
- 群成员数 6. 群论坛帖子数 7. 群相册照片数 8. 公开群优先 9. 允许他人加入优先
- 搜索结果最多显示前 300 名
补充观测到的硬规则:搜索结果的靠前位置永远是游客所在地(IP/资料地)的群,这一条压过其他所有特征,属于产品级地域优先,不是权重可调的软项。
来源:
模型权重(DEFAULT_WEIGHTS,用于解释与优先级排序)
| 特征 | 权重 | 归一方式 | 工程含义 |
|---|---|---|---|
| kw_name 群名命中关键词 | 22 | 完整子串1.0 / 分词全中0.8 / 半中0.4 | 决定能否被召回 |
| activity 月活跃 | 18 | 0.6·log(月消息) + 0.4·log(月发言人数) | 权重最高且可运营 |
| capacity 容量档位 | 14 | 2000/1000/500/200 分档 | 直接买/升级即可 |
| level 群等级 | 10 | level/30 | 时间累积项 |
| members 成员数 | 10 | log(成员/2000) | 前期边际收益高 |
| kw_meta 标签/简介/分类命中 | 8 | 同 kw_name | 长尾词主要入口 |
| public 公开群 | 6 | 0/1 | 开关项 |
| threads 论坛帖数 | 5 | log(帖/200) | 低成本独立加分 |
| allow_join 开放加群 | 4 | 0/1 | 开关项 |
| albums 相册数 | 3 | log(图/100) | 低成本独立加分 |
| geo 同城加成 | +12 | 硬加成 | 无法用权重抵消 |
二、”刷排名”是怎么实现的:四条技术路线
排名优化的实质是把上面每个可干预特征推到头部水位。市面上的”代刷群排名”就是把这四件事工程化:
路线 1 — 群属性工程(最便宜,ROI 最高)
- 群名改为「地域词 + 核心词 + 修饰词」结构,核心词前置,不堆砌无关词(堆砌会触发内容侧降权)。
- 群标签 / 群简介 / 群分类三处用同一主词 + 长尾词组合,覆盖分词召回。
- 部分旧字段(群简介、群标签)在客户端是灰的,只能用协议端或老版本入口改,这也是”必须用工具才能改”的实际原因。
路线 2 — 容量 × 地域矩阵
- 容量档位是离散加分项:升级到 1000/2000 人群,比分立刻抬升。
- 地域是硬规则 → 一城一群做矩阵:目标词 × N 个城市各建 1–3 个 2000 人群,游客在任一城市搜同一个词都能命中本地群。
- 冷门词用 200 人群铺量即可,热门词必须上大容量 + 活跃度对抗。
路线 3 — 活跃度维持(最重、最像”刷”)
- 活跃是按月累计的:当月在线人数、发言人数、消息条数。这决定了”突击刷一天”没用,要靠持续水位。
- 工程件:账号池(多开/协议端)+ 内容素材库 + 定时调度(发言间隔随机化、话题轮换)+ 代理 IP 池(按城市出口就近匹配地域桶)+ 设备指纹隔离 + 验证码/风控挑战的应对。
- 真实运营里更稳的做法是人机混合:机器人发话题→真人接话,这样发言曲线和内容分布不像注入。
- 入群/退群曲线也要控制:短时间大批量入群是风控最敏感的信号之一。
路线 4 — 数据面加分 + 监测闭环
- 论坛帖、群相册、公告、文件库:都是低成本的独立加分项,一次投入长期有效。
- 关闭「需要验证才能加群」、打开公开可见。
- 监测闭环:定期抓关键词搜索结果 → 存快照 → 看自己名次曲线和对手升位动作 → 反推对方在补哪个特征。
rank_engine.py track就是干这个的。
风控/检测面(腾讯侧可能盯的东西)
| 检测面 | 信号 | 后果 |
|---|---|---|
| 设备指纹 | 同设备多账号、模拟器/协议端特征 | 账号封禁、群降权 |
| IP 聚集 | 大量账号同 C 段、IDC 出口 | 批量关联封禁 |
| 行为频率 | 发言间隔机械、24h 均匀、无夜间低谷 | 内容侧限流、群信用扣分 |
| 入群曲线 | 短时陡增、来源单一 | 群被限流甚至封 |
| 内容审核 | 关键词堆砌、广告词、重复内容 | 群简介/名称被重置 |
| 群信用分 | 举报率、违规内容 | 直接掉出搜索 |
低风险区(合规运营):群名/标签/分类优化、容量升级、真人活跃运营、论坛帖、相册、公开设置。 高风险区(封号区):批量账号刷活跃、代理 IP 矩阵、协议端伪造发言、批量拉人。
三、工具用法
$py = "C:\Users\Administrator\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\python\python.exe"
$s = ".\qq-group-rank-lab\rank_engine.py"
# 0) 自检(不改任何东西)
& $py $s selftest
# 1) 单群打分:看分数被谁拖了
& $py $s score --keyword 前端 --name "北京-前端开发交流群" --city 北京 --viewer-city 北京 `
--max 2000 --current 1800 --level 25 --msgs 15000 --active 800 --threads 120 --albums 40 --public 1 --allow-join 1
# 2) 抓包响应 → 快照(字段别名已兼容 gc/gn/member_num/max_member_num/group_level...)
& $py $s parse --in payload.json --keyword 前端 --viewer-city 北京 --out case\snap-20250101.json
# 3) 名次随时间变化
& $py $s track --dir case --keyword 前端 --group 123456789
# 4) 对照头部群的差距清单(输出最该先补的三个动作)
& $py $s plan --snapshot case\snap-20250101.json --keyword 前端 --group 123456789 --viewer-city 北京 --top 5
接口占位(需要你自己抓包确认)
工具本身不联网、不带任何腾讯接口调用,parse 吃的是你已经抓到的响应 JSON。抓包位置通常在:
- 客户端「找群 / 搜群」页的搜索请求(返回 JSON 或 protobuf,protobuf 需自行解出群列表)
qun.qq.com网页版搜索 字段名各端不同,FIELD_ALIASES是别名表,缺字段直接往表里加即可,不用改解析逻辑。
输出示例(真实运行结果)
高配群: total=99.949 (kw_name 22.0 + activity 16.82 + capacity 14.0 + geo 12.0 ...)
低配群: total=58.1 (kw_name 22.0 + activity 9.79 + capacity 9.1 + geo 0 ...)
差距前三: public → level → activity
四、边界
工具只读、只算分、只出优化建议,不实现账号池、不实现协议端发言、不碰验证码对抗。 批量刷量的执行件属于平台风控对抗范畴,风险在你自己账号和群上——需要那条线时按自己的账号资产隔离做,并预留封号损失。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END







暂无评论内容