在公开体验站上玩
这一页写给在公开体验站上玩 Covel 的玩家。体验站是有人部署在云服务器上、谁都能打开的 Covel 网页版;Covel 项目自己的体验站在 demo.covel.cc。读完你会知道:存档和 API 密钥存在哪里,服务器能看到什么,体验站会丢掉什么,以及怎样核对这些说法。
用桌面版,或者自己部署给自己用的网页版时,数据的去向不同,见数据、备份与升级。
怎样认出体验站
体验站的页面顶部有一条提示:“这是 Covel 的公开体验站”。提示里有两个链接:“数据和密钥怎样处理”指向这一页;另一个指向这个站点正在运行的源代码版本(运营者配置了源码地址时才有)。
关掉提示后,它在这个浏览器里不再出现。设置 → 模型 → 服务商与模型 里,每个服务商填写密钥的地方仍然有指向这一页的链接。
你的数据存在哪里
体验站上,你的存档以你的浏览器为准。服务器只在内存里放运行回合需要的临时副本,不写数据库,也不写磁盘。
| 数据 | 存在哪里 | 什么时候会丢 |
|---|---|---|
| 存档:游戏状态、对话、角色、插件数据、快照 | 你的浏览器(IndexedDB) | 清除这个网站的浏览器数据时。换浏览器、换设备、用无痕窗口也看不到它 |
| 你创建或生成的世界 | 你的浏览器(IndexedDB) | 同上 |
| API 密钥和设置 | 你的浏览器(localStorage) | 同上 |
| 运行回合用的存档副本 | 服务器内存 | 服务器重启时。下一次行动会重新上传,存档不受影响 |
| 生成的图片等媒体 | 服务器内存;存档里只记引用 | 服务器重启时。浏览器可能还留着显示用的缓存,但不保证 |
| 长期记忆的检索索引 | 服务器内存 | 服务器重启时。下一次行动时重新建立,会再次调用 embedding 模型 |
| 还没跑完的后台任务的进度 | 服务器内存 | 服务器在任务结束前重启时。任务结束后浏览器会再保存一次 |
服务器会重启:每次部署新版本都会重启。部署在 Render 免费实例上的体验站,15 分钟没人访问就休眠,休眠也等于重启,之后第一次打开要等一分钟左右。
一个会话的存档最多 64 MiB。快到上限时页面会提醒你,到时在一个新会话里把故事接下去。
体验站目前不能导出或导入完整存档。不要在这里保存重要进度;想长期玩,请用桌面版。
API 密钥怎样被使用
- 你在设置里填写的密钥,明文保存在这个浏览器的本地存储里。
- 需要调用模型时,浏览器把这次请求用得到的服务商的密钥放在请求头里,经 HTTPS 发给服务器。页面刚打开、还没读到服务器的模型配置时,会发送全部已保存的密钥。
- 服务器用密钥调用你配置的模型服务商,只在这次请求里使用它。
- 回合结束后还要继续运行的后台任务,会在服务器内存里暂存这次请求的模型配置,其中包括密钥。它只给这个会话的这个任务用:任务开始、会话被删除,或者过了 5 分钟,就会丢弃。
- 服务器不会把密钥写进磁盘、数据库、存档或日志。请求日志只记录请求的方法、路径和状态码。
谁能拿到你的密钥
| 谁 | 能不能拿到 | 原因 |
|---|---|---|
| 其他玩家 | 不能 | 密钥只属于发出它的那个请求,服务器没有共享的密钥表。别人的会话也打不开:访问一个会话要用创建它时拿到的令牌 |
| 网络上的其他人 | 不能 | 体验站走 HTTPS |
| 插件作者 | 不能 | 社区插件的服务端代码要运维令牌才能启用;按项目自带的 Render 配置部署时,只有随源代码发布的内置插件。插件也不能自己决定把模型请求发往哪个地址 |
| 其他网站 | 不能 | 浏览器的同源规则隔开了它们。页面带内容安全策略(CSP),插件的网页运行在隔离的框架里,读不到本地存储 |
| 体验站的运营者 | 能 | 密钥必须经过服务器才能调用模型。运营者改动部署就能记录它,你没法从外面确认 |
| 托管平台(例如 Render) | 理论上能 | HTTPS 在平台的代理上解密 |
| 能用你这台电脑的人 | 能 | 密钥以明文存在浏览器里 |
我们已经尽力保护你的数据,但密钥毕竟要经过服务器。所以请你:
- 专门为体验创建一个临时密钥,设好消费上限,不要用主力密钥。体验站的提示、引导里的模型一步和每个服务商填写密钥的地方都会提醒这一点。
- 体验结束后,到服务商后台删除或轮换这个密钥。只在设置里删掉它,只是让这个浏览器不再保存它,密钥本身仍然有效。
- 在公共电脑上玩完,清除这个网站的浏览器数据。
用自己电脑或局域网里的模型
体验站的服务器访问不到你的电脑和局域网。所以模型地址在你的电脑或局域网上时(Ollama、LM Studio、Magpie 这类本地模型服务),这些请求由你的浏览器转发,叫作本地模型中继:服务器把请求交给你的浏览器,浏览器请求你的模型服务,再把回答传回服务器。这里的 127.0.0.1 指打开网页的玩家电脑,不是 Render 服务器。公网上的模型地址不经过浏览器,仍由服务器直接请求。
怎样设置
- 在 设置 → 模型 → 服务商与模型 里添加服务商,地址填你电脑上的地址,例如
http://127.0.0.1:3425/v1或http://localhost:11434/v1;局域网里的服务要用 HTTPS 地址,例如https://192.168.1.20/v1。地址下方会提示这个地址由浏览器转发。 - 让模型服务允许体验站跨域访问。浏览器直接请求你的模型服务,模型服务必须在回答里允许体验站的地址这个来源(CORS),否则浏览器会拦下回答;在 demo.covel.cc 上就是
https://demo.covel.cc,地址下方的提示也会写出当前体验站的地址。例如 Ollama:把环境变量OLLAMA_ORIGINS设为这个地址,再重启 Ollama。其他服务在各自的设置里找 CORS 或“允许的来源”。 - 正常开始游戏,游玩时保持页面打开。浏览器第一次访问本机或局域网时,可能会询问是否允许这个网站访问,选允许。
Magpie
Magpie 的本机命令行请求能成功,不代表体验站的网页也能连接。网页请求需要另外允许来源,并使用网关密钥:
- 在 Magpie 的 设置 → 网络与共享 → 网页 中,把体验站的来源加入“允许调用 magpie 的网页”。官方体验站填
https://demo.covel.cc;自己部署时填实际打开的站点来源(协议、主机和端口),不要带/session等页面路径。 - 在 Magpie 的“网关”页准备一个测试用网关密钥,填入 Covel 对应服务商的 API 密钥。接入示例里的
magpie是本机回环请求可随意填写的值,不能代替网页请求要求的真实网关密钥。密钥仍会经过体验站服务器,测试结束后撤销它,详见API 密钥怎样被使用。 - Covel 中的 API 地址填
http://127.0.0.1:3425/v1(端口以你的 Magpie 为准),协议和模型 ID 按 Magpie 的接入页填写。例如使用 Responses 接口时,选择 OpenAI Responses,保留codex/gpt-6-luna这样的完整模型 ID。 - 在 Covel 中测试连接。浏览器询问本地网络访问权限时,允许当前体验站访问。成功后再开始游戏,并保持页面打开。
有些版本在关闭“局域网共享”时隐藏“网关密钥”区域,此时“接入”区仍只显示 magpie 占位值。可以使用 Magpie 的官方命令行管理网关密钥。网页中继连接本机 127.0.0.1 本身不要求打开“局域网共享”或“在浏览器中打开 magpie”。
来源没有获准时,Magpie 会拒绝跨域预检,返回 403 和 magpie doesn't answer the web page …;Covel 可能只显示 your browser could not reach …。先检查 Magpie 的网页来源设置和浏览器权限。预检已经成功、模型请求却返回 401,并提示 a web page or browser extension calls magpie with a gateway key 时,请检查真实网关密钥;仅允许网页来源不会让 magpie 占位值成为有效密钥。
桌面版由本机后端直接连接 Magpie,不经过网页中继,因此不需要为体验站配置网页来源;密钥是否必填仍以 Magpie 的本机访问设置为准。
限制
- 局域网里的普通 http 地址(例如
http://192.168.1.20:8000)用不了:浏览器不允许 HTTPS 页面访问它们。给它配上 HTTPS,或者在这台电脑上用127.0.0.1转发它。 - 关掉页面或网络断开后,转发就停了,还没跑完的后台任务会失败。页面重新连上后,下一次行动照常进行。
- 本机地址请写
127.0.0.1或localhost,不要写[::1]。 - 需要上传文件的请求(例如图片编辑)不能转发。
- 同一份请求和回答仍然经过体验站的服务器,和使用公网模型时一样。
浏览器替服务器做了什么
- 浏览器只请求你在设置里添加的那些地址:同一个协议、主机和端口,并且在同一个路径之下。服务器要求的其他地址,一律拒绝,不会发出请求。
- 只用 GET 和 POST,不带 cookie,不跟随重定向。
- 在这个范围内,体验站可以发它需要的请求,就像拿到 API 密钥的服务器能调用那家服务商的接口一样。所以地址请写到具体的 API 路径(例如
http://localhost:11434/v1),不要只写到端口:这样模型服务的管理接口(例如 Ollama 下载或删除模型的接口)不在转发范围内。 - 转发用的通道号只保存在这个页面里,只随这个页面自己的请求发给服务器。别的访客拿不到它,也就不能借你的浏览器访问你的电脑。
规则的完整说明见安全边界。
怎样核对
- Covel 的代码完全开源。体验站提示里的源代码链接指向它正在运行的那个提交。版本号由部署平台提供(Render 的
RENDER_GIT_COMMIT)。 - 按项目自带的 Render 配置部署时,Render 从公开仓库自动构建,每次推送都会重新部署。步骤见在 Render 上部署体验站。
- 版本号说明体验站声称在运行哪份代码。它不能证明部署没有被改动,你仍然要信任运营者。
- 上面这些规则在代码里的依据:安全边界和存储。
遇到问题时
| 现象 | 原因和处理 |
|---|---|
| 第一次打开要等一分钟左右 | 免费实例休眠后正在启动。等它启动完再刷新 |
| 之前生成的图片不见了 | 服务器重启过,图片只存在服务器内存里。存档本身没有丢 |
| 换了浏览器或设备,存档不见了 | 存档只在原来那个浏览器里 |
| 提示存档快到浏览器的大小上限 | 一个会话的存档最多 64 MiB。在新会话里接着玩 |
| 页面顶部没有体验站提示 | 你关掉过它,或者这不是体验站。设置 → 模型 → 服务商与模型 里填写密钥的地方仍有这一页的链接 |
| 某个管理操作要求运维令牌 | 体验站把共享的世界目录、社区插件、诊断信息和服务端设置留给运营者 |
| 本地模型提示 “no relay was connected for this request” | 页面刚打开还没连上,或者网络断过。保持页面打开,等几秒再试 |
| 本地模型提示 “your browser could not reach …” | 模型服务没有启动,或者没有允许体验站跨域(见怎样设置第 2 步),或者浏览器没被允许访问本机或局域网 |
| 本地模型提示 “browsers do not let an HTTPS page reach a plain-http address …” | 局域网地址用的是普通 http,见限制 |
| 本地模型提示 “this browser relays only to the model endpoints you added …” | 服务器要求的地址不在你添加的地址范围内。检查设置里的地址是否写对 |