我用 AI 做记账 App:技术方案怎么选,才能既简单又能落地

0 阅读7分钟

11_cover_ai_budget_app_case.png

做 AI 编程项目时,很多人容易陷入两个极端。

一个极端是完全不做架构设计,直接让 AI 开写。另一个极端是让 AI 给出一套非常“豪华”的方案:微服务、消息队列、缓存、监控、Kubernetes,什么都上。

这两个极端都不适合第一版产品。

这次个人记账 App 的目标很明确:做一个轻量、可用、能验证核心价值的 MVP。所以架构设计的标准不是“技术上多先进”,而是:

  • 能不能快速落地
  • 能不能稳定维护
  • 能不能支持后续继续迭代

这篇讲我怎么用 AI 把这个项目的技术方案收敛下来。

架构设计阶段,我先让 AI 回答什么问题

对这个记账 App,我没有一开始就让 AI 直接选技术栈。

我先让它回答 5 个问题:

  • 前端用什么形态承接输入和展示
  • 后端怎么组织识别、预算、账单和统计逻辑
  • 数据库存哪些核心对象
  • 语音怎么接,不要把链路做复杂
  • 第一版用什么部署方式最稳

这几个问题其实都指向一个核心原则:第一版不要为了未来可能性过度设计。

07_flow_ai_architecture_design.png

为什么最后不是做成“纯前端本地 App”

如果只是一个更简单的练手项目,其实完全可以先做成:

  • 前端页面
  • 本地 localStorage
  • 无后端

但这次项目没有这么做,原因有 3 个:

  1. 这个产品的核心不是表单录入,而是“识别后再保存”。
  2. 预算、统计、提醒这些逻辑更适合在服务端统一口径。
  3. 后续还要支持语音转文字、查询类自然语言和数据库留存。

如果第一版就把数据和识别逻辑都放在前端,虽然也能跑,但后面演进到真正可持续的产品形态时,会有明显重构成本。

所以这个项目需要一个后端,但不需要一个重后端。

最后收敛出的技术栈

这次最终确定的技术栈是:

  • 前端:Vue 3 + Element Plus
  • 后端:Python + FastAPI
  • 数据库:PostgreSQL
  • 识别:规则引擎
  • 语音:现成语音转文字服务
  • 架构:单体应用 + 模块化分层

这个组合的重点不在于“最流行”,而在于它和目标匹配。

flowchart LR
    A["Vue3 + Element Plus"] --> B["FastAPI"]
    B --> C["Parser 识别模块"]
    B --> D["Budget 预算模块"]
    B --> E["Transaction 账单模块"]
    B --> F["Stats 统计模块"]
    B --> G["Alert 提醒模块"]
    D --> H["PostgreSQL"]
    E --> H
    F --> H
    G --> H

为什么前端选择 Vue 3 + Element Plus

前端这块,目标是尽快把 4 个核心页面做出来:

  • 首页
  • 记一笔页
  • 账单页
  • 统计页

这个项目的 UI 难点不是复杂交互,而是:

  • 录入要轻
  • 信息要清楚
  • 移动端也能正常用

Vue 3 的优势在于:

  • 上手快
  • 页面型应用开发效率高
  • 组合式 API 适合小中型项目

Element Plus 不是最“潮”的移动端方案,但它足够成熟,组件可复用程度高,用来搭记账 App 的首版 Web MVP 很合适。

这里有一个现实判断:第一版重点是验证功能闭环,不是做设计语言创新。

为什么后端选择 FastAPI

这个项目的后端并不复杂,但它有清晰的模块边界:

  • 预算模块
  • 账单模块
  • 分类模块
  • 统计模块
  • 提醒模块
  • 识别模块

FastAPI 很适合这种场景,原因也很直接:

  • API 开发快
  • Schema 定义清楚
  • 和 Pydantic、SQLAlchemy 配合自然
  • 很适合先把接口跑通,再逐步补强

相比一上来用更复杂的企业级框架,FastAPI 在这个项目阶段的性价比更高。

为什么数据库直接选 PostgreSQL

很多第一版项目喜欢先用 SQLite。

