一句话进来,四个字段出去:金额、类别、日期、备注。 只有金额是用户明说的,其余三个都是推断。推断出来的字段必须能被改。 汇总让工具算,别让模型算——这是第 6 章那句话的又一次应用。
上一节是把已有的东西搬过去,这一节是从自然语言里造数据。 造数据比搬数据难在一步:你要为「推断错了」留一条后路。 教材这一节用的是「AI 小记」这类记账服务,通过它的接口写入。界面操作照原样说明。
一、获取 AI 小记 API:和上一节一个模式
教材这一节的做法和 flomo 几乎一模一样:网页版里找设置,找到开放接口,拿到一个地址或者一个 Key。 这类面向个人的小服务,接口通常极简:一个写入地址、一个查询地址。 没有沙箱、没有测试环境、没有限流文档。 极简的另一面是没保护: 写错了就是真账本里多一笔。所以第一件要做的事是把测试和正式分开——用一个小号账本,或者先只跑查、 不跑写。
这一步是界面操作,本沙箱没有这个账号,照原样写、不执行。演示用同形状的两个工具替它。 老规矩:替的是「往哪写」,不是「怎么写」。
二、一句话里要抠四个字段
「昨天晚上跟客户吃饭花了 380,记账」——这句话里明说的只有 380。 日期要从「昨天晚上」推成 10-30,类别要从「吃饭」推成餐饮,备注是原话留一份。 四个字段里三个是推断。这就是记账这类工具的真实难点:不在调接口,在人话变字段。
演示 ① 那张表第三列写的是「抠不出来会怎样」,那一列比第一列重要。 金额抠不出来,这笔记不了,用户当场就知道。类别抠错了,要等月底看月报,才发现全挤在「其他」里。 错得越隐蔽,越难被发现。
三、推断出来的,一定要能改
演示里日期和类别都是模型推的,用户没直说。 如果工具只有「加」、没有「改」和「删」,模型推错一次,这条账就永远是错的。 用户唯一的补救办法是去网页上手工改。 所以账本的最小工具集是三个:加、改、删。演示只做了加和查,是为了把重点放在字段上, 真做的时候三个都不能少。
这一条推广开:凡是模型推断的字段,都要留一条人工修正的路。推断率越高,这条路越要紧。 反过来说,一个字段模型基本推不错(比如金额),可以不给改,但得给删——防重复。
四、写用工具,算也用工具
演示 ④ 那张月报是 expense.report 算出来的:三笔,合计 534.00 元。 这一节最容易犯的错是让模型自己加。它加得出来,但也会加错,而且错了看起来一样。 工具算的好处是口径固定:按类别分组、保留两位小数、笔数一起返回。同一个问题问十次,十次一样。
这就是第 6 章那句话的又一次应用:答案唯一且能算的,别让模型算。第 9 章充电桩估算充电时间那次, 也是同一个道理。 顺带一句:月报里「分类小计加起来等于合计」这件事,也该由工具保证,别指望模型对得上。
五、三个坑,都在运营层面
演示 ⑤ 那张表三行:金额带单位、类别太细、重复记账。 第一个坑靠提示词给示例、工具只收数字解决。在接口这一层收窄,比在提示词里反复叮嘱可靠。 第二个坑是设计问题:类别给十来个固定的就够,别让模型自由发挥。 分类是为了看趋势,不是为了记清每一笔的细节。
第三个坑演示里没出现,因为三句话各不相同。真用一周就会遇到,尤其语音输入重复识别的时候。 防重靠指纹:金额加日期加备注做哈希,重复就拒。这一招和上一节的笔记去重是同一个办法。
六、动手 Demo:智能记账:三个字段靠推断
造一个记账 Server:一个写工具、一个查工具。 三句话依次记进去,看日期和类别是怎么被推出来的。 最后按月汇总,看合计和分类小计对不对得上。
led = Server('ledger-mcp')
led.add(Tool('expense.add', '记一笔:日期、类别、金额、备注', SCHEMA, add))
led.add(Tool('expense.report', '按月汇总:笔数、合计、分类小计', SCHEMA, rep))
# 用户只说了一句话,模型要补齐另外三个字段
call(led, 'expense.add', {'date': '2026-10-30', # 「昨天晚上」推的
'cat': '餐饮', # 「吃饭」推的
'amount': 380, # 唯一明说的
'note': '跟客户吃饭'})
r = call(led, 'expense.report', {'month': '2026-10'})
print(r['sum'], r['count'], r['by_cat'])
实跑输出:
--------------------------------------------------------------------
智能记账:把一句话变成四个字段
--------------------------------------------------------------------
① 一句话里要抠出四个字段
--------------------------------------------------------------------
用户:昨天晚上跟客户吃饭花了 380,记账
| 字段 | 从哪儿来 | 抠不出来会怎样 |
|---|---|---|
| 金额 | 「380」 | 记不了 |
| 类别 | 「吃饭」推成餐饮 | 月报里全挤在「其他」 |
| 日期 | 「昨天晚上」推成昨天 | 记成今天,对不上账 |
| 备注 | 原话留着 | 月底想不起来这笔是什么 |
四个字段里只有金额是硬要求。类别和日期靠推断,推断就可能错,所以工具要允许人改。
这一节最关键的一句:【推断出来的字段,一定要能被覆盖。】
② 一个写入工具,一个查询工具
--------------------------------------------------------------------
③ 三句话,三次调用
--------------------------------------------------------------------
用户:昨天晚上跟客户吃饭花了 380,记账
模型:expense.add(date=2026-10-30, cat=餐饮, amount=380) -> total 1
用户:打车去公司 26 块
模型:expense.add(date=2026-10-31, cat=交通, amount=26) -> total 2
用户:买了两本书 128
模型:expense.add(date=2026-10-31, cat=购物, amount=128) -> total 3
注意中间那一行:日期和类别都是模型推断的,用户没直说。「昨天晚上」推成 10-30,「吃饭」推成餐饮。
推断错了怎么办?记账工具必须有修改和删除,否则模型一次推错,这条账就永远是错的。
④ 月报:一个查询工具就够
--------------------------------------------------------------------
| 类别 | 小计 |
|---|---:|
| 交通 | 26.00 元 |
| 购物 | 128.00 元 |
| 餐饮 | 380.00 元 |
合计 534.00 元,共 3 笔。
汇总这件事不该交给模型算。让它算,会出现「分类加起来不等于合计」这种事;让工具算,一次就对。
这就是第 6 章那句话的又一次应用:答案唯一且能算的,别让模型算。
⑤ 记账这件事的三个坑
--------------------------------------------------------------------
| 坑 | 表现 | 怎么办 |
|---|---|---|
| 金额带单位 | 「380 块」「380 元」「3 百 8」 | 提示词里给示例,工具只收数字 |
| 类别太细 | 餐饮分早中晚,月底汇总一屏放不下 | 先给十来个固定类别 |
| 重复记账 | 同一句话说了两遍 | 金额加日期加备注做指纹,重复就拒 |
第三个坑在演示里没出现,因为三句话各不相同。真用一周就会遇到——尤其是语音输入重复识别的时候。
①第一张表四行,第二列是「从哪儿来」。三行写着推,只有金额那一行是数字。 ②第三段三句话三次调用,每次只回一个 total。真机上那是记账服务返回的总笔数,用来对账。 ③月报那张表三行两个小计,合计 534.00 元。这个数是工具加的,不是模型加的。 ④534 就是 380 加 26 加 128。手算一遍就知道口径对不对——分类小计加起来必须等于合计。 ⑤最后那张表三行,第三行「重复记账」演示里没出现,因为三句话都不一样。
30 秒实验
- 再说一句「刚才那 380 记错了,是 350」,想一下工具要提供什么才能改。
- 把「打车去公司 26 块」说两遍,看指纹能不能挡住第二条。
- 把类别从固定的十来个改成自由输入,看月报那张表会变成几行。
常见误区
- 「日期用户会说清楚。」说的是「昨天晚上」。模型要把它变成 10-30,就可能变错。
- 「汇总让模型算一下就行。」它算得出也会算错,且错了看不出来。让工具算,口径还固定。
- 「推断错了用户会自己发现。」类别错要等到月底。所以得有改和删。
自测三问(点开对答案)
1. 四个字段里哪几个是推断出来的? —— 类别和日期。金额是用户明说的,备注是原话留存。 2. 为什么记账工具必须有「改」和「删」? —— 推断可能错。只有「加」的话,错的那笔改不回来,只能去网页上手工改。 3. 月报的合计该谁算? —— 工具。模型算得出但也会错,错得还看不出来;工具算口径固定,十次一样。记账是「用户开口,智能体动手」。 下一节反过来:没人开口,到点自己动。难点从「抠字段」挪到了「没人兜底」。
- ☐ (本篇完,下一篇 10.3 每日资讯获取智能体)