一直为超市记账苦恼。对着巨长的小票,欲哭无泪。要一笔一笔打字记录描述、金额,还要选择恰当的分类,需要巨大的勇气和精力。我一直在寻找一种能够自动化记账到 MoneyWiz 的方法。
![消费记录截图](https://cdn.utgd.net/assets/uploads/2023/06/FG-151955-J.png)
在 Hum 提出Shortcuts 结合 CSV,在本地创建、读取和修改表格后,我了解到可以用 CSV 来组织数据。这极大的拓宽了我日常中 Shortcuts 的使用场景。
某天,用 MoneyWiz 记账的时候,我灵光一闪:MoneyWiz 能不能通过导入 CSV 来记账?
查了一下 MoneyWiz 官方文档发现可以,但是有两个缺陷:
- 时间只能精确到日期,不能精确到时间。
- 消费记录的分类只能写在 CSV 中,不能导入后自动匹配分类。
问题不大,至少不用一个个打字记账了,于是用 Shortcuts 串联了几个识别消费内容的动作并组织成 CSV 格式来记账,记账活动顿时轻松了很多。在 UNTAG 网站上也有类似使用 Shortcuts + CSV 来记录数据的文章:Shortcuts 结合 CSV,自动化实现每天入账记录 。
用了一段时间后,发现虽然已经大大减少了记账操作步骤,但一个个选择分类还是挺累。
某天,福至心灵:“哎呀,分类不是 ChatGPT 最擅长的任务吗?”如过可以让 ChatGPT 帮我把类别写入到 CSV 中,就不用手动选择分类了,减少了大量的记账操作和精力消耗。
通过与 Hum 进一步讨论发现,甚至可以直接让 ChatGPT 生成 CSV 格式的内容,不用在 Shortcuts 中自己拼出 CSV 格式。进一步简化了流程。
![ChatGPT 整理的消费记录 CSV](https://cdn.utgd.net/assets/uploads/2023/06/FG-151950-I.png)
随着知识领域的拓宽(CSV)和新技术的出现(ChatGPT),一步一步实现我的理想——自动化记账到 MoneyWiz。
现在的问题是如何方便的在 Shortcuts 中使用 ChatGPT,经过一番调研选择使用“熊猫吃短信” App 开发者 @waylybaye 的 ChatGPT API 套壳客户端 OpenCat。文末有其他方案的简要对比。
接下来,就是见证奇迹的时刻。
![见证奇迹的时刻](https://cdn.utgd.net/assets/uploads/2023/06/FG-151954-2.png)
完美的消费记录。描述、价格、分类、时间全都有了。
不需要手动打字记录、不需要思考分类,只需要提供消费记录,就可以记录到 MoneyWiz 中。
这是技术进步带来的效率提升。省略下面的细节,低层次的劳动自动化,纯粹的关注“关心的事情”——有组织的消费信息。
魔法就藏在人类的思维中。
n 年前在 Checked 播客谈论记账“快、准、细”的我们,一定没想过会在 MoneyWiz 这个古板的软件施展这样的魔法。
接下来是魔术揭秘时间。
整个流程分为三个部分:OCR 消费记录、通过 OpenCat 处理、导入 Moneywiz。
然后用 Shortcuts 将所有操作串联起来。
在每一个环节中都抛弃了大量繁琐的手工劳动,更关注高层次的“我想要什么”。
Shortcuts 操作——获取日期
首先用 Shortcuts 获取两种格式的日期。
“年月日”格式的时间用来作为 CSV 中消费记录的日期(如前文所述,MoneyWiz 只支持年月日的日期);
包含“时分秒”的时间用来作为 CSV 的文件名;
![获取日期](https://cdn.utgd.net/assets/uploads/2023/06/FG-151951-r.png)
OCR 消费记录
用到的工具:速拼(免费)、白描(免费)。
速拼用来拼长图,然后白描用来识别文本。
![OCR 识别结果](https://cdn.utgd.net/assets/uploads/2023/06/FG-151951-N.png)
通过 Shortcuts 来打开速拼和白描,并添加一个“等待返回”动作,暂停执行 Shortcuts,直到重新返回 Shortcuts 再继续运行剩下的流程。
速拼和白描提供了丰富的 x-callback-url 操作,但是我们需要一些软件内手动的调整,x-callback-url 动作并不能满足我们的精细需求。
白描的优点在于:可以选择识别区域、可以在识别结果页面显示图片进行校对。
动作编写好了,等到运行时只需拼长图,手动返回 Shortcuts,继续识别文本并校对,复制结果,再手动返回 Shortcuts 继续运行剩下的流程。
注意:“等待返回”仅在从 Shortcuts App 中运行 Shortcuts 时有效。这意味着整套流程不能从其他地方运行,只能在 Shortcuts 中点击运行。
通过 OpenCat 处理
在 OpenCat 中新建一个对话,设置标题为“生活消费整理为CSV”,跳过设置主题的步骤,在创建好的对话中点击右上角 3 个点,上下文消息个数选择0,来节省 token 费用以及避免不必要的对话干扰。
![在 OpenCat 中新建对话](https://cdn.utgd.net/assets/uploads/2023/06/FG-151952-P.png)
OpenCat 支持 URL Scheme,调用的格式为——
opencat://conversations/对话标题?message=Hello
URL Scheme 是付费功能,加上其他功能一共 48 元,不想付费的话手动打开对话也无妨。
Shortcuts 中的操作
回到 Shortcuts 中继续制作流程。
这一步是制作通过 OpenCat 发送给 ChatGPT 的消息文本。这个文本包含两部分,一部分是 prompt,一部分是消费内容。
先来看 prompt——
请你扮演生活记账专家,为消费记录分类。
以下是任务描述:
1. 提供给你消费记录,从以下类别中选择一个消费类别:肉类、蔬菜、主食、饮料、零食、点心、水果、奶类、调料、海鲜、其他、咖啡。
2. 如果没有合适的类别,请选择“其他”类别。
3. 提供给你的内容包裹在```内
4. 确定类别后,在类别名称前面添加前缀“餐饮 > ”
5. 回复给我 CSV 格式,不要回复除 CSV 以外任何多余的文本
6. CSV 中“日期”列使用我提供给你的日期,格式为YYYY-MM-dd。
以下是可供参考的例子:
给你的输入:
三全状元芹菜猪肉饺子612g/袋
¥4.2
康师傅方便面
¥2.3
和路雪冰冰西瓜口味冰棍80g/支
¥1.2
给我的结果:
"描述","金额","日期","分类"
“三全状元芹菜猪肉饺子612g/袋”,"¥4.2","2023-05-31","餐饮 > 主食"
“康师傅方便面”,"¥2.3","2023-05-31","餐饮 > 主食"
“和路雪冰冰西瓜口味冰棍80g/支”,"¥1.2","2023-05-31","餐饮 > 点心"
以下是要处理的内容:
```
```
这里用到了几个 prompt 技巧:
- 限定场景:生活记账专家(ChatGPT 官方的建议:通过设定具体的场景,GPT 对您想要什么的猜测越少,您获得它的可能性就越大)。
- 限定类别,避免每次分类结果不一致无法导入。
- 要求不要回复额外的文本。
- 提供例子供 ChatGPT 学习(可以提供更多例子来做个人定制化)。
- 使用 ``` 符号限定输入,避免产生混乱(ChatGPT 官方的建议:任务越复杂,消除任务细节的歧义就越重要。不要让 GPT 额外工作以准确理解您对它们的要求)
这是 ChatGPT 官方出品的GPT 最佳实践可以快速学习一些 prompt 原则。
另外,根据 MoneyWiz 官方文档,分类格式为“主分类 > 二级分类”。
prompt 设定好了,接下来通过 Shortcuts 中的变量插入消费内容,接着使用 URL Scheme 将消息发送到 OpenCat 中指定的对话。
![将消费内容发送到 OpenCat 中处理](https://cdn.utgd.net/assets/uploads/2023/06/FG-151955-1.png)
再添加一个“等待返回”动作,以便复制 ChatGPT 生成的结果回到 Shortcuts 中继续流程。
Shortcuts 中的操作
至此整个流程已经到了尾声。现在只需要将复制过来的结果,保存为 CSV 并用 MoneyWiz 打开即可。
![将复制来的结果保存为 CSV](https://cdn.utgd.net/assets/uploads/2023/06/FG-151955-P.png)
因为文件保存在 iCloud 中,需要等待一会儿来确保文件可被访问。
如遇到 MoneyWiz 无法导入的情况,可以去“文件”App中手动打开 CSV 文件。
有时手动打开 CSV 文件也无法导入,一般是 MoneyWiz 的 bug,划掉 MoneyWiz,再次尝试打开 CSV 即可。
导入 MoneyWiz
跨过重重阻碍来到验收环节。
![导入 MoneyWiz](https://cdn.utgd.net/assets/uploads/2023/06/FG-151950-G.png)
OK,完美。
一共 37 笔消费描述、价格、分类、时间全都记录到了 MoneyWiz。
小结
从 Hum 那里学习了很多前沿知识,每次学习到的新知识我都会思考一番哪里“用”得上。慢慢的,我发现在“用”的过程中,我的自动化能力得到了极大的拓展。而且以“用”为中介,我触及了一个又一个数字信息领域。每一个新发现的领域都可以被纳入到已经认识到的“用”的领域中,这个探索过程使我感到非常的快乐。
这次在摸索 ChatGPT 记账过程中,意外的遇到 GET URL Contents 报错。在寻找解决办法的过程中,意外发现居然可以在 Shortcuts 运行 Python 脚本!这其中有巨大的探索空间。一些繁琐的 Shortcuts 脚本也许都可以用编程的方式精简一番。
在探索自动化的过程中,总是有恰到好处的难度,总是有学习、解决、创造的乐趣。能够在这个领域中学习、分享、交流,实在是非常幸运和开心。
Hum 曾评论——
这是新手到 Power User 的 Shortcuts。
我的体验是,每一个 Shortcuts 都是新手到 Power User 的 Shortcuts。
拓展
经过我的探索,目前一共有 4 种在 Shortcuts 中使用 ChatGPT 的方式,各有优势与瓶颈,可根据情况使用。
- Shortcuts 直接调用 ChatGPT API
- 优点:通过 API 使用,灵活性高
- 瓶颈:当 ChatGPT 生成内容时间太长,Shortcuts 的 Get URL Contents 组件会报错“Request time out”。导致运行失败,无法获得返回结果。
- 通过支持 Shortcuts 组件的 Python App 运行 Python 脚本访问 ChatGPT API
- Pythonista 68 元、Pyto 98 元
- 优点1:可以避免 Shortcuts 的 Get URL Contents 组件会报错“Request time out”问题。
- 优点2:自定义程度高,随意处理输入和输出
- 瓶颈:需要付费、使用门槛高
- ChatGPT API 套壳客户端——OpenCat
- URL Scheme
- 优点1:不太会遇到中断输出的情况,一般可以获得完整输出
- 优点2:可以自定义访问 API 时的参数。
- 优点3:还有一些在记账场景之外的优点不过多介绍了
- 瓶颈:不能直接在 Shortcuts 中获取结果
- Shortcuts 动作
- 优点:不需要编写 URL Scheme,可以直接获得返回结果
- 瓶颈:返回内容太长时,Shortcuts 会报错,导致无法获得结果
- URL Scheme
- ChatGPT App 自带的 Shortcuts 动作
- 优点1:不需要 API
- 优点2:目前唯一通过自动化方式使用 ChatGPT 4 的方式
- 优点3:相当于无限免费调用的 ChatGPT 3.5 和 ChatGPT 4 的 API!
- 优点4:所有对话记录均保存在 ChatGPT 中,方便随时继续对话
- 瓶颈:返回大量内容时,容易中断输出,需要手动点击继续。这在一些自动化场景是不可接受的。不过随着技术进步问题应该会得到解决。