features.toml:能力、感知出口与调试¶
真实文件是 config/features.toml,可在「月璃设置」编辑。
完整字段范围见功能模板。
功能开关与模型候选分别配置;启用前应满足相关依赖,保存后重启生效。
语音合成¶
[tts] 默认关闭,关闭时保持文字回复。
开启需要三项同时成立:tts 任务有候选、厂商连接正确、voice 有值。
voice 填服务接受的音色 ID,不能使用自定义显示名代替。
format 支持 mp3、wav、opus,speed 调整语速。
兼容接口使用对应语音模型;专用语音协议还需厂商 App ID 和访问凭据。
cluster 仅在专用语音客户端下生效,默认 volcano_tts。
保存成功后发一条短消息,确认得到音频和播放结果,文字成功不等于语音成功。
屏幕视觉、聊天图片与聊天视频¶
[vision] enabled 默认关闭,控制桌面截图交给视觉模型。
开启后按用户的屏幕提问采集,托盘还可显式启用持续屏幕采样。
仅配置视觉模型不会自动开始截图;无头服务器没有桌面外壳提供的截图输入。
capture_mode = "window" 只截前台窗口,
改成 screen 会截主屏,可能包含其他窗口内容。
fullscreen_silent 控制疑似全屏时保持静默,不是删除已经获得的历史描述。
修改采集形态后重启应用,再用已知窗口核对实际描述。
chat_image_enabled 是 QQ 聊天图片描述的独立开关,初始配置为开启。
仅需识别聊天图片时,可单独启用该项,无需开放桌面截图。
两个开关都依赖 vision 任务候选,候选必须声明 visual = true。
模型接口实际接受图片,也要通过真实图片调用确认。
chat_video_enabled 是 QQ 聊天视频理解的独立开关,初始配置为开启。
开启后私聊和群聊里的视频会交给全模态模型理解(画面和声音),
关闭后视频只显示为 [视频],不影响聊天。
chat_video_scope 控制看哪些视频:related 只看跟她有关的——私聊里的视频,
以及群里 @ 她、叫她名字、回复她的消息里的视频;有人这样喊她时,
她上下文里还没看过的视频会一起补看。all 则名单内的视频到了就看,
费用随视频数量增长。
chat_video_max_seconds 控制最长看多久(秒,10~1200,默认 180);
超过上限的视频不交给模型,她只知道有个多长的视频没看。
视频理解依赖 video 任务候选,候选必须声明 omni = true;
开关与范围、时长上限在 WebUI 改动后即生效,无需重启。
合并转发里的图片与视频默认只显示为 [图片]、[视频]。
「工具与 MCP」页的合并转发插件有两个独立开关,默认都关闭:
read_images 识别转发里的图片,read_videos 观看转发里的视频。
打开 read_images 后,收到合并转发就在后台识别其中所有层的图片,
不论她之后读不读;每张图片调用一次视觉模型,
大的转发会同时发出很多请求,可能被模型服务商限流。
打开 read_videos 后,转发里的视频按与普通视频相同的 chat_video_scope 范围
在收到时观看,范围外的等她读取时再看;每个视频调用一次全模态模型。
她读取转发时,还没识别完的会等它完成,收到时识别失败的会再试一次,
仍失败的保留 [图片]、[视频];每一项的等待时长由识图、看视频服务自己的超时决定。
两个开关分别还要求上面的 chat_image_enabled、chat_video_enabled 开启。
转发里的视频链接会过期且无法重取,读取得晚的视频按失败处理、保留 [视频]。
插件开关保存后重启后端生效。
已获得的情境可以出现在哪里¶
[perception] surfaces 管前台程序、停留时间、屏幕描述进入哪些会话。
它与「是否截图」独立:
默认只给桌面出口;空列表表示不在任何出口提供该情境。
加入 direct 后,也只对 owner.qq 对应的用户本人私聊开放。
私聊白名单中的其他联系人不会因此获得屏幕情境。
group 不属于合法出口,配置加载时会被拒绝。
关闭截图不等于停止前台程序信息采集;
仅收紧出口也不等于停止采集或撤回已经发送的消息。
需要停止全部桌面输入采集时,应关闭桌宠并退出外壳。
群聊人物事实另受 bot.toml 的 private_facts_in_group 控制。
向量混合召回¶
[vector] enabled 初始配置为开启,不需要额外安装依赖。
还要配置 embedding 候选、正维度,并确认同一任务的所有候选维度一致。
向量模型的本地维度声明不能改变远端输出,见模型配置。
启用后应检查启动自检中的向量缺口和索引状态,开关值不能单独作为验收依据。
更换模型时保留旧数据并核对重建要求,不直接复用不匹配的向量。
记忆反馈纠错¶
[memory_feedback] 总开关初始配置为开启,它允许纠错链路写入事实取代关系;关闭后整条链路零写入。
它观察已进入提示词的事实与后续用户反馈,不会把所有聊天都当作修正指令。
判定只读事实主人本人随后说的话:群聊里别人说「不是」不会算到这条事实头上,别人替主人纠正的情况也不处理。
window_hours 从事实进入提示词起算;check_interval_minutes 决定检查节奏。
batch_size 限制每轮数量,缩短间隔与扩大批次都会增加处理量。
auto_apply_threshold 是自动取代的置信度门槛,降低会放宽自动应用。
prefilter_enabled 先筛纠正信号,关闭会增加模型判定调用。
max_feedback_messages 限制单个观察项读取的用户消息数量。
标记、召回硬过滤、画像刷新、情节重建与重建期屏蔽相互配合。 硬过滤打开时,被纠正的事实不会出现在对话、主动消息和她主动回想的结果里, 它空出的位置由其他记忆补上。 仅保留标记却关闭硬过滤,不代表旧事实已经从召回中排除。 关闭画像或情节更新可能使派生内容保留旧信息。 一致性协调另有间隔和批量参数;修改后重启,并核对事实及派生内容的实际状态。
表情库管理在 bot.toml¶
表情包相关配置归 bot.toml 的 [emoji] 与 [emoji.cleanup],
不在 features 文件里新增同名段。模板见 bot.toml。
collect_enabled 管从聊天自动收录,关闭后不会因此禁止已有表情发送。
max_file_size_mb 限制收录文件大小,0 表示不按大小限制。
max_count 限制可发送条目容量,0 表示不限。
auto_evict 开启后按少用、久未使用的顺序淘汰超限条目;关闭只报告超限。
content_filtration 开启后,入库前调用视觉审查;
视觉模型不可用时会拒绝入库并告警,不是跳过审核继续收录。
当前还需开启至少一个视觉入口,才会装配供审查使用的视觉连接。
仅需审查聊天表情时,可开启 chat_image_enabled,无需同时开放桌面截图。
[emoji.cleanup] 处理没有数据库记录的磁盘孤儿文件。
默认每 6 小时检查、孤儿保留 30 天;保留设为 0 会在下次检查时清理。
容量淘汰和孤儿清理分别控制;保留磁盘现场时,应分别核对两项设置。
自动收录异常时,应在管理面板「表情包库」检查条目与标签,并区分收录配置与连接故障。
匿名统计¶
[telemetry] enabled 默认开启,用于统计有多少个安装、分别是什么版本。
上报内容固定三项:应用版本、系统类型、Python 版本。
不含聊天内容、不含任何身份信息,也不采集 IP。
不想要就关掉它:
上报发往自建统计服务 telemetry.yuelibot.org,失败时改用历史地址
yueli-telemetry.yuelibot.workers.dev 兜底。网络不通只是让这一次上报作废,
最多在本机日志留一条带异常类型的警告,不影响任何功能,也不会阻塞启动。
首次启动时控制台也会把这几句话念一遍。完整说明见 用户协议第四节; 上报服务的实现见 telemetry-server。
日志、调试与代理¶
[log] 默认 INFO,终端和文件等级可分别覆盖。
临时排查时可只调某一端为 DEBUG,避免同时放大全部输出。
level_style 改等级列样式,color_scope 改着色范围,不改变日志严重程度。
to_file 默认开启,写到数据目录下 logs/app_*.log.jsonl。
轮转大小、文件数量、保留天数共同决定日志留存。
失败请求快照与逐任务调用记录默认开启,分别在 logs/llm_request/、logs/prompt/。
密钥会隐去,但正文仍可能包含聊天和提示词;分享前检查内容。
事件数量和小时数控制事件账本留存,不等同于模型调用记录数量。
[advanced] https_proxy 是全局 HTTP(S) 代理,留空直连;不是浏览器访问面板的代理。
开发者命令通道由可选 [developer] enabled = true 显式开启。
[advanced] force_compatibility 默认关闭。打开后跳过插件的主程序版本区间校验与
MCP 协议版本区间校验,仅用于应急;每个被放行的插件或服务都会在控制台提示。
它不跳过 SDK 包版本检查,正常使用时应关闭并修正插件清单或服务协议版本。
模板未生成该段时默认关闭;普通日志排查不必开启命令通道。
保存并重启后,检查日志落点和保留策略确实改变。
更多边界见开发手册:可观测性。