发布于 2026-01-06 7 阅读
0

为什么按使用量定价模式适合我的AI工具,以及我是如何实现的

为什么按使用量定价模式适合我的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 });
  }
});
Enter fullscreen mode Exit fullscreen mode

表格users内容包括:

users: defineTable({
  email: v.string(),
  credits: v.optional(v.number()),
  plan: v.optional(v.string()),
})
Enter fullscreen mode Exit fullscreen mode

每次语音通话 = 1 个积分。

2. 零积分时的阻止或催促

在客户端:

if (user.credits === 0) {
  showModal("You're out of credits. Upgrade to continue.");
  return;
}
Enter fullscreen mode Exit fullscreen mode

后端:

if (user.credits <= 0 && user.plan === "free") {
  throw new Error("Out of credits. Please upgrade.");
}
Enter fullscreen mode Exit fullscreen mode

我不想让用户在不了解原因的情况下遇到难题

因此,我在使用前后添加了内联提示。

在用户界面中显示使用情况

有效的解决方法是什么?

让学分成为体验的一部分。

标题信用计数器

<div className="text-sm text-muted-foreground">
  {user.credits} credits remaining
</div>
Enter fullscreen mode Exit fullscreen mode

使用提示

toast({
  title: "Session Complete",
  description: "1 credit used. You have 8 left."
});
Enter fullscreen mode Exit fullscreen mode

导师卡

<p className="text-xs text-gray-500">
  {isProOnly ? "Pro feature" : "Free access"}
</p>
Enter fullscreen mode Exit fullscreen mode

用户现在理解了这种交换方式: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";
Enter fullscreen mode Exit fullscreen mode

在新用户注册期间也同步了 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,
    });
  }
});
Enter fullscreen mode Exit fullscreen mode

这样一来,后端就无需依赖客户端状态。

哪里出了问题

  • 用户不理解信用=成本=价值。
  • 使用情况不可见。
  • 升级后的CTA被埋没了

最终奏效的方法

  • 可见的信用跟踪
  • 基于计划的访问控制
  • 行为提示(不仅仅是时间提示)
  • Kinde 定价清晰
  • 用于计量和实时同步的凸面

关键经验

  1. 让用量公开透明,不要只是默默计量。
  2. 价格根据用户行为而定。语音交易成本高昂——要向用户展示如何操作。
  3. 轻轻关上大门。发出警告,而不仅仅是筑起高墙。
  4. 跨系统同步状态。身份验证和后端必须保持一致。
  5. 用户在获得价值后进行转换。延迟升级提示,直到首次成功会话后才会显示。

最后想说的话

按使用量计费不仅仅是一种商业模式,更是一种设计限制。

如果用户不知道自己正在消费什么,他们就无法欣赏它。

如果他们感觉不到控制权,他们就不会付款。

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