Hacker News 中文摘要

RSS订阅

Talorys – A self-hosted personal AI agent on Cloudflare's free tier

你的私人 AI 代理,你的云。Talorys(Talorys)是一个免费开源的个人 AI 助手,完全运行在你自己的 Cloudflare(Cloudflare)账户中。它能和你聊天、记住重要事项、管理任务、笔记与项目,并按计划执行提醒和例行任务,且不需要 Talorys 开发者运营任何服务器、数据库或账户。一个人、一个 Cloudflare 账户、一条命令、一个私人 AI 代理,命令是 npx create-talorys@latest。

正文

你的个人 AI 助手。你自己的云。

Talorys 是一个免费、开源的个人 AI 助手,完全运行在你自己的 Cloudflare 账户中。它可以和你聊天,记住重要信息,管理任务、笔记和项目,并按计划运行提醒和日常操作——整个过程不需要 Talorys 开发者运维的任何服务器、数据库或账户。

一个人。一个 Cloudflare 账户。一条命令。一个个人 AI 助手。

npx create-talorys@latest

1. Talorys 是什么

  • 私人助手 — 支持流式回复、Markdown 以及工具活动指示的聊天。
  • 记忆 — 可查看、编辑和删除的持久个人事实与偏好。每轮对话只把最相关的记忆发送给模型。
  • 任务、笔记和项目 — 在界面中完整增删改查,也可通过聊天操作(例如“添加任务:明天 review 我的项目”)。
  • 自动化 — 一次性与周期性提醒、每日任务摘要和可选的 AI 例行程序,发送到应用内通知中心。它们基于 Durable Object alarms 运行,因此不需要保持在线。
  • 天生单用户 — 没有注册、没有账户、没有团队。安装器会设置所有者密码。
  • 无 AI 也能用 — 如果 Workers AI 不可用或免费额度用尽,任务、笔记、记忆和提醒仍可正常工作。

截图

图 1:聊天

图 2:任务

图 3:记忆(深色模式)

图 4:自动化

图 5:移动端

图 6:登录

2. 工作原理

