记账一句话就够 - 我做了个对话式记账助手,把每笔录入从40秒压到6秒
业务痛点:记账这件事,输在“打开App到记完”那一段
大部分个人记账应用的用户流失,不是发生在功能不够花哨,而是发生在录入环节。传统记账App的路径是:解锁手机 → 打开App → 选分类 → 填金额 → 选账户 → 保存。实测平均需要35到50秒。一天记5笔,就是3到4分钟。听起来不多,但用户真正的感受是“麻烦”,于是记账变成三天打鱼两天晒网,最后账本残缺,应用价值归零。
我接手过一个独立开发者的咨询项目:他做的记账小程序,30天留存率不到12%。埋点数据显示,62%的流失发生在第一次录入流程中途。结论很直接——不是功能问题,是录入成本问题。
对话式记账的逻辑很简单:用户发一句话,“午饭花了38,和同事吃的”,系统解析出金额、分类、备注、时间,落库完成。理想状态下,用户输入6到8秒,解析1到2秒,总耗时控制在10秒以内。
架构设计:三层结构,把复杂度留给AI,把简单留给用户
用户消息
│
▼
┌─────────────────────────────────┐
│ 接入层:IM渠道(微信/Telegram/网页) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 解析层:LLM结构化抽取 │
│ 输入:自然语言 + 用户画像提示词 │
│ 输出:JSON(金额/分类/账户/备注) │
└─────────────────────────────────┘
│
▼
┌─────────────────────────────────┐
│ 数据层:账本DB + 对账/统计服务 │
└─────────────────────────────────┘几个关键设计决策:
- 解析层只做一件事:把自然语言转成严格的JSON。不聊天、不闲聊、不给模型自由发挥空间。系统提示词里写死输出Schema,
response_format限制为JSON对象。 - 分类不由模型硬编码:模型输出意图(“餐饮/午餐”),分类映射表放在应用侧。这样调整分类体系不需要改提示词,更不需要换模型。
- 解析失败要有降级路径:金额抽取不到时,追问一句话,而不是直接报错。追问率是我们核心监控指标之一,上线后稳定在4%以下。
关键实现步骤(流程清单)
1. 定义记账数据Schema
amount: number(必填)
category_intent: string(必填)
account: string(默认"默认账户")
note: string(可选)
occurred_at: datetime(默认当前时间)
2. 编写系统提示词
- 角色限定:只做记账信息抽取
- 附加用户画像:常用账户、最近分类习惯(控制在300字内)
- 输出示例:3组正例 + 2组"无法解析"的反例
3. 渠道接入
- 微信:消息回调 → 解析 → 回复确认文案
- Telegram:Bot webhook,同一条解析管道复用
4. 落库与反馈闭环
- 解析成功 → 写入账本 → 回复"已记:餐饮 ¥38 ✓"
- 用户回复"改" → 触发修正流程
5. 监控三件事
- 解析成功率(目标 >95%)
- 端到端延迟(目标 <2.5秒)
- 单条解析成本(目标 <0.008元)核心解析代码骨架(Python):
async def parse_record(text: str, profile: UserProfile) -> dict:
resp = await client.chat.completions.create(
model="gpt-4o-mini",
response_format={"type": "json_object"},
messages=[
{"role": "system", "content": build_system_prompt(profile)},
{"role": "user", "content": text}
],
temperature=0
)
data = json.loads(resp.choices[0].message.content)
if "amount" not in data:
raise ParseError("missing_amount")
return normalize(data)效率对比:改造前后的数字
上线对话式录入后的一个月,数据变化(该开发者的自测统计):
| 指标 | 传统表单 | 对话式 | 变化 |
|---|---|---|---|
| 单笔录入耗时 | ~40秒 | ~6秒 | -85% |
| 日均记账笔数 | 2.1笔 | 5.8笔 | +176% |
| 30天留存 | 12% | 34% | +22个百分点 |
| 单条解析成本 | — | 约0.006元 | 可控 |
对用户来说,一天5笔账总投入从3分钟降到40秒以内——低于“嫌麻烦”的心理阈值,记账习惯才可能维持。对开发者来说,对话式界面的开发量反而更小:不需要做复杂的表单页、分类选择器、键盘交互,一个消息框加一条解析管道就完成了核心闭环。
为什么统一AI API网关能降低维护成本
这个项目给我的第二个教训来自维护侧。初期我直连了一家模型厂商的SDK,三个月里遇到三次问题:一次官方SDK大版本升级导致接口不兼容,一次模型限流没有熔断导致用户消息丢失,一次想测试更便宜的替代模型,结果发现提示词、错误处理、日志埋点全要重写一遍。
后来我把所有模型调用迁移到统一AI API网关,维护成本的变化是实打实的:
- 一次接入,多模型可切换。网关兼容OpenAI接口格式,换模型只改一个模型名参数,提示词和业务代码零改动。测试不同价位的模型做A/B,当天就能出结果,之前这个过程要两三天。
- 密钥和配额集中管理。不需要在代码里散落各家API Key,密钥轮换在一处完成,也避免了密钥泄漏到日志里的常见事故。
- 统一的用量统计和告警。解析成功率、延迟、Token消耗都在一个面板上,不用自己写“别再手动翻账单”那类脚本去拼凑各家后台的数据。
- 限流和重试在网关层处理。业务代码里删掉了大段容错逻辑,解析管道从200行瘦身到80行。
粗算下来,迁移后每月花在模型调用相关维护上的时间从大约6小时降到1.5小时。对一个独立开发者,这就是每季度省出两个完整工作日——足够迭代一个新功能。
结语
对话式记账的本质不是“用上了AI”,而是把用户的录入成本压缩了一个数量级,让记账行为得以持续。如果你想快速做一个类似轻量的AI应用,建议从一条解析管道起步,并通过统一网关接入模型服务,把精力留给产品本身。
如果你也在规划类似项目,可以试试 Thistoken 的统一AI API网关,注册即可开始:https://api.thistoken.ai/register
---
想直接跑通示例?访问 https://api.thistoken.ai/register 注册 ThisToken.AI,获取 API Key 后即可开始。