“Echo,一个安静思考的地方。”作者给这个小聊天机器人的定位很克制——它不提供心理治疗,也不告诉你人生该怎么过。它只做一件事:帮你把脑子里的想法理出个头绪。
![]()
它完全跑在浏览器里,用的是 Gemma 3 1B,所以你写下的任何内容都不会被上传。没有后端,不用注册账号,不用粘贴 API Key,也不用把一个私密的念头交给某台服务器。
第一次打开页面时,模型需要下载一次,约 859 MB,加上约 27 MB 的应用文件;之后它就能离线工作。前提是浏览器支持 WebGPU。
四个模式,代码管流程
Echo 有四种模式,每一种都由应用代码驱动流程——固定文案、固定问题、固定限制,模型只负责写一小段文字。
- 倾诉(Vent):你写,Echo 听,然后复述它听到的内容。不给建议。
- 反思(Reflect):四个固定问题,之后给出一个关于“冲动与底层情绪”的假设。它从不给判决。
- 破冰(Unblock):你描述一个任务和卡住你的东西,Echo 只建议一个 2 到 5 分钟的小步骤。你还可以要求“再小一点”,最多三次。
- 未寄出的信(Unsent Letter):你发泄一通,Echo 把它改写成一封平静的信。它从不建议你寄出去,什么也不会保存。
这个设计选择值得多说一句:1B 模型很小,所以作者没让它来主导对话。流程由代码控制,模型每一步只写一样东西——一段复述、一个假设、一个微步骤,或者一封信。另外,Gemma 没有 system 角色,所以指令被放进了用户回合里。
安全与部署的细节
每次调用模型之前,所有模式都会先跑一遍英文关键词检查。一旦命中,Echo 会显示一条固定消息,附上 findahelpline.com 的链接,而不是生成任何内容。这个检查刻意做得很宽,所以可能出现误报,而且它只覆盖英文和自伤相关的语言。
部署上有个小坑:GitHub Pages 从 /echo/ 路径提供应用,service worker 必须使用同样的基础路径。作者加了一个 CI 步骤,如果 worker 和预缓存列表对不上,构建就会失败。
测试方面,作者在浏览器的网络面板里核对了隐私——只出现自己的站点和 huggingface.co,聊天过程中没有别的请求;还从新标签页测试了离线模式,并在 Chrome、Firefox 和 Safari 上跑过 Echo,机器是一台 MacBook 和一台配 RTX 3060 的台式机。
技术栈是:Gemma 3 1B instruct 的 ONNX 转换版本(q4),通过 Transformers.js v4 在 Web Worker 内的 WebGPU 上运行;应用用 Nuxt 4 做成静态单页,配 Pinia、Tailwind CSS v4 和一个 PWA service worker,由 GitHub Actions 部署到 GitHub Pages。代码采用 AGPL-3.0 许可。
“开放”这个词得说准
如果走闭源 API,一个人写下的每一次反思都会传到别人的服务器上。一个能塞进浏览器标签页的开源权重模型,让另一种承诺成为可能:“你写的东西不会被上传”,而且你可以自己去验证。
开放代码也是同样的道理:隐私声明是你能在仓库里读到的东西,而不是你必须去信任的东西。作者对“开放”一词也很谨慎——代码是 AGPL,但 Gemma 遵循谷歌自己的使用条款和禁用政策,所以他称其为开放权重,而不是开源。
已知的局限也写进了 README:1B 模型可能给出泛泛而谈甚至错误的回答;危机词表只覆盖英文;在反思和破冰模式里点“停止”,会丢掉你上一个回答。
这个项目是为 Hacktoberfest 2026 第三周“构建你自己的聊天机器人”而做的。作者也说明,他是和 Claude 结对编程完成的——Claude 写代码、解释代码,运行和测试则全部由他自己来做。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.