为什么按使用量定价模式适合我的AI工具,以及我是如何实现的
这个想法很简单:
让人们可以和人工智能导师谈论任何话题,获得实时回复,并建立自己的助手。
但经济形势并非如此。
每次语音会话都有实际成本。我使用的 API(Vapi)将所有功能——语音转文本、GPT 调用、语音应答——抽象到一个简洁的接口中。但在这个接口背后,却存在着实际的令牌、计算和定价成本。
所以,当我推出 Learnflow AI 时,我必须做出一个决定:
我应该按月收费?免费增值模式?还是按使用量收费?
我选择了按使用量计费的方式。以下是它的优势所在、不足之处以及我如何以一种不影响用户体验的方式实施它。
早期问题:隐性成本,隐性价值
在开始盈利之前,我为用户提供了 10 次免费语音通话。
每次辅导课都会引发与导师的对话,并扣除 1 个学分。
但它并没有像我预期的那样起作用。
人们使用几次后就停止了。
当我与早期测试人员交谈时,我发现了一个规律:
“我不太确定我到底用了些什么。”
“感觉就像个演示版,不是我会付费购买的东西。”
那时我才意识到:
- 人们并不了解他们消费的是什么。
- 他们无法感知没有可见成本的价值。
我需要明确用途、明确目的,并将其与定价挂钩。
我为什么选择按使用量计费
按月付费会掩盖经济效益。重度用户会使系统过载。普通用户则不会转化。
而且人工智能的使用本质上就具有波动性。
我想要:
- 公平:按需付费
- 可扩展性:成本和收入同步增长
- 灵活性:允许用户在升级前试用。
所以我设计了一个分级的、基于使用量的系统:
| 计划 | 价格 | 会议 | 笔记 |
|---|---|---|---|
| 自由的 | 0美元 | 每月10 | 无需信用卡 |
| 专业版 | 每月9美元 | 每月100 | 额外功能包括 |
| 按需付费 | $X | 无限 | (稍后计划) |
使用系统设计(分步指南)
1. 跟踪每个用户的使用情况
我使用 Convex 作为后端。每次会话开始时,我都会进行录制:
export const addSession = mutation({
args: { userId: v.id("users"), companionId: v.id("companions") },
handler: async (ctx, args) => {
await ctx.db.insert("sessions", {
userId: args.userId,
companionId: args.companionId,
timestamp: Date.now()
});
// Decrement credit
const user = await ctx.db.get(args.userId);
const credits = user.credits || 0;
await ctx.db.patch(args.userId, { credits: credits - 1 });
}
});
表格users内容包括:
users: defineTable({
email: v.string(),
credits: v.optional(v.number()),
plan: v.optional(v.string()),
})
每次语音通话 = 1 个积分。
2. 零积分时的阻止或催促
在客户端:
if (user.credits === 0) {
showModal("You're out of credits. Upgrade to continue.");
return;
}
后端:
if (user.credits <= 0 && user.plan === "free") {
throw new Error("Out of credits. Please upgrade.");
}
我不想让用户在不了解原因的情况下遇到难题。
因此,我在使用前后添加了内联提示。
在用户界面中显示使用情况
有效的解决方法是什么?
让学分成为体验的一部分。
标题信用计数器
<div className="text-sm text-muted-foreground">
{user.credits} credits remaining
</div>
使用提示
toast({
title: "Session Complete",
description: "1 credit used. You have 8 left."
});
导师卡
<p className="text-xs text-gray-500">
{isProOnly ? "Pro feature" : "Free access"}
</p>
用户现在理解了这种交换方式:1 次会话 = 1 个积分。
这种清晰度提高了记忆力。
流程图:新用户旅程
管弦乐:万物栖息之地
前端(Next.js):
- 显示信用计数器
- 如果余额为 0,则阻止语音通话。
- 将用户引导至升级屏幕
后端(凸):
- 用户数据:
user.credits - 曲目会话开始
- 扣除积分
- 存储会话数据
授权 + 计划(Kinde):
- 注册时会显示托管定价页面。
- 元数据:
user.plan - Guards Pro 专属功能
实施 Kinde 角色和计费
注册时,用户将被重定向到Kinde 的托管定价页面。
一旦选定,方案将存储在元数据中。
const { getUser } = getKindeServerSession();
const user = await getUser();
const plan = user?.user_metadata?.plan || "free";
我在新用户注册期间也同步了 Convex 中的planand字段:credits
export const syncUserMetadata = mutation({
args: { userId: v.id("users"), plan: v.string(), credits: v.number() },
handler: async (ctx, args) => {
await ctx.db.patch(args.userId, {
plan: args.plan,
credits: args.credits,
});
}
});
这样一来,后端就无需依赖客户端状态。
哪里出了问题
- 用户不理解信用=成本=价值。
- 使用情况不可见。
- 升级后的CTA被埋没了
最终奏效的方法
- 可见的信用跟踪
- 基于计划的访问控制
- 行为提示(不仅仅是时间提示)
- Kinde 定价清晰
- 用于计量和实时同步的凸面
关键经验
- 让用量公开透明,不要只是默默计量。
- 价格根据用户行为而定。语音交易成本高昂——要向用户展示如何操作。
- 轻轻关上大门。发出警告,而不仅仅是筑起高墙。
- 跨系统同步状态。身份验证和后端必须保持一致。
- 用户在获得价值后进行转换。延迟升级提示,直到首次成功会话后才会显示。
最后想说的话
按使用量计费不仅仅是一种商业模式,更是一种设计限制。
如果用户不知道自己正在消费什么,他们就无法欣赏它。
如果他们感觉不到控制权,他们就不会付款。
Learnflow AI 在定价和产品匹配后变得更加清晰、公平和更具可扩展性。
我不需要完整的计费团队,只需要一些基础组件:
- Kinde 用于角色、试用和升级
- 凸集用于数据和逻辑
- Vapi 提供即时语音用户体验
如果你正在开发一款使用量巨大的 AI 应用,那就应该按高价定价。
追踪它。展示它。提醒它。同步它。
这就是行动方案。
文章来源:https://dev.to/sholajgede/why-usage-based-pricing-felt-right-for-my-ai-tool-and-how-i-pulled-it-of-553n
