BYOK + Trial 混合定价:为什么我们让自带 key 的用户永远免费
BYOK + Trial 混合定价:为什么我们让自带 key 的用户永远免费
结论先行: 2026 年 AI 应用主流有两种定价——Cursor/Perplexity 的纯订阅,Zed/Continue 的纯 BYOK。前者把 API 成本算进订阅里卡流量,后者把成本全部推给用户。我们在 Gemini Desktop 上跑了第三种路线:Beta 期全免,GA 后一次性买断 + 7 天 trial,BYOK 用户永久免费。三个月数据显示:BYOK 转化率 31%,一次性买断转化率 12%,远高于订阅产品的平均水平。
一句话总结: 用户自己出 key 的时候我们不提供云算力,理论上也就没有成本;拦着不让用既反商业逻辑也反伦理。Trial 是给“不想自己折腾 API”的人准备的缓冲期,不是减配功能。
主流 AI app 的两条定价路线
先把 2026 年我能想到的典型 AI 工具排一下:
| 产品 | 定价路线 | 月费 | BYOK 选项 |
|---|---|---|---|
| Cursor | 纯订阅(含 API 算力) | $20 / $40 | 有,但减配(只能用自己 key 的部分模型) |
| Perplexity Pro | 纯订阅(含搜索 + 模型算力) | $20 | 无 |
| Claude Code | 纯订阅(Anthropic 账号绑定) | $100+ | 无 |
| Zed | 纯 BYOK(编辑器本身免费) | $0 | 必须 |
| Continue.dev | 纯 BYOK(开源) | $0 | 必须 |
| Warp | 订阅 + BYOK 混合 | $15 + BYOK | 有 |
纯订阅路线的问题:用户付的是 API 成本 + 产品毛利,但 API 价格一年降一半,订阅价格不会降。纯 BYOK 路线的问题:面向普通用户的门槛太高,让非技术用户去 Google AI Studio 申请 key 基本等于放弃他们。
我们想做的是一款桌面 AI 工具,同时接住“技术型重度用户”和“付费省事用户”。于是走了第三条路。
为什么选 “Beta 全免 + GA 一次性 + BYOK 永久免费”
桌面端 Gemini Desktop 的定价结构是:
- Beta 期间全免费 —— 所有功能开放,无 paywall,拿数据 + 磨产品
- GA 之后切换到一次性买断 $49 —— 一次付费、永久激活,不按月订阅
- Trial 7 天免费 —— GA 之后的新用户有 7 天完整体验
- BYOK 永久免费 —— 任何时候只要用户配置了自己的 Gemini API key,paywall 自动消失
这四条不是“营销组合”,而是各自回答一个具体问题:
- Beta 全免:不知道产品最终形态时,盲目收费是浪费用户信任
- 一次性 $49:桌面端用户反感订阅,一次性买断符合桌面软件的心智锚点(参考 Sketch、Things、Cleanshot)
- 7 天 trial:不想折腾 API 的用户也能完整体验再决定
- BYOK 永久免费:下一节会专门讲
技术实现:Zustand persist + GA_LAUNCH_UNIX 单常量
定价逻辑最容易翻车的地方是“时间点判断”——Beta 期 vs GA 后、Trial 是否启动、还剩几天——每一条都依赖“服务端还是客户端当前时间”的判断。
我们的做法是把 GA 时间点写死成一个常量,所有判断都基于客户端本地时间 + 这个常量:
// shared/pricing.ts
export const GA_LAUNCH_UNIX = 1_735_689_600_000 // 2026-01-01 UTC
export const TRIAL_DURATION_MS = 7 * 24 * 60 * 60 * 1000
export function isBetaPeriod(): boolean {
return Date.now() < GA_LAUNCH_UNIX
}
export function getTrialState(startedAt: number | null): TrialState {
if (isBetaPeriod()) return { kind: 'beta' }
if (!startedAt) return { kind: 'not-started' }
const elapsed = Date.now() - startedAt
return elapsed < TRIAL_DURATION_MS
? { kind: 'active', remaining: TRIAL_DURATION_MS - elapsed }
: { kind: 'expired' }
}
Zustand 里用 persist 做 localStorage 持久化,再加一层冗余写入:
export const usePricingStore = create<PricingState>()(
persist(
(set, get) => ({
trialStartedAt: null,
licenseKey: null,
byokApiKey: null,
ensureTrialStarted: () => {
const { trialStartedAt } = get()
if (trialStartedAt || isBetaPeriod()) return
const now = Date.now()
set({ trialStartedAt: now })
localStorage.setItem('gd_trial_at', String(now)) // 冗余
},
}),
{ name: 'gemini-desktop-pricing' }
)
)
两个关键点:ensureTrialStarted 是幂等的(已启动就不重置),localStorage 冗余防止 Zustand persist 版本迁移时丢数据。
7 天 trial clock 启动逻辑
Trial 什么时候开始?我们试过两种方案:
- 方案 A:首次启动即 Trial —— Beta 期安装的用户一打开就开始倒计时 → 问题:Beta 还没结束 trial 已经过期
- 方案 B:只在 GA 之后启动 ——
ensureTrialStarted在isBetaPeriod()时直接返回
方案 B 是正确的。GA 切换那一刻,所有现有 Beta 用户的 trial 才开始计时,体验上是“给老用户 7 天过渡期”。
ensureTrialStarted 在三个地方调用:应用启动、打开 paywall、调用任何消耗算力的功能。幂等性保证多次调用等价于一次。
BYOK 跳过 paywall 的道德判断
纯订阅派的人会说:“BYOK 用户绕过 paywall 是免费吃 UI 层价值,应该收’软件许可费’。”
Cursor 就是这个思路——你自带 key 也只能用阉割版的功能集合。
我们没这么做,理由有三条:
- 商业逻辑:用户的 key 意味着算力 API 成本由用户自己承担,我们没有任何可变成本。既然没有成本,收费的依据就只剩“软件许可”。但软件许可这件事在一次性买断($49)里已经收过了。
- 伦理判断:用户愿意出 key 通常意味着他是技术用户,对 API 价格敏感、自己做成本控制。在这类用户面前立“你用自己的 key 我还要收你软件费”的墙,本质是双重收费。
- 获客效率:BYOK 用户是最强的口碑放大器——他们把产品分享给同事的时候,往往附带一句“用自己的 Gemini key 就能免费用”。这句话的转化效率比任何广告都高。
从数据看,BYOK 用户的 30 天留存是一次性付费用户的 1.4 倍。这群人不是流失,而是活跃用户的核心。
License key UX:LemonSqueezy receipt → paste → activate
一次性买断用的是 LemonSqueezy。用户付款流程是:
- Paywall 点击 “Buy $49” → 跳转 LemonSqueezy checkout
- 付款完成 → LemonSqueezy 发送 receipt 邮件,内含 license key(一串 UUID)
- 用户回到 Gemini Desktop → 设置面板 → “I have a license key” → 粘贴 → 激活
MVP 版本完全没有服务端校验:客户端直接检查 key 格式是否匹配 UUID 正则,匹配就 unlock。听起来粗糙,但对一次性买断 + 桌面端来说已经足够——破解的成本远高于 $49。
这套 UX 刻意避开了“登录账号”这个动作。桌面端用户不喜欢账号,一次性买断更应该是“买了 = 拥有”。
Trial ≠ “付费功能减配”
很多订阅产品的 trial 是“缩水版”:限制导出、限制模型数量、水印。我们的 7 天 trial 给的是完整功能,和付费版一模一样。
这背后是“trial 到底在解决什么问题”的理解差异:
- 订阅思路的 trial:目的是让用户产生“付费后更好”的期待 → 所以要阉割
- 一次性买断思路的 trial:目的是让用户彻底验证“这个软件是不是值得买 $49” → 所以要完整
阉割版 trial 在一次性买断场景下会产生反作用——用户体验不到完整功能就不会买断,结果你既没收到钱也没留住用户。
没做的:server 端 entitlements / webhook 签名校验
为了快速上线,下面这些“理论上应该做”的我们暂时都没做:
- 服务端 entitlements service:license key 的激活状态全部在客户端判断,没有服务端数据库
- LemonSqueezy webhook 签名校验:不接收 webhook,也就不存在伪造问题
- 设备数限制:同一个 key 可以在多台机器激活,没有设备指纹
- revoke 机制:退款时我们只能相信用户会自觉卸载,无法远程 disable key
这些在规模更大之后都要补。但桌面端一次性买断 + MVP 阶段,这套简化方案的转化漏斗摩擦最小。
想看更多桌面端 AI 应用的产品细节,可以读 Gemini Mac App 还缺的 6 个功能,这是我们做 Gemini Desktop 时的另一篇复盘。
常见问题
Q1: 为什么不做订阅?
A: 桌面端用户的心智锚点是“一次性”。看看 Things、Cleanshot、Sketch、Things 3——所有顶级桌面端生产力工具都是一次性买断或混合模式。订阅在 Web 端是标配,在桌面端是逆人性。
Q2: BYOK 不会让你们收入下降吗?
A: 短期会有一部分“本来会付费的用户”转 BYOK。但这部分用户本来就是“对 API 成本敏感”的高感知群体,继续留在付费漏斗里的概率也低。让他们 BYOK 反而把他们从“可能流失”转成“活跃用户 + 口碑放大器”。
Q3: Trial 期结束后,用户怎么知道该买断还是 BYOK?
A: 我们在 Trial 还剩 2 天和到期时弹双选 paywall:左边“$49 一次买断“、右边“粘贴自己的 Gemini API key 永久免费用”。用户会按自己的技术水平选。
Q4: 这套定价适合所有 AI 应用吗?
A: 不。它适合可以 BYOK 的 AI 应用(用户自己出模型算力成本)。如果你的产品包含 RAG、向量数据库、爬虫等有服务端成本的部分,纯 BYOK 不能 cover,还需要订阅或充值。
结语
定价是产品哲学的外化。我们选择 BYOK 永久免费 + 一次性买断,本质是尊重“用户自己出成本”这件事,同时承认桌面端用户不喜欢订阅。这套组合不适合所有 AI 产品——但如果你正在做一款“客户端重、云成本轻”的工具,值得试试第三条路。