Skip to content

Neo-Default-Chatter(neo_default_chatter / NDFC)

NDFC 是 Neo-MoFox 的新一代聊天执行核心,定位为「可复用的会话逻辑中台」。它采用 EventBus 事件驱动架构,把会话流水线上的全部可替换 seam 都以事件形式暴露给第三方插件——订阅事件即可「换函数」,不再需要像 DFC 那样构造聚合 Protocol 适配器。

全名 Neo-Default-Chatter,插件标识 neo_default_chatter,简称 NDFC。 与同仓的 default_chatter (DFC) 是姐妹插件:DFC 走适配器模式,NDFC 走事件模式。

它能做什么

  • 完整对话流程:从拉取未读消息、构建 prompt、调用模型、执行工具,到发送回复,一条龙完成
  • 四相状态机WAIT_USER → MODEL_TURN → TOOL_EXEC → FOLLOW_UP,行为一致可预测
  • 事件化扩展:全部 42 个 seam 通过 17 个 neo_default_chatter:* 事件暴露,第三方订阅即可替换或加料
  • 内置预处理策略:消息到达后先走「概率直通门」+「SubAgent 轻量 LLM 判定」,决定本轮是否值得主 chatter 立即响应
  • 原生多模态:图片可直接以 base64 形式打包进 LLM payload,跳过 VLM 文字识别环节
  • 挂起 / 恢复 / 结束:支持 pass_and_wait(挂起等恢复)、stop_conversation(结束本轮)等控制流
  • Stop 直接唤醒:私聊或 @Bot 消息可按概率提前解除 stop 冷却
  • 场景引导:按私聊 / 群聊区分主题引导词,默认含详尽行为约束

它是给谁用的

NDFC 是 Neo-MoFox 的可选聊天执行核心。默认未启用(enabled = false)——你需要手动启用它(通常会同时关闭 DFC 以避免冲突)。

如果你是插件开发者,想替换 / 加料 NDFC 的某个内部环节(如自定义未读拉取、改写 system prompt、追加负面行为约束、定制冷却计算等),参考 NDFC 开发指南 · 总览

启用 NDFC

NDFC 与 DFC 是同位替代关系,二者择一即可。典型切换步骤:

  1. 在 WebUI「插件配置」中把 default_chatterenabled 关闭
  2. neo_default_chatterenabled 打开
  3. 重启 / 热重载插件

也可以直接编辑配置文件:config/plugins/neo_default_chatter/config.toml

配置说明

配置文件:config/plugins/neo_default_chatter/config.toml,也可在 WebUI 的「插件配置」中图形化编辑。

[plugin] 插件设置

字段默认值说明
enabledfalse是否启用 NDFC(默认关闭,与 DFC 二选一)
native_multimodalfalse原生多模态模式:图片直接 base64 打包进 LLM payload,跳过 VLM 识别环节。需确保 actor 模型支持多模态输入
image_placeholder_template"[图片-{idx}]"文本侧图片占位符模板,{idx} 为从 1 开始的序号,与请求体里的 base64 图片一一对应
enable_stop_direct_message_wakefalse是否允许私聊 / @Bot 消息按概率提前解除 stop 冷却
stop_direct_message_wake_probability0.5stop 冷却期间收到私聊 / @Bot 消息时的提前唤醒概率(0.0~1.0)
reinforce_negative_behaviorstrue是否在每轮 user 提示词的 extra 板块中再次强调负面行为约束
default_stop_minutes5.0stop_conversation 工具未传入 minutes 时的默认冷却分钟数
enable_cooldowntrue是否启用回复后冷却。关闭可避免 LLM 设过长冷却导致无法回复
enable_action_suspendtrue是否启用纯 Action 回合的 SUSPEND 挂起机制。关闭后纯 Action 结果会像常规工具结果一样继续 follow-up
actor_task_name"actor"主会话 LLM 任务名,对应 config/model.toml 中的 task key

[plugin.theme_guide] 场景引导

字段说明
private私聊场景的额外提示词
group群聊场景的额外提示词

TIP

默认引导词非常详尽(强调「关系判断」「分寸感」「不打扰」等行为准则),可按机器人人设自行修改或留空。

