语料联邦
July 30, 2026 · View on GitHub
牛牛接话默认只用本机学到的语料。语料联邦让你可以在本机之外,可选接入社区共享接话库,让更多匿名短句参与接话。
它和 在线统计与社区主站 是两回事:主站看在线数量、逛金句墙;共享语料要在本机 WebUI 里单独开,主站页面没有语料开关。
能做什么
| 能力 | 说明 | 默认 |
|---|---|---|
| 本机语料 | 本群学习、接话、清理 | 开启 |
| 使用社区共享库 | 接话时也可查社区池里的匿名短句 | 关闭 |
| 向社区贡献 | 把本机新学到的短句(匿名)上传到共享池 | 开启共享后可单独关 |
| 多套牛牛共池 | 跨部署消息去重、互认对方是 bot | 进阶,多数部署不用 |
查找顺序默认先本机再共享池;远端不可用时自动退回本机,不影响正常聊天。多数部署保持「只用本机」即可。
怎么开启
- 打开控制台 通用配置 → 语料联邦
- 在 社区共享语料 中打开「使用共享语料」
- 按需打开自动登记、是否向社区上传
- 保存;一般热重载即可,无需重启
只有希望接话素材更丰富、并愿意参与社区池时再开。
页面里各组在干什么
| 分组 | 做什么 |
|---|---|
| 接话时查哪些语料 | 本机 / 共享池的查找顺序、重复句合并 |
| 社区共享语料 | 是否使用、是否上传、自动登记 |
| 接话性能 | 一般保持默认 |
| 历史语料同步 | 可选:把本机历史语料补传到社区(体积大时再考虑) |
隐私
- 共享与上传仅含关键词与短句回复,不含 QQ、群号、完整聊天记录
- 可以只读共享池、关闭上传 / 贡献
- 不想参与则保持「使用共享语料」关闭(默认)即可
常见问题
| 情况 | 建议 |
|---|---|
| 开了共享但感觉没变化 | 仍会优先本机;确认已保存,且本机网络能访问官方社区中心 |
| 只想用共享、不想上传 | 关闭上传 / 贡献相关开关 |
| 完全不想碰社区语料 | 保持「使用共享语料」关闭 |
| 多台机器重复回同一句 | 见下方「多套牛牛共池」 |
| 同群总是某一套机器在回命令 | 正常:见「群归属」(仅命令);闲聊 / LLM 按条 claim,不粘主人 |
| 某命令(如本地塔罗)全池都不回 | 多半当前群主人没装该插件;升级后会按「能力宣告」只让有插件的部署当该命令主人(两端都需新版本) |
| 热闹群感觉卡、命令偶尔还行 | 过载时会优先保命令、暂缓闲聊;见下方「热闹群与入站设计」 |
| 自写/社区插件平时不接话、命令正常 | 闲聊严格预筛:听群聊的插件需声明 ingress_route.passive;见「被动插件」 |
多套牛牛共池(进阶)
多套自托管要对同一条群用户消息尽量只回一次,并互相把对方舰队里的号认成 bot(不当作用户命令)时,用 通用配置 → 多机协同(联邦控制)。这与上文「社区共享接话语料」是两套开关,互不替代。
怎么进池
- 默认:控制面开启时,较新版本 Bot 会在启动时从社区中心自动写入入池密钥,并拉取协同池编号与去重服务器地址;一般无需手填。
- 也可手动:在控制台 统计与语料 → 多机协同 复制入池密钥,粘贴到多机协同配置后保存。
- 单机、不关心跨部署去重时可忽略。
- 需要本机能连上中心下发的去重 Redis(
redis客户端已在主依赖)。协同入站未就绪时,跨部署去重不会生效。
同池后实际会做什么
| 能力 | 用户侧观感 |
|---|---|
| 友军互认 | 同池其它部署发出的群消息,本机不当作用户命令去抢答 |
| 群归属 | 仅普通命令:每个群在同一时刻主要由一个部署负责,减少两边同时进匹配器 |
| 消息抢占(claim) | 命令与闲聊都会在去重服务器上抢一次;没抢到的部署忽略该条,避免双回 |
群归属范围:粘性归属只作用于识别为命令的明文(与入站 cmd 车道一致)。群内闲聊、@ 牛牛聊天(LLM)、复读等 chat 车道不走归属,只靠 claim 按条决出胜负,避免热闹群把整台机器钉死数小时。
群归属轮换(默认开启):归属按「协同池内当前活跃部署名单 + 群号 + 时间桶」用各方一致的算法选定,不是各端各自随机。默认约每 2 小时换一轮时间桶。换桶瞬间若两端时钟略有偏差,仍靠上面的 claim 保证最多一只回。
本群在场过滤:各部署在 peer 心跳里带上近期收过消息的群号(present_group_ids)。算某群命令归属时,只在宣称仍在该群的部署里取模;进程还在池里、但早已不在该群收消息的对端不再占坑,避免「主人收不到 → 命令空掉」。未升级、心跳里没有该字段的对端仍视为「可能在场」(兼容旧版)。两端都升级后,冷群首次命令也可靠 claim 防双回。
命令能力宣告:各部署在 peer 心跳里带上本机已加载插件的命令明文(来自 menu_data)。算某条命令的群归属时,只在宣称能处理该命令的部署里取模;未升级、心跳里没有能力字段的对端仍视为「全能」(兼容旧版)。因此像「牛牛塔罗牌」这类本地插件,只有装了该插件并升级到会宣告能力的部署才会当主人;没装的部署即使按群号本该当主人也会让出。两端都升级后才完全生效。
可选环境变量(写入 webui.json / [env] 亦可):
| 键 | 默认 | 说明 |
|---|---|---|
PALLAS_FEDERATE_OWNER_ROTATE_SEC | 7200(2 小时) | 群归属轮换周期(秒);设为 0 则按群号固定归属、不随时间轮换 |
PALLAS_FEDERATE_PREFER_LOCAL_OWNER | false | 命令群归属优先本机:本机在能力环内时固定本机当主人,不再轮换;本机不会的命令仍按原规则。控制台「多机协同」可开关 |
例外:全员同响命令
控制台里配置的 全员同响(如默认常见的「牛牛」「牛牛赞我」等)会故意跳过跨部署 claim,本舰多头、甚至同池多套机器都可能齐回。测「会不会双回帮助」请用普通命令(例如「牛牛帮助」),不要用同响列表里的文案。
热闹群与入站设计(行为说明)
热群卡顿时,瓶颈通常是「每条闲聊扇出大量插件 + 偶发慢查库 / 被动 LLM」,不是协同 claim 本身。近期入站策略按 命令优先、闲聊可降级 设计,方便自托管判断「这是正常保护还是坏了」。
命令 vs 闲聊怎么分流
| 车道 | 典型消息 | 跨部署 | 本机过载时 |
|---|---|---|---|
| 命令(cmd) | 「牛牛帮助」等识别为命令的明文 | 群归属(约 2h 轮换)+ claim | 尽量继续处理 |
| 闲聊(chat) | 普通聊天、复读、@ 牛牛 / 被动插嘴 | 不走粘性归属,只 claim | 可整段跳过 matcher,优先保命令 |
闲聊默认少跑插件
群消息默认会先做 route 预筛:命令尽量只激活相关插件;闲聊在严格模式下(默认开)不会把所有「非纯命令」插件都跑一遍,只跑需要听群聊的那一类。
「被动插件」(ingress_route.passive)特别在哪:
| 普通命令插件 | 被动(passive)插件 | |
|---|---|---|
| 典型 | 帮助、设置类「牛牛××」 | 复读、智能对话、入群欢迎、喝酒/轮盘局内消息等 |
| 闲聊严格模式下 | 普通聊天不激活(除非本条被识别成命令) | 过门控后的普通群聊仍会激活 |
| 含义 | 只在用户喊命令时干活 | 声明「我要旁听/参与闲聊车道」 |
内置里默认会当被动听的包括:复读、智能对话、欢迎、喝酒、轮盘、申请管理等(也可在插件 extra 里显式写 "passive": true)。社区/自写插件若用 on_message 听闲聊却没标 passive,升级后可能表现为「命令还行、平时不接话」——这是预筛预期行为,不是权限坏了。
插件作者写法见 插件元数据 · ingress_route。运维可用 PALLAS_CHAT_MATCHER_STRICT=false 恢复「闲聊跑遍所有非纯命令 matcher」(热群不推荐)。
过载时还有另一层:即使是被动插件,也可能整段闲聊 matcher 被暂缓(见下节),命令优先。
过载时保命令
入站调度统计到 matcher 扇出或车道排队过重时,会打上短期过载标记。此时默认 跳过闲聊 matcher(PALLAS_INGRESS_CHAT_DROP_ON_OVERLOAD,默认开),命令仍走匹配。发送队列未满不等于不卡——卡的是处理侧。
复读与被动 LLM 的节流
| 机制 | 默认行为 | 可调 |
|---|---|---|
| 复读查库限时 | 约 0.8s 超时则本轮不接话 | PALLAS_REPEATER_BUNDLE_TIMEOUT_SEC(0=不限) |
| 复读查库短缓存 | 同群同文案短时复用结果 | PALLAS_REPEATER_BUNDLE_CACHE_SEC(默认约 2.5s;0=关) |
| 复读学习入队 | 过载或队列压力下可丢学习、不影响回消息 | 学习队列配置见复读运行时 |
| 被动插嘴攒窗 | 同群短间隔连发只评估首条 ambient;@ / 点名 / 续聊窗不受影响 | PALLAS_LLM_AMBIENT_TURN_WINDOW、PALLAS_LLM_AMBIENT_TURN_IDLE_SEC |
| 语料收尾提示 | 组装 LLM 提示时查语料有短超时,超时则省略该提示 | PALLAS_LLM_CORPUS_ENDING_HINT_TIMEOUT_SEC |
人设群风格等后台刷新在过载时会暂缓,避免与群消息抢事件环。
和分片的关系
单进程(unified)扛很多热群时,上述保护只能「少做一点」;要真正摊负载请用 分片部署。分片下命令/闲聊仍走同一套入站规则,只是多 worker 分摊账号与群。
配置文件(可选)
不经过 WebUI 时,可在 config/pallas.toml 的 [corpus] 中设置:
| 键 | 默认 | 说明 |
|---|---|---|
community_enabled | false | 是否使用社区共享语料 |
auto_enroll | false | 是否自动向中心登记 |
community_contribute | auto | 是否上传本机新回复 |
on_remote_failure | local_only | 远端失败时仅用本机 |
WebUI 保存后写入 data/pallas_config/webui.json,会覆盖同名项。使用官方社区中心时,服务地址保持默认即可。
相关说明
- 在线统计与社区主站(主站、上报、投稿墙)
- 热闹群与入站设计
- 控制台接口见 WebUI API · 仪表盘与统计