如果只是一个本地工具,这样没问题。但这次项目一开始就明确了几个需求:

  • 数据要长期存储
  • 后端要和真实数据库联调
  • 预算、账单、统计都要有一致口径
  • 后面要考虑部署

所以直接用 PostgreSQL 更合理。

它带来的好处是:

  • 关系型数据天然适合预算、分类、账单这种模型
  • 迁移工具链成熟
  • 后面做聚合统计也更自然

这个项目最终的核心表也比较清晰:

  • users
  • categories
  • monthly_budgets
  • transactions

为什么识别先用规则引擎,而不是直接上大模型

这个点是很多 AI 产品最容易误判的地方。

一看到“自然语言记账”,很多人会默认应该用 LLM 去做解析。

但这个项目的第一版没有这么做,而是选择:

规则引擎优先。

原因很现实:

  • 成本低
  • 结果更稳定
  • 容易做单元测试
  • 对高频表达覆盖已经够用

比如这些输入:

  • 我这个月预算1000元
  • 今天加油300元
  • 昨天晚上吃饭花了58
  • 今天收到工资5000元

这类表达用规则引擎完全可以做出稳定结果。

第一版先把高频表达识别稳定,比一开始追求“什么都能理解”更重要。

为什么语音单独拆成“转文字”能力

语音链路很容易被设计复杂。

但这次我刻意把它拆得很干净:

语音输入 -> 语音转文字 -> 走同一套文本解析链路

这样做的好处非常明显:

  • 语音和文字只共用一套解析逻辑
  • 后端不需要单独维护两套识别分支
  • 后续替换语音服务时,不会影响预算/账单识别规则

这个决策其实是在给未来降成本。

项目最终采用的是“单体应用 + 模块化分层”

这个项目没有拆微服务,也没有为了“架构好看”做很多抽象层。

最终保留的是这种结构:

  • api
  • services
  • repositories
  • models
  • schemas
  • parser

这是一个很典型的模块化单体结构。

它的好处是:

  • 每层职责清楚
  • 对 AI 来说也更容易理解和修改
  • 后面继续加功能时,不容易写散

对于这种规模的项目,这种结构已经足够。

这一版架构真正解决了什么问题

如果把这套方案总结成一句话,它解决的是:

如何用尽量少的复杂度,把一句话输入、识别、保存、统计和提醒这条链路打通。

具体来说:

  • 前端负责输入、确认和展示
  • 后端负责规则识别、数据校验和业务聚合
  • PostgreSQL 负责真实存储
  • 规则引擎负责第一版的高频语义解析
  • 语音只作为文本输入的上游,不污染核心业务链路

这就是一个“够用且能持续迭代”的第一版架构。

一个适合直接复用的提示词模板

如果你也想让 AI 帮你做类似的架构设计,可以这样问:

下面是当前产品的 MVP 需求:
<粘贴需求分析结果>

请帮我做第一版技术架构设计。

要求:
1. 优先简单可维护
2. 不要过度设计
3. 给出推荐技术栈和理由
4. 说明前端、后端、数据库、识别、部署分别怎么做
5. 输出推荐模块划分
6. 标出未来扩展点

约束:
- 第一版优先验证核心价值
- 不要为了未来功能提前做复杂抽象
- 技术选型以交付速度和维护成本为先

最后

AI 很会给出“看起来很强”的方案,但真正有价值的架构设计,不是名词越多越好,而是它能不能匹配项目阶段。

这个记账 App 的架构收敛过程让我更确定一件事:

第一版产品最需要的不是大架构,而是能支撑主链路跑通的小架构。

下一篇我会继续写:这个项目的数据库、接口和规则引擎是怎么拆出来的,以及为什么自然语言产品第一版一定要把“识别结果确认”这一步保留下来。

如果你最近也在做 AI 项目选型,纠结该不该一开始就上复杂架构,或者你手里已经有一套方案,但不确定是不是过度设计了,可以直接私信我。我最近在系统整理 AI 编程实战案例,也在做 AI 代码审查、单元测试补齐和 AI 编程流程咨询。