[plugin.preprocess_probability_bypass] 预处理 · 概率直通

控制 neo_default_chatter:preprocess 事件中的「概率直通处理器」(ProbabilityBypassHandler,weight=100)。 当随机值低于放行概率时直接放行给主 chatter,跳过 SubAgent LLM 判定;未命中则交给 SubAgent 处理器。

字段默认值说明
enabledtrue是否启用概率直通处理器。关闭后所有消息都会落入 SubAgent 判定
base_bypass_probability0.1本地概率直通的基础放行概率(每轮 tick 的起始概率,0.0~1.0)
name_mention_bonus0.7强提及加成:未读消息精准 @机器人或回复机器人发言时叠加
alias_mention_bonus0.4弱提及加成:文本命中机器人全名或别名时叠加
unread_message_bonus0.05每条未读消息叠加的加成(累积值 = 未读数 × 该值)

概率公式

最终放行概率 = min(1.0, base + 强提及数 × name_mention_bonus + 弱提及数 × alias_mention_bonus + 未读数 × unread_message_bonus)

[plugin.preprocess_sub_agent] 预处理 · SubAgent 判定

控制 neo_default_chatter:preprocess 事件中的 SubAgent 处理器(SubAgentDecisionHandler,weight=50)。 当概率直通门未命中时,发起一次轻量 LLM 单轮判定,让模型决定本轮消息是否值得主 chatter 立即回复。

字段默认值说明
enabledtrue是否启用 SubAgent 轻量 LLM 判定。关闭后概率直通门未命中时也会直接放行给主 chatter
task_name"actor"判定请求使用的 LLM 任务名,对应 config/model.toml 中的 task key(建议指向轻量 / 低成本模型任务)
request_name"neo_default_chatter:preprocess:sub_agent_decision"LLM 请求名,用于统计与日志识别
max_context_messages8拼入判定 prompt 的最近历史消息条数上限。值越大越准但越耗 token;0 表示只看本轮未读消息
max_unread_messages10拼入判定 prompt 的本轮未读消息条数上限。超过会截断保留最近若干条
decision_temperature0.2判定请求的温度参数,越低判定越确定(建议保持较低温度以保证一致性)

配置示例

toml
[plugin]
enabled = true
native_multimodal = false
image_placeholder_template = "[图片-{idx}]"
enable_stop_direct_message_wake = false
stop_direct_message_wake_probability = 0.5
reinforce_negative_behaviors = true
default_stop_minutes = 5.0
enable_cooldown = true
enable_action_suspend = true
actor_task_name = "actor"

[plugin.theme_guide]
private = ""
group = ""

[plugin.preprocess_probability_bypass]
enabled = true
base_bypass_probability = 0.1
name_mention_bonus = 0.7
alias_mention_bonus = 0.4
unread_message_bonus = 0.05

[plugin.preprocess_sub_agent]
enabled = true
task_name = "actor"
request_name = "neo_default_chatter:preprocess:sub_agent_decision"
max_context_messages = 8
max_unread_messages = 10
decision_temperature = 0.2

与 DFC 的差异

维度DFC (default_chatter)NDFC (neo_default_chatter)
扩展模型适配器(聚合 Protocol)EventBus 事件订阅
第三方介入成本实现多接口的 dataclass写一个 BaseEventHandler 子类
默认启用truefalse
预处理策略程序化概率直通概率直通 + SubAgent LLM 判定
多模态走 VLM 识别可选原生多模态 / VLM
推荐场景简单场景、旧插件兼容新插件、需要深度定制会话流程

选哪个?

  • 已经在用 DFC 且没有强烈定制需求:继续用 DFC
  • 想用事件化扩展、原生多模态、SubAgent 判定:用 NDFC
  • 两者不能同时对同一个 stream 生效,切换前请关闭另一个

相关文档

版本

  • Plugin: 0.2.0
  • Manifest: plugins/neo_default_chatter/manifest.json
  • min_core_version: 1.2.0-rc.2
  • api_version: event_api, llm_api, send_api, prompt_api, stream_api, log_api, adapter_api, message_api, service_api(均为 1.0.0

贡献者

The avatar of contributor named as minecraft1024a minecraft1024a

页面历史

Released under the GPL-3.0 License.