表达方式与黑话¶
系统从聊天内容中学习两类素材:表达方式(特定情境下的说法)与黑话(圈内用语及其释义)。 两者来源相同、机制不同:表达方式经人工复核后才会被使用;黑话由自动推断判定,判为黑话即生效。
默认状态:两者的学习均默认开启,无配置文件开关,前提为 memory 任务档有可用模型。停用方式见文末。
表达方式:学习内容与来源¶
- 学习产物为「情境与说法」的搭配,取自群友的有辨识度句式与口癖;不学习 Bot 自身发言 (语料在代码层先剔除助手消息,防止自我强化),不包含具体人名。
- 触发时机:回复回合结束后挂载后台任务;该会话自上次学习起累计 24 条新消息才执行一次,每批处理 16 条。
- 学到的条目落库时标记为「未复核」,来源记为「本机学习」。
表达方式:使用方式¶
- 复核闸门:仅经人工确认的条目进入候选池,未复核的一律不使用;候选不足 10 条时本轮完全不注入。 即宁可不用,也不使用未经把关的内容。
- 候选池按会话严格隔离:某一群聊学到的说法不出现在其它群聊或私聊中。
- 回复前由模型从候选中至多挑选 4 条,以「当某种情境时,可以用某种说法来表达」的形式写入系统提示词的 「表达方式参考」块;被选中的条目使用次数加一。
- 主动搭话前同样执行一次挑选。
表达方式:审核与撤销¶
面板「表达方式」页(路由 /expressions)支持逐条或批量操作:
- 确认:进入候选池,且不再参与自动淘汰。
- 驳回:退出候选池;条目保留,显示为置灰加删除线,可撤销。
- 删除:物理删除,弹窗确认,不可逆。批量删除后若某会话候选跌破 10 条, 页面会提示该会话的表达方式注入将停用。
自动淘汰仅作用于本机学来的条目:未复核、从未被使用且超过 30 天的条目会被删除; 已确认或已驳回的条目永不自动删除。总量上限 2000 条。
黑话:学习内容与来源¶
- 学习产物为「词条与释义」,范围为 2~8 字的黑话、俚语、缩写、口头禅;提取规则排除人名与常见词。 语料中 Bot 自身的发言会被标注为「不采信」。
- 与表达方式不同,黑话由后台服务定时学习:每 45 秒轮询一轮,每个会话独立游标, 累计 40 条新消息才提取一次。
- 词条按出现次数进入推断阶梯:累计出现 4、8、25、100 次时各执行一次三步推断 (带上下文推断含义、仅看词条推断含义、比较两次结果)。两次一致判定为普通词,回到待定; 存在差异判定为黑话,转为「已确认」并写入释义;累计 100 次后锁定,不再推断。
- 判为黑话即生效,无人工闸门。判定有误时,在面板上驳回或删除。
黑话:使用方式¶
- 仅注入「已确认」且属于本会话或全局的词条;仅扫描其他成员的消息。
- 单轮最多注入 5 条,按出现次数与会话高频词表排序;同一词条 30 分钟内仅解释一次。
- 以「这个群里的一些说法」块进入系统提示词,并声明:仅供理解,不要刻意使用,不要向群成员解释词义。
黑话:审核与撤销¶
面板「黑话词表」页(路由 /jargon)分已确认、待定、已驳回三个页签:
- 确认:进入注入;驳回:退出注入;已驳回条目可撤销驳回并回到待定。 确认与驳回均将推断阶梯锁定在当前结论上,防止自动判定覆盖人工结论;撤销驳回后解除锁定。
- 删除:不可逆,弹窗确认。支持按关键词搜索词条或释义。
名字守卫¶
三步推断无法识别人名:群友的昵称可能被误判为黑话并注入提示词。为此设三层拦截:
- 学习入库前:候选词与人物显示名、群名片或 Bot 名字族(两个字以上)冲突的,直接丢弃。
- 每轮推断前:存量词条中与名字冲突的,降级为待定并永久锁定。
- 注入侧:由 Bot 的名字、别名与对用户的称呼组成保护名单,任何状态下均不注入。
另有一次性清洗脚本 scripts/maintain/jargon_guard_names.py:
将存量撞名词条批量降级,--dry-run 仅输出清单不修改数据;释义中含人名的词条只列入清单,交人工判断。
调整方式与停用影响¶
- 两者均无配置文件开关。表达方式的停用是天然成立的:不确认任何条目(或保有量不足 10 条)即不注入。
- 黑话注入有会话级开关(
PUT /api/streams/{id}/jargon/use,默认开),面板无对应入口,需直接调用接口; 关闭后该会话不再出现「群里的说法」块。 - 学习本身无单独开关:两类学习与事实抽取共用 memory 任务档,该档不可用时学习自然停止, 但同时会影响记忆抽取,不建议以此方式停用。
- 停用影响:不使用表达方式时,说话风格仅剩人设与回复风格配置;不使用黑话时,群内用语只能按字面理解。
实现细节见开发手册·core/agent。