一句话记账本
用自然语言记账:说一句话,自动解析、分类、入账,月底自动出分析报告。
何时使用
在以下情况使用本技能:
- 用户想记一笔账、记录日常消费或收入
- 用户要求做月度/每周收支分析、支出统计、分类排行
- 用户需要一份可离线使用、可分享给他人的轻量记账工具
- 用户提到「记账」「记一笔」「账本」「收支」「花了多少」「钱花哪了」
执行步骤
步骤 1:判断交付形态
本技能交付的是单个 HTML 文件,不是脚本、不是文档。三种典型交付:
| 用户诉求 | 做法 |
|---|---|
| 「给我个记账工具」 | 直接产出 HTML 文件并用 present_files 交付 |
| 「把这段话记进账本」 | 解析用户那句话,按下方规则给出记账结果 |
| 「分析我这个月的账」 | 按下方分析口径生成文字结论 |
步骤 2:产出 HTML 文件
以 assets/一句话记账本.html 为基准模板,按需复制并调整,然后交付。
模板已内置全部功能,不要从零重写。可调整的维度:
CATS数组:分类与关键词。增删分类时同步更新EXPENSE_ORDER(关键词匹配优先级,命中越靠前越优先)CATS[].color:分类配色,需在浅色主题下可读- 主题变量:
:root内的--bg--card--ink--brand--income等
保留的结构性约束(改动会破坏功能):
- 存储键
oneLineLedger_v1不可随意变更,否则用户历史数据会「丢失」 renderAll()必须依次调用renderSummary→renderInsights→renderCharts→renderTrend→renderList- 解析函数
parseSentence是唯一入口,返回{amount, type, cat, date, note, raw} - 移动端与 PC 端共用同一份 DOM,靠
@media断点切换布局,勿写死视口宽度
步骤 3:解析用户的一句话
解析顺序固定为 日期 → 金额 → 收支类型 → 分类,详细规则见 references/parsing-rules.md。
快速判断示例:
| 输入 | 日期 | 金额 | 类型 | 分类 |
|---|---|---|---|---|
| 昨天超市128买菜 | 昨天 | 128 | 支出 | 买菜 |
| 打车35.5 | 今天 | 35.5 | 支出 | 交通 |
| 工资8000 | 今天 | 8000 | 收入 | 工资 |
| 前天加油300 | 前天 | 300 | 支出 | 交通 |
| 3月5日房租3500 | 3月5日 | 3500 | 支出 | 居住 |
解析完成后,向用户回显:日期 + 类型 + 金额 + 分类 + 备注,让用户能立刻发现误解。
步骤 4:生成月度分析
分析口径与文案生成规则见 references/analysis-rules.md。核心结论共 5–6 条:
- 总支出 + 环比上月(月初 10 天内要加提醒,避免误导)
- 最大支出分类 + 占比,其次是第二大分类
- 记账节奏 + 日均支出
- 最大单笔 + 是否拉高整月(占比 ≥40% 时提示)
- 结余 / 超支,超支时用醒目色
- 月末预测(当月已过 5 天才生成)
步骤 5:交付
- 产出文件用 present_files 交付,HTML 会在预览面板直接打开
- 提醒用户数据存在浏览器本地,清缓存会丢,建议定期导出 CSV
输入输出
输入:用户的自然语言消费描述,或「做个记账工具」「分析我的账」这类请求。
输出:
- HTML 文件:单文件、离线可用、双击即开、桌面与移动端自适应
- 记账解析结果:结构化的日期/金额/类型/分类/备注
- 月度分析:一段可直接阅读的中文结论,含具体金额与占比
修改与扩展
新增一个分类
- 在
CATS数组添加{ key, color, kw: [...] } - 若该分类有明确匹配优先级,把 key 加入
EXPENSE_ORDER靠前位置 - 在
INCOME_CATS中同理处理收入分类
调整分析文案
改 renderInsights() 内的 add(...) 调用。每个 add 传四个参数:图标文字、图标底色、主文案(含 <b> 标签)、灰色副文案。
验证改动
改动后必须做三件事:
node --check校验脚本语法- 用 headless Chrome 截图,检查是否错位、溢出、文字被裁切
- 用真实视口验证:headless Chrome 的
--window-size与 CSS 视口可能不一致,测移动端要通过 CDP 的Emulation.setDeviceMetricsOverride真实模拟,否则会误判溢出
发布到 SkillHub
本技能已在 SkillHub 上架,标识如下:
| 项 | 值 |
|---|---|
| slug | one-line-ledger |
| 完整坐标 | @user_7084a5f1/one-line-ledger |
| 详情页 | https://skillhub.cn/skills/user_7084a5f1/one-line-ledger |
| skillId | 308182 |
迭代发布(slug 保持不变,只改 version 与内容):
export PATH="$HOME/.local/bin:$PATH"
cd ~/.workbuddy/skills
PYTHONIOENCODING=utf-8 skillhub publish ./one-line-ledger --changelog "本次变更说明"
发布前先跑自检:
PYTHONIOENCODING=utf-8 python scripts/verify_parsing.py
注意:
- Windows 下
skillhub publish必须带PYTHONIOENCODING=utf-8,否则中文 changelog 会乱码 - 先用
--dry-run预检,通过后再正式发布 slug一经提交不可更改,更新版本时不要动它- 发布后安全扫描(keen / sanbu)处于排队状态,审核通过后才会公开展示和可安装
- Token 存放在
~/.skillhub/下的 credentials 文件中,仅本机可读
注意事项
- 不编造数据:分析结论必须基于真实记录计算,不得虚构消费项
- 不写死金额:所有数字从记录实时计算
- 隐私:数据只存本地浏览器,不上传任何服务器,技能本身也不读取用户隐私文件
- slug 不可变:若本技能要发布到 SkillHub,
slug一经提交不可更改,需谨慎命名