浏览器通过 HTTPS 访问 Cloudflare Pages(React 应用与 /api Pages Function)。/api/* 请求由 Pages Function 通过 service binding(无公开 URL)转发给私有 Worker(Hono router),Worker 再通过 getAgentByName("personal-agent") 调用 TalorysAgent——一个基于 Cloudflare Agents SDK 的 Durable Object。该对象内置 SQLite,用于存储对话、记忆、任务、笔记、项目、自动化、会话、设置和用量;接入 Workers AI(模型 @cf/zai-org/glm-4.7-flash,支持流式与工具调用),并通过 Alarms 处理提醒与周期计划。

  • agent Worker 以 workers_dev: false 和 preview_urls: false 部署,没有公开 URL。
  • 认证和鉴权在 Worker 中完成,不在前端。
  • 聊天回复以 Server-Sent Events 端到端流式传输。

更多细节见 docs/architecture.md。

3. 使用的 Cloudflare 服务

| 服务 | 用途 | 免费计划 | | --- | --- | --- | | Cloudflare Pages | 前端 + Pages Function | 支持 | | Cloudflare Workers | 私有 API Worker | 支持 | | Durable Objects (SQLite) | 所有数据、调度 alarms | 支持 | | Workers AI | 聊天模型(@cf/zai-org/glm-4.7-flash) | 支持,每日额度 |

Talorys 不会启用 R2、D1、KV、Vectorize、AI Search、Workflows 或任何付费服务。

4. 部署

npx create-talorys@latest

安装器会执行以下操作:

  1. 检查 Node.js(20.18+),并使用其自带的 Wrangler CLI(会检测但不要求全局安装 wrangler/cf)。
  2. 验证你的 Cloudflare 登录状态,或在浏览器中打开 Cloudflare 授权页面。
  3. 让你选择账户(如果有多个)和 agent 名称。
  4. 要求输入所有者密码(隐藏输入,检查强度)。密码在本地用 PBKDF2-SHA256 哈希,仅作为 Cloudflare secret 存储。
  5. 生成 256 位会话密钥和唯一资源名(talorys-<id>-agent、talorys-<id>-web)。
  6. 部署私有 Worker(创建其 SQLite Durable Object),存储 secrets,创建并部署带 service binding 的 Pages 项目。
  7. 验证实时部署(前端、认证端点、未认证拒绝、存储健康状态),不运行任何 AI 推理。
  8. 打印 Cloudflare 返回的真实 https://….pages.dev URL。

它会写入一个 talorys/ 目录,包含 talorys.json(安装 ID、账户 ID、资源名、URL——不含密钥)以及可部署产物。请保留该目录以便后续更新。

安装被中断? 在原位置重新运行同一条命令。它会协调已存在的资源:不会创建重复资源,如果密码已配置就不会再次提示输入密码,并且绝不会删除任何数据。

非交互式安装:TALORYS_OWNER_PASSWORD=... npx create-talorys@latest --yes --account-id <id>(如果未登录,需设置 CLOUDFLARE_API_TOKEN)。

权限

浏览器登录使用 Wrangler 的标准 OAuth 流程——不需要 Global API Key。如果你改用 API token,它需要以下权限:

  • 账户 › Workers Scripts › Edit
  • 账户 › Cloudflare Pages › Edit
  • 账户 › Workers AI › Read
  • 账户 › Account Settings › Read
  • 用户 › User Details › Read(可选;用于显示你的邮箱)

详见 docs/deployment.md。

5. 访问

打开安装器打印的 URL,输入所有者密码,即可开始聊天。可以从任意数量的设备登录——它们都属于同一个所有者。可在 设置 → 安全 下管理会话。

忘记密码?在你的 talorys/ 目录中运行:

npx create-talorys@latest reset-password

这会替换密码 secret,并让所有设备退出登录。

6. 你的数据存储在哪里

所有数据都存储在你 Cloudflare 账户中一个由 SQLite 支持的 Durable Object(personal-agent)里。Talorys 没有任何遥测、分析、追踪或广告代码,也不会向开发者发送任何信息。

Cloudflare 会为提供服务而处理你的数据——包括对聊天消息和每次提示中包含的相关记忆运行 Workers AI 推理。请查阅 Cloudflare 的隐私政策和 Workers AI 条款。

安全模型与威胁缓解措施见 docs/security.md。

7. 哪些免费,哪些可能产生费用

Talorys 专为适配 Cloudflare Workers 免费计划而设计,绝不会自行启用付费功能。但它并非“无限免费”:

  • 免费计划有账户级配额(请求数、Durable Object 用量、每日 Workers AI Neuron 额度)。配额由 Cloudflare 设定,并可能调整。
  • 当 AI 额度用尽时,聊天会显示明确提示,并在每日重置后恢复。其他功能继续可用,数据不受影响。
  • 如果你的账户使用付费计划,超出包含额度的用量将由 Cloudflare 按你的计划计费。

内置护栏(可在 设置 → AI 中调整):最大输出 token、最大上下文 token(较早的历史会被总结)、每次请求的最大工具调用和推理步骤数、每日最大 AI 请求数,以及每日最大定时 AI 运行次数。简单提醒和任务摘要从不使用 AI。用量面板显示本地估算值,并提供指向 Cloudflare 仪表盘的链接以查看确切的 Neuron 用量。

8. 本地开发

要求:Node.js 20.18+。

git clone https://github.com/rociiu/talorys.git cd talorys npm install npm run dev

npm run dev 会启动 agent Worker(wrangler dev,端口 8787)、带 service binding 的 Pages Function 代理(wrangler pages dev,端口 8788)以及 Vite UI(http://localhost:5173),全部在一个终端中完成。它会在 apps/agent/.dev.vars 中创建一个本地密码(talorys-dev-password,可用 TALORYS_DEV_PASSWORD 覆盖),并使用确定性的模拟 AI provider,因此无需登录 Cloudflare。状态保存在 .wrangler/state。

其他脚本:npm run build、npm test、npm run test:e2e、npm run test:pack、npm run typecheck、npm run lint。详见 docs/development.md。

9. 备份数据

设置 → 隐私 → 下载备份 会生成 talorys-backup.json,包含对话、记忆、任务、笔记、项目、设置和自动化(不包含会话或凭证)。导入会验证文件并在一个事务中合并;重复导入同一备份是无害的。

10. 更新

在你的 talorys/ 目录中运行:

npx create-talorys@latest update

这会将最新的 Worker 和前端重新部署到相同的资源上。Durable Object namespace 绝不会重建(迁移仅是追加式),所有者密码和会话会保留,schema 迁移会在首次请求时自动以事务方式运行。另有 status 和 doctor 命令可用。

11. 故障排除

| 问题 | 解决方法 | | --- | --- | | 安装器中途停止 | 重新运行同一条命令;它会续传。 | | "did not pass its health checks yet" | 新的 pages.dev 站点可能需要几分钟。重新运行。 | | 权限错误 | 使用一个可编辑 Workers 和 Pages 的账户,或具有上述权限的 token。 | | 聊天提示 AI 额度已用尽 | 等待每日重置;或在 设置 → AI 中启用 Demo 模式。 | | 登录失败后被锁定 | 等待 15 分钟,或用 CLI 重置密码。 |

npx create-talorys@latest doctor 会自动检查所有项目。更多内容见 docs/troubleshooting.md。

仓库结构

  • apps/agent:私有 Worker,包含 Hono API、TalorysAgent、工具、SQLite 存储库
  • apps/web:React + Vite 应用,Pages Function(functions/api/[[path]].ts)
  • packages/shared:Zod schemas、类型、重复/DST 逻辑、密码哈希
  • packages/create-talorys:一键安装器(npm 包)
  • tests/e2e:Playwright UI 测试
  • tests/smoke:可选的 real-account 部署测试
  • docs/:架构、部署、开发、安全、故障排除文档

许可证

MIT

评论

多数人质疑 Talorys 的“自托管”说法名不副实,因为它把计算、存储、AI 推理等几乎所有环节都放在 Cloudflare 上,与传统“自己掌控主机”的定义直接冲突。也有人辩护称项目开源且可改为调用本地模型,或认为自托管定义已经放宽;与此同时,Cloudflare 免费额度计费混乱、Workers AI 交互缓慢等平台问题被集中吐槽,还有一条评论调侃这类项目的价值在 AI 时代被一句提示词取代。

认为完全依赖 Cloudflare 就不能算自托管

  • 自托管应当是自己掌控运行环境,而 Talorys 的计算、存储、AI 推理全部依赖 Cloudflare,用户只是把应用部署到别人的平台;有开发者用自己基于 Workers 的项目验证,由于 Durable Objects 和 KV 等绑定,根本无法离开 Cloudflare 运行,所以本质只是“部署到你自己的账户”而非自托管。(较多人) > 依赖 Cloudflare 处理所有环节,这就没有任何自托管可言。(@StrLght)

认为 Cloudflare 免费额度计费混乱且 Workers AI 交互太慢

  • 有用户提醒,若把 Cloudflare 的免费 AI 额度与付费 Workers 混用,原本以为在限额内的调用也可能因神经元计费产生意外账单,且客服支持被指直接忽略工单;同时 Workers AI 对交互式场景来说非常慢,只适合后台任务或评测。(较多人) > 小心 Cloudflare 的“免费”AI 额度,如果同时使用付费 Workers,本该被限额覆盖的调用也可能因神经元用量产生账单,而客服直接忽略了我的工单。(@hung)

认为项目开源且可改为本地模型运行,指责不算自托管过于苛刻

  • Talorys 虽然默认跑在 Cloudflare,但代码开源,只需把 AI 调用改指向本地模型服务器,其余部分就能通过 wrangler 在本地运行;因此有人认为“不是自托管”的抱怨很奇怪,尤其对自称喜欢黑客文化的人而言。(少数人) > 它是开源的,把 AI 调用改指到本地模型服务器只是个小改动,其余通过 wrangler 就能在本地跑起来。(@vlovich123)

认为“自托管”定义已放宽或只是强调不引入额外第三方

  • 有人觉得自托管的通行定义已经扩大,把自己的云账户作为边界也算一种形态;也有人认为作者只是措辞不当,想表达的是除了用户已有的 Cloudflare 账户外不需要任何第三方后端(例如项目方运营的服务),而不是承诺能在任意本地机器上运行。(少数人) > 这大概率只是措辞不当,想说明除了用户自己的 Cloudflare 账户外没有第三方要求。(@mellosouls)

认为项目只是给 AI 一个 Cloudflare 密钥后的一句话提示词

  • 有评论以玩笑方式表示,把 Cloudflare 密钥交给 Claude,所有部署和封装工作就变成一句提示词,暗示在强大模型面前这类个人 AI 代理项目的独特价值有限。(少数人) > 给 Claude 一个 Cloudflare 密钥就完事了,所有工作现在只是一句提示词。(@throwaway384638)

有价值的补充

  • Cloudflare Workers AI 免费层提供每天 10,000 个 neurons 的额度,但这个计量单位让开发者直呼看不懂,不清楚它到底对应什么实际用量。(@deanc)
  • Durable Objects 被称赞为把代码和数据锁在一起,空闲时冻结、请求到来时毫秒级恢复,是非常实用的能力,也是 Talorys 技术选型中的亮点。(@ttul)