# Ask AI Bookkeeping

> 用自然语言查询个人账本。当用户问“这个月花了多少”“7 月餐饮多少”“大阪旅行一共花了多少”“还有多少报销没到账”“哪一类花得最多”“查一下某笔流水”或要求按时间、分类、商户、账户、账本筛选时触发。只读取账本并说明统计范围和口径。

- Skill: `tjxj/ask-ai-bookkeeping` (Agent Skill)
- Install (CLI): `npx skillmds@latest add tjxj/ask-ai-bookkeeping`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tjxj/ask-ai-bookkeeping/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: tjxj (https://skillmd.com/u/tjxj)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tjxj/ask-ai-bookkeeping

---


# Ask AI Bookkeeping

从已确认流水回答账务问题，并把时间范围、筛选条件和统计口径一起交代清楚。

## 何时触发

- “7 月餐饮花了多少？”
- “大阪旅行一共花了多少，日元和人民币都列出来”
- “还有哪些报销没到账？”
- “本月收入、支出和结余是多少？”
- “支付宝最近 10 笔是什么？”
- “房租加水电占本月收入多少？”

## 共用入口

高频查询直接运行：

```bash
python3 "$AI_BOOKKEEPING_HOME/scripts/bookkeeping.py" \
  --config "/absolute/path/to/config.json" \
  ask "用户问题"
```

需要固定“本月”的基准时间时传入 `--now`。

## 查询流程

1. 识别时间范围。用户没说时间且结果会明显受范围影响时，先追问；“本月”使用配置时区。
2. 识别筛选项：交易类型、分类、商户、付款账户、项目账本、币种、报销状态。
3. 调用 `ask`。返回结果中必须保留：
   - `scope`：时间和时区。
   - `filters`：真正使用的筛选条件。
   - `total` 与本位币。
   - 原币合计，适用于旅行和外币查询。
   - 命中的流水和笔数。
   - `basis`：退款、转账、报销的处理口径。
4. 对复合问题，可用 `list --month YYYY-MM` 读取同一范围的明细后聚合。计算时使用 `personal_amount`、`cash_in`、`cash_out` 和 `transaction_type`，不要从自然语言金额重新计算。
5. 回答先给一句结论，再给 2 至 5 条组成或异常。金额统一保留两位小数。

## 常用口径

- “花了多少”：个人消费合计，支出减退款，扣除可报销与他人应付部分。
- “收入多少”：真实收入，排除退款、报销到账、借入和账户转账。
- “现金还剩多少变化”：现金流入减现金流出，转账会在两个账户之间移动。
- “旅行花了多少”：按项目账本筛选，给本位币合计，并按原币分别列示。
- “待报销”：原垫付可报销金额减已确认到账金额。
- “余额”：只在账户期初余额和全部账户流水都完整时回答；条件不够要直说。

## 边界与防错

- 默认排除待确认和已撤销流水。
- 用户问“为什么”时列出组成明细或分类汇总，不只给一个总数。
- 时间或对象有歧义时只问一个最关键问题。
- 查询结果为空时说明真实筛选条件，不推测用户没记过账。
- 外币缺汇率时列入数据质量问题，不临时猜汇率。
- 报销、退款和转账严格沿用统一口径，避免把现金回流算成收入。
- 这是个人财务记录与分析工具，不给收益承诺、税务结论或投资指令。

## 回答示例

```text
2026 年 7 月餐饮个人净支出 200.00 元，共 2 笔：消费 300.00 元，退款 100.00 元。
范围：2026-07-01 至 2026-08-01；已排除待确认和已撤销流水。
```

