语料联邦

July 30, 2026 · View on GitHub

牛牛接话默认只用本机学到的语料。语料联邦让你可以在本机之外,可选接入社区共享接话库,让更多匿名短句参与接话。

它和 在线统计与社区主站 是两回事:主站看在线数量、逛金句墙;共享语料要在本机 WebUI 里单独开,主站页面没有语料开关。

能做什么

能力说明默认
本机语料本群学习、接话、清理开启
使用社区共享库接话时也可查社区池里的匿名短句关闭
向社区贡献把本机新学到的短句(匿名)上传到共享池开启共享后可单独关
多套牛牛共池跨部署消息去重、互认对方是 bot进阶,多数部署不用

查找顺序默认先本机再共享池;远端不可用时自动退回本机,不影响正常聊天。多数部署保持「只用本机」即可。

怎么开启

  1. 打开控制台 通用配置 → 语料联邦
  2. 社区共享语料 中打开「使用共享语料」
  3. 按需打开自动登记、是否向社区上传
  4. 保存;一般热重载即可,无需重启

只有希望接话素材更丰富、并愿意参与社区池时再开。

页面里各组在干什么

分组做什么
接话时查哪些语料本机 / 共享池的查找顺序、重复句合并
社区共享语料是否使用、是否上传、自动登记
接话性能一般保持默认
历史语料同步可选:把本机历史语料补传到社区(体积大时再考虑)

隐私

  • 共享与上传仅含关键词与短句回复,不含 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_SEC7200(2 小时)群归属轮换周期(秒);设为 0 则按群号固定归属、不随时间轮换
PALLAS_FEDERATE_PREFER_LOCAL_OWNERfalse命令群归属优先本机:本机在能力环内时固定本机当主人,不再轮换;本机不会的命令仍按原规则。控制台「多机协同」可开关

例外:全员同响命令

控制台里配置的 全员同响(如默认常见的「牛牛」「牛牛赞我」等)会故意跳过跨部署 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 扇出或车道排队过重时,会打上短期过载标记。此时默认 跳过闲聊 matcherPALLAS_INGRESS_CHAT_DROP_ON_OVERLOAD,默认开),命令仍走匹配。发送队列未满不等于不卡——卡的是处理侧。

复读与被动 LLM 的节流

机制默认行为可调
复读查库限时约 0.8s 超时则本轮不接话PALLAS_REPEATER_BUNDLE_TIMEOUT_SEC0=不限)
复读查库短缓存同群同文案短时复用结果PALLAS_REPEATER_BUNDLE_CACHE_SEC(默认约 2.5s;0=关)
复读学习入队过载或队列压力下可丢学习、不影响回消息学习队列配置见复读运行时
被动插嘴攒窗同群短间隔连发只评估首条 ambient;@ / 点名 / 续聊窗不受影响PALLAS_LLM_AMBIENT_TURN_WINDOWPALLAS_LLM_AMBIENT_TURN_IDLE_SEC
语料收尾提示组装 LLM 提示时查语料有短超时,超时则省略该提示PALLAS_LLM_CORPUS_ENDING_HINT_TIMEOUT_SEC

人设群风格等后台刷新在过载时会暂缓,避免与群消息抢事件环。

和分片的关系

单进程(unified)扛很多热群时,上述保护只能「少做一点」;要真正摊负载请用 分片部署。分片下命令/闲聊仍走同一套入站规则,只是多 worker 分摊账号与群。

配置文件(可选)

不经过 WebUI 时,可在 config/pallas.toml[corpus] 中设置:

默认说明
community_enabledfalse是否使用社区共享语料
auto_enrollfalse是否自动向中心登记
community_contributeauto是否上传本机新回复
on_remote_failurelocal_only远端失败时仅用本机

WebUI 保存后写入 data/pallas_config/webui.json,会覆盖同名项。使用官方社区中心时,服务地址保持默认即可。

相关说明