| name | ask-ai-bookkeeping |
| description | 用自然语言查询个人账本。当用户问“这个月花了多少”“7 月餐饮多少”“大阪旅行一共花了多少”“还有多少报销没到账”“哪一类花得最多”“查一下某笔流水”或要求按时间、分类、商户、账户、账本筛选时触发。只读取账本并说明统计范围和口径。 |
Ask AI Bookkeeping
从已确认流水回答账务问题,并把时间范围、筛选条件和统计口径一起交代清楚。
何时触发
- “7 月餐饮花了多少?”
- “大阪旅行一共花了多少,日元和人民币都列出来”
- “还有哪些报销没到账?”
- “本月收入、支出和结余是多少?”
- “支付宝最近 10 笔是什么?”
- “房租加水电占本月收入多少?”
共用入口
高频查询直接运行:
python3 "$AI_BOOKKEEPING_HOME/scripts/bookkeeping.py" \
--config "/absolute/path/to/config.json" \
ask "用户问题"
需要固定“本月”的基准时间时传入 --now。
查询流程
- 识别时间范围。用户没说时间且结果会明显受范围影响时,先追问;“本月”使用配置时区。
- 识别筛选项:交易类型、分类、商户、付款账户、项目账本、币种、报销状态。
- 调用
ask。返回结果中必须保留:
scope:时间和时区。
filters:真正使用的筛选条件。
total 与本位币。
- 原币合计,适用于旅行和外币查询。
- 命中的流水和笔数。
basis:退款、转账、报销的处理口径。
- 对复合问题,可用
list --month YYYY-MM 读取同一范围的明细后聚合。计算时使用 personal_amount、cash_in、cash_out 和 transaction_type,不要从自然语言金额重新计算。
- 回答先给一句结论,再给 2 至 5 条组成或异常。金额统一保留两位小数。
常用口径
- “花了多少”:个人消费合计,支出减退款,扣除可报销与他人应付部分。
- “收入多少”:真实收入,排除退款、报销到账、借入和账户转账。
- “现金还剩多少变化”:现金流入减现金流出,转账会在两个账户之间移动。
- “旅行花了多少”:按项目账本筛选,给本位币合计,并按原币分别列示。
- “待报销”:原垫付可报销金额减已确认到账金额。
- “余额”:只在账户期初余额和全部账户流水都完整时回答;条件不够要直说。
边界与防错
- 默认排除待确认和已撤销流水。
- 用户问“为什么”时列出组成明细或分类汇总,不只给一个总数。
- 时间或对象有歧义时只问一个最关键问题。
- 查询结果为空时说明真实筛选条件,不推测用户没记过账。
- 外币缺汇率时列入数据质量问题,不临时猜汇率。
- 报销、退款和转账严格沿用统一口径,避免把现金回流算成收入。
- 这是个人财务记录与分析工具,不给收益承诺、税务结论或投资指令。
回答示例
2026 年 7 月餐饮个人净支出 200.00 元,共 2 笔:消费 300.00 元,退款 100.00 元。
范围:2026-07-01 至 2026-08-01;已排除待确认和已撤销流水。