核心功能概述
前途账本是一款智能记账小程序,核心特色是AI 驱动的对话式记账。用户可以用自然语言与 AI 角色对话完成记账,系统自动识别意图、提取金额和分类,并以角色化口吻回复。
1.1 AI 对话记账
功能描述:用户通过自然语言与 AI 助手(清漪师妹/凌霄师弟)对话,完成记账操作。系统自动识别记账意图、提取金额/分类/时间,并以角色化口吻反馈。
核心特性:
- 双角色系统:支持师妹(温柔亲切)/师弟(干练爽朗)两种人设切换
- 意图智能识别:自动区分记账、问答、闲聊三种场景
- 三层记忆机制:短期窗口(6轮对话) + 用户画像 + 长期事实记忆
- 财务快照注入:回答财务问题时自动注入本月/上月收支统计
- 自然语言时间:支持"昨天""上周五""3天前"等时间表达
业务流程:
用户输入:"今天午餐花了50"
↓
意图识别:记账(record)
↓
信息提取:金额50元、分类"三餐"、时间"今天"
↓
AI回复:"师妹给你记一笔,这就是吃饭花了50灵石呗~"
↓
展示确认卡片:[支出 -50.00元 | 分类:三餐 | 时间:2025-01-20]
↓
用户点击"帮我记下吧" → 调用云函数保存交易记录
↓
AI回复:"好嘞,已经帮掌门记下啦!"
1.2 传统手动记账
功能描述:表单式记账界面,支持精确输入收支信息。
核心特性:
- 收入/支出类型选择
- 自定义分类管理(三餐、交通、娱乐、工资等)
- 金额、备注、时间精确输入
- 九宫格数字键盘快速输入
1.3 数据统计与可视化
功能描述:多维度展示收支数据,帮助用户洞察财务状况。
核心功能:
- 首页看板:当日/本周/本月收支汇总,折线图展示趋势
- 图表统计页:收支趋势图、分类占比饼图、月度对比柱状图
- 日历视图:按日期查看每日收支明细,点击日期查看详情
- 搜索功能:关键词搜索历史交易记录
1.4 存钱计划管理
功能描述:创建和跟踪存钱目标,可视化进度展示。
核心特性:
- 设置目标金额和截止日期
- 进度条实时展示完成度
- 手动更新已存金额
- 计划完成提醒
1.5 用户系统
功能描述:多种登录方式和个人信息管理。
核心特性:
- 邮箱注册:邮箱 + 验证码注册,密码 SHA-256 加密存储
- 邮箱登录:支持密码登录和验证码登录双模式
- 微信一键登录:小程序平台专属,通过 wx.login 实现
- 个人中心:修改昵称、头像、性别、签名等信息
整体架构
前端层(uni-app + Vue 3)
• 页面:首页/AI对话/手动记账/图表/个人中心
• UI库:uview-plus(组件)+ qiun-data-charts(图表)
• 状态管理:Vuex
↓ uniCloud.callFunction()
云函数层(Node.js)
• user:用户注册/登录/信息更新
• transaction:交易记录增删改查
• aiChat:AI对话核心(意图路由+记忆注入)
• aiChatHistory:对话历史存储
• aiUserMemory:用户记忆管理
• mailqq:邮件验证码发送
↓ DB Query / HTTP API
数据层(uniCloud DB + 外部API)
• MongoDB:用户/交易/对话/记忆表
• SiliconFlow API:DeepSeek-V3 LLM
• QQ邮箱 SMTP:验证码发送
架构亮点:
- 前后端分离:前端负责展示和交互,后端负责业务逻辑和数据持久化
- 云端一体:uniCloud 自动处理服务器运维、自动扩容
- 职责分离:每个云函数专注单一职责,易于维护和测试
技术难点与解决方案
1.长文本输入导致并发锁未释放
问题:用户输入长文本(>30字)导致 LLM 超时(60秒),异常时未释放并发锁,后续所有请求被拒绝(429错误),必须重启小程序。
解决方案:
1. finally 块释放锁:确保无论成功/异常都释放锁
2. 超时保护:60秒后强制释放,防止死锁
3. 输入长度限制:前端+后端双重限制200字,并用角色化提示引导用户
关键代码:
const releaseLock = () => { userLocks.delete(user_id) }
const lockTimer = setTimeout(releaseLock, 60000)
try {
// 业务逻辑
} finally {
clearTimeout(lockTimer)
releaseLock() // 一定会执行
}
3.2 GB-s 成本优化
问题:每轮对话调用 4 次云函数(aiChat、aiChatHistory、aiUserMemory、计数统计),GB-s 消耗大。
解决方案:
1. 合并历史保存:从前端调用改为后端内部调用(4次→3次)
2. 计数内联:将统计逻辑合并到 aiChat 云函数(3次→2次)
3. 原子 push 写入:避免全量读写,减少数据库操作时间
4. 财务快照按需查询:仅在问答意图时计算,记账和闲聊不查询
成本降低约 50%,适合长期运营。