Appearance
CostFlow
面向 AI 应用的用量、成本与计费系统
CostFlow 会基于现有的开源项目进行二次开发。
我们不会重新搭一套用户、权限、管理后台和基础工程,而是直接进入一个已经具备完整业务结构的 Java 项目,在现有系统中逐步增加一套可以复用的用量、成本与计费能力。
我们基于什么项目开发
CostFlow 的开发底座是 RuoYi Vue Pro 。
RuoYi Vue Pro 本身已经是一套比较完整的 Java 企业应用开发体系,拥有用户、权限、管理后台以及大量现成的业务和基础模块。
这意味着进入 CostFlow 以后,我们面对的不是一个只有几个 Controller 和 Service 的空项目。
系统已经有自己的模块划分、代码规范、权限体系、数据模型和前后端交互方式。
我们首先要做的是读懂它。
然后再去想:
一套新的计费能力,应该怎样合理地进入这样一个已有系统?
这和从零创建一个项目有很大的区别。
很多功能单独写并不困难,真正困难的是把它放进现有工程以后,仍然能够和原来的模块正常协作,并且给后续扩展留下空间。
为什么选择 RuoYi Vue Pro
选择 RuoYi Vue Pro,一个很重要的原因是它给 CostFlow 提供了足够完整的工程环境。
用户、权限、管理后台、数据库访问以及很多通用基础能力已经存在,我们不需要先花大量时间重新搭建这些内容。
这样就可以把更多注意力放在计费系统真正需要解决的问题上。
同时还有几个比较现实的考虑。
首先,它在 GitHub、Gitee 等平台都有较高的社区关注度,也已经被不少中小型企业项目采用。对学习者来说,这意味着它不是一个只停留在示例代码里的项目,而是有真实使用背景的开源工程。
其次,它的架构和模块划分相对清晰,整体并不复杂。对于第一次阅读一个企业级 Java 项目的人来说,既能接触到真实的工程结构,又不至于一开始就被过度复杂的架构挡在门外。
另外,RuoYi Vue Pro 已经提供了 CRM、MES 等不少现成能力。CostFlow 可以直接建立在这些已有模块和基础设施之上,把重点放到计费能力如何接入现有系统,而不是重复实现一套完整的企业管理平台。
这也更贴近大多数实际工作中的开发方式。很多项目并不是从一个空文件夹开始,而是在已有系统上继续开发、修复问题和扩展模块。
需求从哪里来
RuoYi Vue Pro 已经自带一个 AI 模块,主要有 AI 对话、AI 写作、AI 思维导图以及 RAG 等功能。
这是面向企业应用的一个模块,但是作为一个企业级应用模块,却缺少了商业化最重要的功能,统计计费功能。
一个用户用了哪些模型?调用了多少次?消耗了多少Token?费用是多少?
这些都是真实的需求。
所以 CostFlow 就来解决这些需求。
我们准备开发什么
目前可以先把它理解成:
Usage → Metering → Pricing → Billing
Usage:到底用了什么
Usage 负责记录一次真实发生的资源消耗。
例如:
谁在什么时候使用了什么资源,使用了多少。
后面的所有计算,首先都建立在 Usage 可靠的前提下。
因此这里很快就会遇到数据模型、唯一标识、重复上报以及扩展不同资源类型等问题。
Metering:到底用了多少
原始 Usage 不一定能够直接拿来计费。
有的资源按照调用次数计算,有的按照数量,有的可能需要聚合以后再参与计费。
Metering 负责把原始用量转换成真正可以参与后续计算的数据。
Pricing:这些用量值多少钱
知道用了多少之后,还要知道怎么算钱。
不同资源可能有不同单价,不同规格可能使用不同规则,未来价格还可能发生变化。
Pricing 负责管理这些计价规则。
Billing:最终产生多少费用
最后再把用量和价格真正连接起来。
系统需要能够得到最终费用,并支持后续查询、统计和核对。
做到这里,才算真正打通:
资源使用 → 用量记录 → 计量 → 定价 → 费用
这一整条链路。
和 Agent 怎么连接
CostFlow 第一阶段不会把所有设计都限定在 Agent 上。
我们会先把通用的 Usage、Metering、Pricing 和 Billing 做清楚。
之后再逐渐加入 AI 应用特有的资源。
例如一次模型请求可以产生:
text
Model Usage
├── Input Token
├── Output Token
└── Model一次 Agent 执行可能进一步包含:
text
Agent Run
├── LLM Call
├── LLM Call
├── Tool Call
├── Third-party API
└── Other Usage最终我们希望能够进一步回答:
一次 Agent 任务到底花了多少钱?
成本主要来自哪里?
某个用户、应用或者 Agent 一段时间内消耗了多少资源?
这些会成为 CostFlow 后续向 AI 应用方向继续演进的重要内容。
会用到哪些技术
CostFlow 会尽量沿用 RuoYi Vue Pro 现有的技术体系进行开发,而不是为了某个功能随意更换整套工程技术。
主要会接触到:
- Java
- Spring Boot
- Spring AI
- MyBatis Plus
- MySQL
- Redis
- 权限与认证体系
- REST API
- Vue 管理端
- 数据库设计
- 事务与数据一致性
- 幂等与并发
- 单元测试与集成测试
- 日志与可观测性
如果后面确实出现异步处理、消息驱动或者更加复杂的计费需求,再根据实际问题继续引入新的技术。
技术栈会跟着需求走,而不是反过来为了使用某项技术制造需求。
项目难度
CostFlow 整体属于:
中等起步,后期逐渐提高。
前期主要是理解现有项目、需求拆解、数据建模以及基础业务实现。
如果已经能够独立完成一个普通 Spring Boot CRUD 项目,前面的内容应该可以比较顺利地跟下来。
真正开始增加难度的部分会出现在:
- 模块边界
- 事务
- 幂等
- 并发
- 数据一致性
- Pricing 规则演进
- 历史数据处理
- 可扩展设计
从哪里开始
正式开始 CostFlow 之前,我们首先要解决的不是数据库表应该怎么建。
第一步应该先认识我们真正要修改的系统。
接下来,我们会先进入 RuoYi Vue Pro 现有工程,看看它现在有哪些模块、项目是怎样组织的、哪些基础能力可以直接复用,以及 CostFlow 第一版计费模块应该从哪里开始。