跳到正文

离线与隐私 ​

iRoof.top 将你的聊天保存在你的电脑上。如果模型也在你的电脑上运行,就没有任何内容需要离开你的电脑。 离线模式把这一点变成应用强制执行的规则,而不只是一种习惯。

本地发生了什么 ​

步骤运行位置网络
导入、解析、风格档案你的电脑无
存储数据目录中的 JSON 文件和媒体无
搜索历史、分享链接 PIN、媒体库你的电脑无
描述照片、贴纸、GIF、视频媒体模型,仅当你点击用 AI 描述时每个项目一次请求,发往模型端点
语音转文字媒体模型,当你对语音消息点击用 AI 描述或录制语音时一次请求,发往模型端点
一次回复聊天模型,当你发送消息(或访客发送消息)时请求发往模型端点
压缩较长的历史聊天模型,作为回复的一部分,当历史超过预算时一次额外请求,发往模型端点

导入从不调用模型。第一次调用发生在你发送消息、点击描述或录制语音消息时。回复会把导出的历史(最多到历史预算)、风格档案和媒体描述发送给模型。所以模型运行在哪里,决定了聊天会去哪里:云端端点会收到,你电脑上的模型则不会。

完全离线运行 ​

  1. 安装 Ollama 或 LM Studio,或运行 llama.cpp 的 llama-server。
  2. 下载一个支持工具调用的聊天模型;如果希望照片和贴纸得到描述,还需要一个视觉模型。
  3. 在设置中选择端点和模型,然后打开离线:
服务器基础 URL
Ollamahttp://localhost:11434/v1
LM Studiohttp://localhost:1234/v1
llama.cpp llama-serverhttp://localhost:8081/v1(它的默认端口 8080 是 iRoof.top 的,请用 llama-server --port 8081 启动)
  1. 点击测试。它会发送一个很小的请求,并显示响应的模型和主机。你可以关闭网络,继续聊天。

桌面应用在设置中配置。它不读取你的 shell 或 .env 文件(参见桌面应用),但如果启动它时的环境中有 ROOFTOP_OFFLINE 和 OPENAI_*,它会遵循这些设置。服务器会读取环境(以及 .env):

sh
# --offline 等同于 ROOFTOP_OFFLINE=1
OPENAI_BASE_URL=http://localhost:11434/v1 OPENAI_MODEL=llama3.1 rooftop --offline
sh
docker run -p 8080:8080 -v rooftop-data:/data \
  --add-host=host.docker.internal:host-gateway \
  -e ROOFTOP_OFFLINE=1 \
  -e OPENAI_BASE_URL=http://host.docker.internal:11434/v1 -e OPENAI_MODEL=llama3.1 \
  ghcr.io/irooftop/rooftop

在 Docker 中,localhost 指的是容器本身,所以请使用 host.docker.internal(--add-host 选项仅在 Linux 上需要)。如果 Ollama 拒绝连接,请让它监听所有接口(OLLAMA_HOST=0.0.0.0)。

离线模式强制执行的内容 ​

离线模式
聊天、历史摘要、媒体描述、语音转文字除非端点是本地的,否则被拒绝
通过 HTTP 连接的 MCP 服务器除非是本地的,否则被拒绝;在设置中以错误形式显示
互联网分享(<名称>.iroof.top)关闭:中继客户端不启动,开关被锁定
Telegram 机器人,无论是自己的还是共享的不启动
通过 URL 发送 GIFAI 无法从非本地 URL 发送 GIF
Wi‑Fi 分享链接正常工作

被拒绝的请求会在建立任何连接之前失败,消息会说明原因:离线模式:https://openrouter.ai 不是本地端点。从本地端点重定向到其他主机的请求同样会被拒绝。模式开启时,侧边栏顶部会显示一个小的离线徽章。该设置会被保存。--offline / ROOFTOP_OFFLINE=1 无论设置如何都会开启该模式,而设置无法将其关闭。

“本地”的含义 ​

localhost、回环地址(127.0.0.0/8、::1)、专用网络地址(10/8、172.16/12、192.168/16、fc00::/7)、链路本地地址,以及名称 *.local 和 *.internal(例如 host.docker.internal)。你家庭网络中另一台电脑上的模型也算本地,因为它从不离开你的网络。名称是根据其写法判断的,不会被解析。

离线模式无法检查的内容 ​

  • stdio MCP 服务器是你电脑上的程序。iRoof.top 会启动它们,但看不到它们连接到什么,因此只添加你信任其会保持在本地的服务器。
  • 语音转文字使用聊天 API(一个 input_audio 部分),而不是 Whisper 的 /audio/transcriptions API。它需要一个在那里接受音频的本地服务器和模型。如果你的不接受,语音消息仍会被保存和发送,只是缺少文字。
  • 图像和语音生成只以 MCP 工具的形式存在。离线时,请为它们使用本地 MCP 服务器。
  • 与你分享的人在他们自己的浏览器中打开你的 Wi‑Fi 链接。离线模式管理的是这个应用,而不是他们的设备。

与朋友安全分享 ​

链接会发生什么
Wi‑Fi http://<你的 IP>:8737/s/<名称>从不离开你的本地网络
互联网 https://<名称>.iroof.top/s/<名称>应用打开一条通往中继的出站 WebSocket 连接,访客的 HTTP 请求和你应用的响应通过它转发

使用互联网链接时,你的导出、聊天和模型仍然留在你的电脑上,而中继不存储其中任何一项。中继只保存账户记录:你的名称、你的密钥的哈希值,以及它最后一次看到你的时间。

请清楚这不能给你带来什么。中继会终结 TLS,因此和任何反向代理一样,从技术上讲它能看到经过它的流量:访客输入的内容、角色的回复,以及链接允许访客阅读的历史(访客可以阅读导出内容,默认是什么都不能)。它只转发访客页面(/s/…、/api/s/…、页面资源),并在两个方向上丢弃 Cookie;你的所有者界面和设置永远无法通过它访问。如果这样的信任仍然太多,请使用 Wi‑Fi 链接,或运行你自己的中继服务器。 关于分享链接的更多信息。

在离线模式下,iroof.top 中继是关闭的。Wi‑Fi 链接仍然可用。

Telegram 机器人 ​

从 Telegram 回复会向你的群组发布:

  • 新的访客消息(名称、链接名称、文字,或带有描述或转写的媒体标签,以及他们所回复消息的简短预览)和 AI 的回复;
  • 从不发布导出的历史。旧消息不会被发送。

机器人没有端到端加密:文字以明文形式通过 Telegram。使用共享机器人时,文字还会经过中继,中继只保存哪个群组属于哪个账户。自己的机器人直接与 Telegram 通信,不经过中继。离线模式会关闭这两者。

你的数据去向 ​

数据去向
导出、聊天、设置、API 密钥你电脑上的数据目录
导入和风格档案不发送到任何地方
历史、风格档案、你的消息你选择的模型端点,每次回复时
照片和语音媒体模型端点,在描述时或你录制语音消息时
Wi‑Fi 链接上的访客消息你的电脑和你的模型端点
互联网链接上的访客消息中继(传输中)、你的电脑、你的模型端点
通过 Telegram 的访客消息另外还有 Telegram,以及共享机器人的中继
离线模式仅本地模型端点,仅 Wi‑Fi 链接,没有 Telegram

基于 MIT 许可证发布。