跳转至

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 管前台程序、停留时间、屏幕描述进入哪些会话。 它与「是否截图」独立:

[perception]
surfaces = ["desktop"]

默认只给桌面出口;空列表表示不在任何出口提供该情境。 加入 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]
enabled = false    # 关掉后不再有任何上报

上报发往自建统计服务 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 包版本检查,正常使用时应关闭并修正插件清单或服务协议版本。 模板未生成该段时默认关闭;普通日志排查不必开启命令通道。 保存并重启后,检查日志落点和保留策略确实改变。 更多边界见开发手册:可观测性。