把一句话故意讲歪:胡言乱语生成器的 Toy 化改造记录

我最初做的,只是一个输入句子、输出荒诞结果的小工具。后来它逐渐变成了一件更完整的产品:有自己的生成规则、历史记录、排行榜、成就系统,也有一套针对生成质量和安全性的完整防线。 这次改造的核心,是让它真正适合运行在 Bilibili Toy 里。 从网页应用到 Toy 项目早期依赖 Cloudflare 页面和 Worker,模型调用集中在项目方服务端。这样开发方便,但模型额度和运行成本都会持续消耗项目方资源。 后来我们把页面独立封装成 Toy 静态包,保留了原有的视觉风格和 README 中的 Logo、Hero 设计,同时把生成规则、质量判断、安全逻辑拆分成共享模块。 Toy 目前包含: 主页

我最初做的,只是一个输入句子、输出荒诞结果的小工具。后来它逐渐变成了一件更完整的产品:有自己的生成规则、历史记录、排行榜、成就系统,也有一套针对生成质量和安全性的完整防线。

这次改造的核心,是让它真正适合运行在 Bilibili Toy 里。

从网页应用到 Toy

项目早期依赖 Cloudflare 页面和 Worker,模型调用集中在项目方服务端。这样开发方便,但模型额度和运行成本都会持续消耗项目方资源。

后来我们把页面独立封装成 Toy 静态包,保留了原有的视觉风格和 README 中的 Logo、Hero 设计,同时把生成规则、质量判断、安全逻辑拆分成共享模块。

Toy 目前包含:

  • 主页输入和生成
  • 翻译、回答、自由三种模式
  • 精辟、中等、正常三档长度
  • 结果复制与重新生成
  • 最多 20 条历史记录
  • 胡言乱语榜
  • 总榜、月榜、周榜、日榜
  • 胡言乱语值与六级成就勋章
  • 自动、亮色、暗色主题
  • 游戏说明和更新日志

模式和长度被放回主界面,用户可以直接调整。原本意义不大的“精神状态”选项被移除,界面也统一使用“生成”这一表达,不再出现多余的评价式描述。

胡言乱语值成为产品主线

我们最终把排行榜分数和用户的胡言乱语值统一起来。

用户每成功生成一次结果,就会增加一点胡言乱语值。这个数值会同步到 Toy KV,并用于排行榜和成就系统。

六级成就分别是:

  • 初次失真:1 点
  • 逻辑松动:5 点
  • 语义漂移:20 点
  • 语言实验员:50 点
  • 现实改写者:100 点
  • 终身胡言:300 点

历史记录只保存最近 20 条,登录后通过 Toy 云存储同步。排行榜只记录数字分数,不上传用户的输入内容和生成文本。

这样一来,用户每次生成都拥有了明确的反馈:结果可以恢复,累计值会增长,成就会解锁,排行榜也会留下记录。

生成目标不是随机,而是有约束地荒诞

胡言乱语生成器并不追求随机拼接词语。它需要同时满足几个条件:

  • 和用户输入保持明显关联
  • 保留原句中的关键事实、态度和转折
  • 只制造一个核心偏差
  • 结果本身要通顺、具体、能被理解
  • 避免万能套话、空泛解释和生硬的词语碰撞
  • 对问题型输入优先给出真正回应
  • 对敏感和真实伤害内容执行安全兜底

生成规则统一维护在 Skill 和 shared/generate/ 模块中。Toy 端会先请求多个候选结果,再通过本地清洗、相关性判断、重复检测和质量评分筛选;必要时再让模型进行一次语义裁判或定向重写。

网络热梗库也没有采用简单的关键词替换。每个热梗都带有适用语境、生效时间、禁用场景和复核信息。系统只在输入确实相关时注入热梗,面对严肃话题、伤害话题和无关输入时自动关闭。

输出层增加了安全防线

模型输出不会直接展示给用户。

结果会经过多层检查:

  1. 清理前缀、引号、Markdown 残留和多余换行。
  2. 检查长度、模式、相关性和句子完整性。
  3. 检查是否复述输入、泄露提示词或生成无意义字符。
  4. 拦截攻击、歧视、色情、违法、自残和真实伤害内容。
  5. 对模型失败、超时和不合格结果提供本地安全兜底。

这些防线运行在 Toy 包内部,不依赖项目方模型服务。

最重要的变化:用户自己选择模型

为了停止消耗项目方的模型额度,最终版本改成了纯前端直连。

用户打开 Toy 后,会看到一次“生成方式已更新”的公告,明确说明:

  • 现在需要填写自己的 API Key
  • 项目方不再提供默认模型额度
  • 生成请求不经过项目方 Worker
  • API Key 只保存在当前标签页或当前浏览器

当前支持:

  • DeepSeek
  • OpenAI
  • OpenRouter

DeepSeek 使用官方 Chat Completions 接口,并关闭思考模式;OpenAI 和 OpenRouter 使用兼容的聊天接口。DeepSeek APIOpenAI APIOpenRouter API

Ollama Cloud 在实测中无法通过 B站页面来源的浏览器 CORS 预检,因此没有放进纯前端版本。它仍然可以通过服务端中转使用,但这已经不符合当前“完全不接后端”的目标。

这个架构的代价也很明确:API Key 会存在用户自己的浏览器里,模型费用由用户自己的账户承担。项目方不再接触 Key,也不会把它写入 Toy KV、历史记录、排行榜或 Git 仓库。

验证与发布

这次改造完成了完整的本地验证:

  • 111 项自动化测试全部通过
  • Toy 包体预检通过
  • 检查了桌面端和移动端布局
  • 检查了首次打开公告、模型设置和错误提示
  • 检查了生成规则不会调用 api.freakz2z.com
  • 检查了构建产物中没有项目方 API Key 或 Cloudflare Worker 地址
  • 对 DeepSeek、OpenAI、OpenRouter 进行了 B站来源 CORS 预检

新版 Toy 已提交审核。审核通过后,用户打开 Toy 就会看到更新公告,并可以直接配置自己的模型服务。

结语

胡言乱语生成器最终形成的,不只是一个“输入一句话、返回一句怪话”的页面。

它现在拥有了比较完整的产品闭环:

用户输入一句话,选择生成方式,得到结果;结果进入历史记录,生成次数转化为胡言乱语值,数值推进成就和排行榜;模型输出经过质量筛选和安全拦截,模型费用则由用户自己掌握。

这次 Toy 化改造,也让产品的边界变得更清楚:页面归 Toy,数据归用户,模型由用户选择,生成规则由项目维护。