修几个真实用户反馈的问题
readWebPage 死循环 → 一个字都答不出来
有用户问时效性问题(比如"现在比特币多少钱"),结果女仆疯狂调用 readWebPage 十几次、最后什么都没回。
测下来根因:web_search 本身是好的(单独用能给实时数据),但函数工具在场时 GLM 的选择行为出问题——它不用自动联网搜索,反而去调 readWebPage 瞎编 URL,抓取失败后反复换 URL 重试,步数耗尽,回复为空。
修了三层:
- 重复调用拦截:同一工具 + 同一参数一轮内重复 → 短路,逼模型停手直接回话
- readWebPage 单轮次数上限:挡"每次换个 URL"的循环(readEmail 这种需要多次的不受限)
- 收紧 readWebPage 说明:明确"只在你明确给了 URL 时用;时效性问题直接答,别瞎编 URL"
效果:最坏情况从"死循环 + 空回复"变成"最多试两次就停下来正常回答"。
莫名其妙的台词泄漏("主任…尼尼孩孩…major 冠军")
有用户触发了一句完全莫名其妙的话。这是 demo 模式的占位台词——demo 热键功能(Ctrl+Shift+D + 数字键)之前对所有用户都生效,而且默认台词里塞了开发时的占位内容。真实用户焦点不在输入框时按个 '1' 就触发了。
修了:整个 demo 热键功能 gate 在 demo 模式后面。真实用户不会再 seed 这些台词、也碰不到触发。(之前残留 demos.json 的用户也不受影响——非 demo 模式下直接忽略。)
GPT-SoVITS 本地语音的 .env 兜底(开发/录制向)
给本地跑 GPT-SoVITS 的用户加了个便利:选了 GPT-SoVITS 后端时,如果 Settings 里参考音频 / 参考文字字段是空的,自动从 .env 的 SOVITS_REF_AUDIO / SOVITS_REF_TEXT 等读。省得每次 demo 重来都要手填。普通用户没 .env,无感知;选别的引擎也完全照常。
邮件折叠在 demo 模式下不生效
之前加的"促销/通知邮件自动折叠"会把 demo 用的展示邮件也折叠掉。现在 demo / 假邮件模式下关闭折叠,所有邮件逐封展示;真实邮箱照常折叠。