
把一个按月订阅、按席位收费的商业 SaaS改造成自己维护、按 token 用量付费的轻量版本这件事听起来很像“白嫖”但真正做完之后我觉得它最大的价值不是省钱而是把成本结构看清楚了。所谓“克隆”也绝不是去复制别人的源码和品牌而是参考一类 SaaS 的产品逻辑用开源组件和 AI 编程工具重写一个只服务自己的版本。这篇文章想说的就是这件事我怎么做功能拆解怎么在 AI 辅助下搭出最小闭环怎么把每月固定支出变成按 token 使用量计费以及这个方案哪些地方真正值得尝试哪些地方容易踩坑。如果你也经常觉得手里一堆订阅服务费用不高、但加起来很贵或者你正在犹豫要不要自建某个内部工具这篇内容应该对你有用。我尽量不写抽象概念只按实际落地顺序拆解环境怎么准备、接口怎么调、成本怎么算、失败怎么排查都放到下面。1. 先把“克隆”这件事说清楚是业务重建不是抄源码1.1 为什么我盯上了按月付费的 SaaS我拿一个典型的高频办公类 SaaS 做实验按席位收费每个成员每月固定出钱功能覆盖项目管理、知识库、AI 内容生成。它是典型的重型 SaaS功能很多但我个人真正用到的可能不到一半。更麻烦的是团队里有的人只是看看看板、翻翻文档也要按完整席位付费。一个月下来钱不少但使用率并不高。这种情况很多人都会遇到。商业 SaaS 的定价通常按席位、按功能等级、按存储空间打包不会精细到“你今天只调用了一次 AI就只收一次钱”。对于低频使用者大量金额花在了闲置能力上对于重度使用者又可能被某个单一功能的高阶套餐绑住。所以我开始想如果我用 AI 辅助重写一个“精简版”把核心功能按自用场景重新实现是不是可以把成本从“固定月费”变成“按实际调用量付费”这正是标题里“从按月付费到按 token 付费”的由来。1.2 版权边界哪些能参考哪些不能碰我必须先把边界说清楚这里的“克隆”指业务流程重建不是源码搬运更不是破解、逆向或绕过授权。能参考的是这些产品功能拆解这个 SaaS 解决了什么问题有哪些核心模块。交互流程用户进入系统后先创建项目再录入数据最后看结果。业务逻辑思路比如权限分为管理员和普通成员内容按项目隔离。界面布局的大致方向左侧导航、中部内容区、右侧属性栏。不能碰的是这些对方的品牌名、Logo、文案、视觉设计。对方的前端代码、后端代码、接口请求格式。对方的数据结构、数据库表结构。如果只是观察页面你可以推测“大概需要一张项目表”但你不可能也不应该复制对方实际表结构。对方的后台接口、私有 API、鉴权凭证。如果你只是自己学习、做内部自用工具参考功能逻辑是完全正常的。但如果你想把产品公开发布还要规避竞品标识和完整界面抄袭否则会涉及侵权。我这次做的版本只在自己服务器上跑不面向公众发布也不使用任何原服务品牌这是安全的路线。1.3 什么类型的 SaaS 适合自己重建不是所有 SaaS 都适合自建。我总结了一个判断标准先看三个点核心功能是不是纯软件逻辑。你的数据是不是主要掌握在自己手上。是否需要极强的一致性、合规资质或硬件能力。适合自建的类型比较典型笔记类、看板任务类、内容生成工具、报表生成器、内部知识库、定时任务工具。这些功能用数据库加后端接口加一个简单前端就能实现数据量不大时一台低配服务器就能跑。不适合自建的类型也很明显涉及支付通道、短信服务、电子合同、医疗财务合规的系统最好不要碰。你做出来不代表能用正规资质和渠道成本远高于订阅费。还有重实时协作的场景比如在线多人文档、企业级聊天数据同步和消息推送开发量大自建性价比很低。我之前也列过一个对比表供参考类型自建难度典型成本我是否建议笔记/文档静态存储低服务器 AI API建议尝试看板/任务管理低服务器 数据库建议尝试内容生成/批量处理中服务器 AI API token值得精算在线多人协作高后端 WebSocket 文件同步不建议支付/资质类系统极高资质 审计 合规不建议自建我最终选择的目标是一个以“项目管理 AI 内容生成”为核心的 SaaS。因为它功能边界清楚不需要处理支付和复杂协作数据也能完整落在自己手里。2. 从需求拆解到最小闭环我到底做了什么2.1 先画业务流不急着写代码很多人在自建时容易犯一个错一上来就让 AI 编程工具生成一堆页面和接口结果页面很多真正能跑通的核心流程却支离破碎。我这次反过来先画业务流而且只画最核心的那条主线。我的主线是这样的用户登录单用户版本可以先简化用一个密钥代替。创建项目项目里可以建多个任务。每个任务绑定一段输入内容比如要优化的文案、要总结的文档、要生成的邮件。点击生成后后端调用大模型 API把用户的输入和系统提示词拼好发送给模型。模型返回结果后保存到数据库同时记录这次调用的 token 用量。用户在历史记录里看到之前生成的所有内容。为什么先画这个流程因为 AI 编程工具最怕的输入就是“帮我做一个完整的 SaaS”范围太大它很难判断优先级。你把流程拆到步骤级之后它会非常清楚哪些表需要建、哪些接口需要暴露生成的代码质量会高很多。我还给每个环节标了优先级。第一版只做 1、3、5、6 这四件事登录可以先不做用环境变量里的访问密钥代替。这样可以把最小闭环压缩到两天之内。2.2 用 AI 编程工具搭后端接口后端我选的是 Python 的 FastAPI配合 SQLite。选这个组合不是因为它是唯一选择而是因为对单用户内部工具来说部署简单、没有复杂依赖数据文件可以直接备份。生产环境如果你要上 PostgreSQL后面再迁移也不难。使用 AI 编程工具时我不是让它一次生成几百行代码而是按模块问。比如“帮我写一个 FastAPI 应用包含/tasks和/tasks/{id}两个接口数据存 SQLite字段包括项目名、输入内容、输出内容、状态、token 用量。”“给这个接口加上 input 校验输入内容不能为空长度最多 10000 字。”“调用大模型 API 之后把prompt_tokens和completion_tokens存进数据库。”每问一步我都把结果放进真实项目里试跑。AI 生成代码很快但它的问题是“看起来正确实际上没跑过”所以每段代码都必须落到环境里验证一遍。2.3 单用户最小版本长什么样第一版的最小闭环非常简单甚至不需要复杂前端。我做了两个东西一个后端服务监听 8000 端口。一个纯 HTML 页面只有一个输入框、一个生成按钮、一个结果展示区。页面上只有一个操作逻辑用户在输入框里粘贴文案点击“生成”后端处理完成后返回结果和 token 用量。这个版本的代码结构可以参考下面这种伪代码它不是一个能直接运行的完整项目只是示意数据流# 示例自建服务中统计 token 用量的最小结构 def call_model(system_prompt: str, user_input: str) - dict: # 这里省略具体 SDK 调用使用你所用大模型 API 的官方方式 resp call_llm_api( messages[ {role: system, content: system_prompt}, {role: user, content: user_input}, ] ) return { reply: resp[reply_text], prompt_tokens: resp[usage][prompt_tokens], completion_tokens: resp[usage][completion_tokens], }第一次跑通时我的判断标准只有三个页面能打开按钮点击后能收到结果。数据库里多了一条任务记录。token 用量被正确记录没有报错。至于界面好不好看、速度够不够快、能否多人同时使用这些问题第一版全部忽略。先把“能跑”这件事确定下来再谈其他。2.4 AI 编程帮我省了多少事又有哪些事离不开人整个开发过程里AI 编程工具贡献最大的部分是脚手架、数据模型定义、接口参数校验和错误处理。比如 FastAPI 里常见的 Pydantic 模型校验我只需要描述字段类型它就能生成对应的定义。前端页面的表单和事件绑定速度也很快。但有几件事 AI 无法替代或者说它做得并不好需求优先级判断。哪些功能第一版要做哪些可以砍掉必须人来定。成本模型理解。AI 不会告诉你哪些 AI 调用太贵、哪些场景应该改成本地规则处理。业务规则边界。比如同一类输入模型今天返回这种答案明天返回另一种是否可接受必须人工抽检。数据备份和恢复。这是运维经验不是写几个函数就能解决的问题。所以我的结论是AI 编程工具把“写代码”的成本降得很低但“想清楚要做什么、怎么验证、怎么控制成本”依然是人的核心工作。那些以为让 AI 写个系统就能完全撒手不管的人通常会在数据丢失、接口报错、成本超支时把时间都赔回去。3. 成本模型重建从按月付费到按 token 付费3.1 原来的订阅费用到底花在哪假设一个按月 30 美元、按席位收费的 SaaS5 个人用一个月就是 150 美元一年 1800 美元。如果团队只有 3 个人是高频使用者另外 2 个人每月只登录几次那这 2 个席位就是纯浪费。商业 SaaS 的定价逻辑是按“能力范围”收费不是按“实际使用量”收费。它给你完整的模块和功能不论你用不用费用固定。对个人和小团队来说这种模式在低频场景下非常不划算。我当时在表格里做过一个简单对比项目订阅模式自建后模式计费单位每人每月固定费用每次调用的 token 用量成本波动不管用不用费用固定用多少花多少闲置成本高基本为零最高成本边界固定可预期可能失控需要监控数据存储存对方服务器存自己数据库这个对比让我明白自建的核心收益不是“免费”而是“成本与价值对齐”。你不用为没用到的功能付钱也不用为一个月只登录一次的同事付完整席位费。3.2 token 计费的基本逻辑大模型 API 通常按 token 计费。token 是模型处理文本时的最小单位中文可能一个字对应一两个 token英文一个单词常见对应一到三个 token。每次请求时系统提示词、用户输入、历史记录共同算作输入 token模型生成的结果算作输出 token。一般会讲得比较浅但实际计费时输入和输出是分开算的。一次调用的成本可以这样看单次成本 ≈ 输入 token 数 × 输入单价 输出 token 数 × 输出单价不同模型价格差异很大我在这里不写具体数字因为价格时常变化。你只要记住两个规则输入 token 一般比输出 token 便宜很多。如果提示词很长成本会以肉眼可见的速度上涨。所以控制成本的第一步不是换便宜模型而是控制输入长度。比如每次只把系统提示词压到必要范围历史对话只保留最近几轮不要在调用时把整个数据库内容塞进 prompt。3.3 结合使用量估算一个月多少 token有很多人听到“按 token 付费”就觉得贵但其实要看量级。下面是一个估算示例注意只是示例不是准确数字实际价格要看所选模型和调用次数。假设团队 5 个人每人每天平均用 20 次每次平均消耗 2000 个输入 token、500 个输出 token一个自然月按 22 个工作日算5 人 × 20 次 × 2200 token × 22 天 ≈ 484 万 token / 月如果你选择的模型每百万 token 价格在几十元级别那么这个使用量对应每个月也就几十到一两百元。对比 5 人团队的订阅费确实可能更低。但如果你把并发往上提比如每人每天调用 80 次总量就会很快冲到两千万 token 以上这时候成本会明显上升。我建议做自建前先跑一周真实使用量。别拍脑袋预估直接在系统里记录每天的调用次数和 token 用量一周后取平均值再乘以 30 天这才是你的真实成本参考线。3.4 什么时候自建划算什么时候应该继续用 SaaS没有一种模式在所有场景下都更便宜。我的判断标准是低频、少量用户自建明显更划算因为原来固定月费被摊到很低的调用量上。中频、固定团队要看单价和使用量最好把两个方案放在同一张表里对比。高频、稳定业务如果原订阅费已经包含 AI 调用而且不限量或带高配额那保留订阅可能更合适因为自建的 API 费用在重度场景下可能超过订阅费。需要专业支持和合规资质肯定继续用 SaaS哪怕贵一点。另外还要注意一些平台用“credit”而不是 token 来计费。之前我看过一个工具界面显示“2500 credits 相当于多少 token”实际换算要看官方说明因为不同厂商对一次调用的扣点规则不一样。遇到这种平台不要自己猜直接按官方文档换算否则成本预估会偏。4. 落地细节环境、接口、参数和验证4.1 前置环境准备如果你复制我的路线环境不需要特别昂贵。我这边用的是一台 Linux 云服务器1 核 2G 内存跑单用户后端和 SQLite 完全足够。Python 3.10 以上环境。一个可调用的大模型 API key。一个简单的域名或直接用 IP 访问本地测试可以不加域名。如果你的需求里还要跑本地向量模型比如给知识库做语义检索那 2G 内存会有点紧建议升到 2 核 4G。如果有 GPU 更好没有的话就尽量直接调用远端大模型 API别在本地跑重模型否则资源占用会非常大。这里有一个很常见的小坑很多人使用 git clone 拉取项目源码时会问“项目保存到哪里”。git clone 的默认行为是把仓库放在当前目录下新生成的仓库名文件夹里不是直接铺到当前目录。你在执行时注意先进入目标目录再执行克隆命令避免多套一层目录。4.2 核心模块实现与参数设置数据模型不需要太复杂。我的表结构大概是这样projects表项目名称、创建时间、备注。tasks表所属项目、输入内容、输出内容、状态、token 用量。usage_log表每次调用的时间、用户标记、模型名、输入 token、输出 token、总 token。这三个表就覆盖了主流程。你也可以把 token 用量直接放在 tasks 表里但单独建一张 usage_log 表更方便做成本统计推荐一开始就分开。后端接口可以设计成两个POST /tasks创建任务接收项目 ID 和输入内容返回任务 ID。GET /tasks/{id}查询任务状态和生成结果。如果你需要异步处理可以在创建任务后立即返回让后端在后台调用大模型完成后再更新状态。这样页面不会长时间等待但也意味着你必须有日志和失败重试机制。我这里给一个接口结构的伪代码示意app.post(/tasks) def create_task(payload): # 1. 校验输入内容长度 # 2. 创建任务记录状态为 pending # 3. 把任务放入队列后台调用模型 # 4. 返回 task_id前端持续轮询结果 return {task_id: task_id, status: pending}这里的重点是“先返回再异步处理”。否则输入内容一长接口响应时间拉满前端容易超时。4.3 接口调试和验证方法我一般不会一上来就写完整前端而是先用 API 测试工具验证后端。用 curl 调一次任务接口看返回结构是不是符合预期。然后再接页面。单条任务通过后我建议用 10 条真实数据做一轮小范围测试而不是只用一条“你好”之类的内容。因为真实数据通常更长、格式更乱很容易暴露出输入长度超限、特殊符号解析、编码错误等问题。需要重点看的指标有三个返回结果是否完整有没有被截断。耗时是否在可接受范围比如 10 到 30 秒还是 3 分钟。token 用量是否被正确记录并且落到了 usage_log 表里。如果只测一条样例就上线后面大概率会在真实使用时踩坑。4.4 常见的 token 相关报错和排查顺序我自己遇到最多的问题其实不是模型能力不行而是 token 相关配置和外部接口状态异常。常见现象和排查思路如下API key 无效或失效先看环境变量有没有加载再看 key 是否过期最后看是不是调错了模型名。余额不足费用从固定月费变成按量付费后很多人会忽略余额监控最好在系统里写一个每日统计超过阈值就提醒。上下文超长输入内容太长触达模型上下文窗口。解决办法是截断历史记录、优化系统提示词或者在入口限制输入长度。输出被截断生成结果到一半停止常见原因是 max_tokens 设置偏小可以调大但也要注意成本。第三方登录失败如果你强做了 JWT 或第三方登录出现token exchange failed之类报错时先看服务端时间是否一致、回调地址是否正确、client 配置对不上多数不是模型问题而是登录配置问题。排查顺序建议固定下来先看输入再看环境再看参数最后看服务日志。不要一报错就改模型很多问题其实是路径、权限、依赖版本或输入格式不对。5. 稳定性和维护成本自托管真正的隐性门槛5.1 自建不等于零成本把成本从“订阅费”变成“服务器 API 维护时间”不代表没有成本。很多人只看到省了订阅费忽略了服务器和数据维护的隐性支出。我这次完成之后每个月需要花的固定成本包括一台云服务器、一个域名可选、API 调用费用。不定期的成本包括系统升级、依赖更新、数据库备份、故障排查。如果我只算直接费用自建确实便宜但如果把时间算进去其实没有想象中那么“免费”。我自己的做法是定一个固定策略每周做一次数据库备份。每次修改代码后用 git 提交一个版本。记录 API 每日用量超过预算时告警。不追新版本只在需要新功能时才升级依赖。这套策略不需要太多额外工具定时任务加脚本就能完成但它能避免“自建系统跑了一年数据突然没了”的情况。5.2 不能自建的功能边界自建过程中我越来越清楚一个边界只要涉及“对外提供服务”的能力自建难度会指数级上升。比如你要做一个小程序需要对接微信支付那就不只是后端写个支付接口的问题还涉及商户号、证书、回调、退款、对账。这些功能都有成熟的 SaaS 方案自己实现非常容易踩坑。再比如你需要短信通知、邮件群发、扫码登录这些单看都简单但加起来会变成一个巨大的工程。自建更适合“内部自用、不涉及外部复杂渠道”的软件场景。我的建议是自建方案要克制只解决核心问题。把 AI 内容生成纳入自建把账号注册、支付、短信、多端同步等能力外包给专业服务或直接保留原订阅通常性价比更高。5.3 我的取舍哪些订阅保留哪些可以替换做完这个实验后我并没有把所有订阅都取消。我的取舍逻辑是这样的高频使用、数据敏感、交互简单的工具优先自建。需要多人协同、移动端同步、专业支持的工具保留订阅。涉及财务合规、客户数据、审计需求的应用坚决用正式 SaaS。一年用不了几次、但需要用的时候很急的工具可以按次购买。内容生成类的 SaaS因为我用得很频繁而且希望输入数据不出自己的服务器所以适合替换成自建加 API 调用的方案。项目协作类因为团队需要稳定的通知、评论、附件预览我还是保留原订阅避免自建后频繁出问题影响工作。“最贵的 SaaS”不一定是你最该替换的那个要先看高频高痛点的功能在哪里。替换成本最低、收益最大的往往是“使用频率高、逻辑简单、数据可控”的那类。5.4 如果你想试建议按这个顺序来如果你看完也想试一次我建议不要直接复刻我整套流程而是按下面这个顺序分阶段走只做一个最小功能比如“打开页面输入文字输出内容”。先不写界面先验证后端调用和 token 记录。用一周真实数据记录使用量不要拍脑袋预估。算清每月 token 成本和服务器成本再决定是否继续。确认可行之后再逐步加历史记录、项目分组、批量任务。最后才考虑多用户登录、权限、部署上线。这个顺序能保证你在花钱和时间之前先拿到最关键的判断依据真实需求量、真实成本和系统稳定性。我现在仍然保留了一部分 SaaS 订阅但我会更清楚地知道每个订阅里哪个功能是我真正用的哪个只是“看起来需要”。这种判断能力比省下那几十美元更有用。如果你也想做类似尝试别忘了先把安全和数据备份放在第一位再谈成本和效率。