AUSGLEICH — 两人 AA 记账
这是什么
一个小而美的 A 钱工具。一轮 = 一份新建的飞书多维表格。吃完火锅/旅行结束/月底,把一堆支付截图丢进来,表格自己算出谁该转给谁多少 CNY。
默认场景是双边协作:你用你的飞书 + 你的 agent 记你的支出,朋友用他的飞书 + 他的 agent 记他的。两边都往同一个账本写,谁都不用看对方的脸色录数据。
红线(不要越界)
- 只做两个人、只做 AA(50/50)。不加多人、不加自定义比例、不加"不计入"。
- 结算币种固定 CNY。原币只记 CNY / HKD 两种。
- 一轮 = 一个新 Base。不做结算锁定、不做跨轮累计、不做历史归档。下一轮直接新建。
- 表格里不放工作流、不放按钮、不放表单。智能全在 agent 侧,表格只存事实 + 三个公式。
- 不做共享录入入口。不做表单、不做共用机器人。两个入口,各自独立。
- skill 里不写死任何人的名字或任何 base_token。账本是运行时产生的,不是这个 skill 自带的。开源出去,别人装了就是他自己的账。
一、账本与接头文件
ledger.json
一份账本的信息全在一个 JSON 里,叫接头文件:
{
"v": 1,
"name": "2026-09",
"base_token": "Xxxx...",
"url": "https://xxx.feishu.cn/base/Xxxx",
"tables": {"expense": "tbl...", "settle": "tbl..."},
"payers": ["Alice", "Bob"],
"me": "Alice",
"peer": "Bob",
"rate": 0.8568,
"currency": "CNY"
}
它不含任何密钥。 飞书的鉴权靠各人自己的 lark-cli 登录态。谁拿到这个文件 + 在 Base 里有编辑权限,谁就能写。所以可以随手用微信/飞书发给对方,传丢了也不怕。
存在哪
~/.ausgleich/me.json 我是谁(默认身份,第一次运行时建)
~/.ausgleich/ledgers/<slug>.json 每轮账本的接头文件
~/.ausgleich/current 当前在用哪个账本
这些都不随 skill 分发,也不进 git。
我是谁
第一次用要先设身份,之后 --me 可以省:
mkdir -p ~/.ausgleich && echo '{"name":"Alice"}' > ~/.ausgleich/me.json
二、开一轮(建账方做一次)
问清两件事:对方叫什么;他的飞书邮箱或 openid(用来开权限)。
查汇率:
python3 scripts/rate.py建账 + 给对方开编辑权限:
python3 scripts/new_base.py --name "2026-09" --me "Alice" --peer "Bob" \
--peer-contact "bob@example.com" --rate 0.8568
建表 → 建结算两行 → drive +member-add --perm edit 把对方加进来 → 存好本地 ledger。
- 把输出的 ledger JSON 发给对方(微信/飞书随便)。
如果
member-add失败(比如双方不在同一个飞书组织),脚本会警告但不中断。这时手动在飞书里把这份 Base 分享给对方、给可编辑权限即可。
三、加入一轮(对方做一次)
python3 scripts/ledger.py save --json '<粘贴对方发来的 ledger JSON>' --me "Bob"
之后他的所有操作都自动指向这个账本。--me 必须从 payers 里选,填错会直接报错。
四、记账(两边随时做)
拿到支付截图,逐张识别(规范见
references/parse-prompt.md),每条得到:事项 / 日期 / 币种 / 金额 / 置信度 / 疑点先给用户看汇总再写,把
confidence < 0.8和有疑点的行挑出来问。确认后写入:
python3 scripts/post.py --ledger 2026-09 --records records.json
records.json:
[
{"事项":"海底捞","日期":"2026-09-01","币种":"HKD","金额":428.00,"付款人":"Alice","备注":"","image":"/abs/path/shot1.png"}
]
付款人和汇率可以省略:默认取 ledger 里的me和rate,CNY 自动填汇率 1image可选,有就传原图到「凭证」列
五、结算(两边都能跑)
python3 scripts/settle.py --ledger 2026-09
本轮共同支出 CNY 453.11,人均 226.56
Alice 实付 366.71 净额 +140.15
Bob 实付 86.40 净额 -140.16
→ Bob 转给 Alice ¥140.16
两边各自跑一次,数字应当一致。 对不上就说明有人漏记了——这正是双入口记账最实用的地方。
已知坑(都是踩过的)
| 坑 | 表现 | 解法 |
|---|---|---|
| 公式异步计算 | 刚写完读回来是空 | settle.py 内置重试(等 3 秒再读,最多 3 次) |
附件 --file 只收相对路径 |
报 unsafe file path |
必须 cd 到图片目录(post.py 已处理) |
| 公式字段创建 | CLI 直接拒绝 | 必须带 --i-have-read-guide |
| 公式依赖顺序 | 建 净额 时 实付合计 还不存在 |
先建前两个,再建 净额 |
| select 传值 | 写入失败 | 传数组,单选用 ["CNY"] |
| datetime 传值 | 写入失败 | 传 "2026-09-01 12:00" |
| 表名不能改 | 公式失效 | 公式里硬编码了 支出明细,改名就断 |
其他
- 表结构、建表命令序列、公式原文见
references/schema.md - 截图识别规范见
references/parse-prompt.md - 一分钱舍入差:
应承担是总额一半四舍五入,两人净额可能差 0.01。正常,按正值方的数转,不要为此改公式。
硬约束
- 建表、写入都是写操作,只做用户明确要求的,不主动改已有的表。
- 不在表格里加工作流/按钮/表单——那是上一个版本把自己做死的地方。
- 一轮结束就结束,不追加、不修改历史轮次的表。
安全边界(面向第一次用的人)
它只在你明确要求时才做: 新建一份飞书多维表格账本、写入支出记录、上传凭证原图、读取结算公式结果、用 --peer-contact 给对方开编辑权限。
它不会做什么:
- 不会碰你已有的表,不会改历史轮次的账本;
- 不会在识别后直接写账——先把汇总给你看,
confidence < 0.8或有疑点的行一定先问你; - 不会擅自给任何人开权限;只有你传了
--peer-contact并确认后才会加协作者; - 不落盘任何 token / 密钥;
ledger.json不含密钥,鉴权靠各自的 lark-cli 登录态; - 不自动执行转账,不做结算锁定,不跨轮累计。
什么时候会停下来问你: 识别置信度低、遇到转账/红包/提现、一图多笔、金额或日期缺失、要给对方开权限、汇率查不到。