article_image

一直为超市记账苦恼。对着巨长的小票,欲哭无泪。要一笔一笔打字记录描述、金额,还要选择恰当的分类,需要巨大的勇气和精力。我一直在寻找一种能够自动化记账到 MoneyWiz 的方法。

消费记录截图
消费记录截图

在 Hum 提出Shortcuts 结合 CSV,在本地创建、读取和修改表格后,我了解到可以用 CSV 来组织数据。这极大的拓宽了我日常中 Shortcuts 的使用场景。

某天,用 MoneyWiz 记账的时候,我灵光一闪:MoneyWiz 能不能通过导入 CSV 来记账?

查了一下 MoneyWiz 官方文档发现可以,但是有两个缺陷:

  1. 时间只能精确到日期,不能精确到时间。
  2. 消费记录的分类只能写在 CSV 中,不能导入后自动匹配分类。

问题不大,至少不用一个个打字记账了,于是用 Shortcuts 串联了几个识别消费内容的动作并组织成 CSV 格式来记账,记账活动顿时轻松了很多。在 UNTAG 网站上也有类似使用 Shortcuts + CSV 来记录数据的文章:Shortcuts 结合 CSV,自动化实现每天入账记录

用了一段时间后,发现虽然已经大大减少了记账操作步骤,但一个个选择分类还是挺累。

某天,福至心灵:“哎呀,分类不是 ChatGPT 最擅长的任务吗?”如过可以让 ChatGPT 帮我把类别写入到 CSV 中,就不用手动选择分类了,减少了大量的记账操作和精力消耗。

通过与 Hum 进一步讨论发现,甚至可以直接让 ChatGPT 生成 CSV 格式的内容,不用在 Shortcuts 中自己拼出 CSV 格式。进一步简化了流程。

ChatGPT 整理的消费记录 CSV
ChatGPT 整理的消费记录 CSV

随着知识领域的拓宽(CSV)和新技术的出现(ChatGPT),一步一步实现我的理想——自动化记账到 MoneyWiz。

现在的问题是如何方便的在 Shortcuts 中使用 ChatGPT,经过一番调研选择使用“熊猫吃短信” App 开发者 @waylybaye 的 ChatGPT API 套壳客户端 OpenCat。文末有其他方案的简要对比。

接下来,就是见证奇迹的时刻。

见证奇迹的时刻
见证奇迹的时刻

完美的消费记录。描述、价格、分类、时间全都有了。

不需要手动打字记录、不需要思考分类,只需要提供消费记录,就可以记录到 MoneyWiz 中。

这是技术进步带来的效率提升。省略下面的细节,低层次的劳动自动化,纯粹的关注“关心的事情”——有组织的消费信息。

魔法就藏在人类的思维中。

n 年前在 Checked 播客谈论记账“快、准、细”的我们,一定没想过会在 MoneyWiz 这个古板的软件施展这样的魔法。

接下来是魔术揭秘时间。

整个流程分为三个部分:OCR 消费记录、通过 OpenCat 处理、导入 Moneywiz。

然后用 Shortcuts 将所有操作串联起来。

在每一个环节中都抛弃了大量繁琐的手工劳动,更关注高层次的“我想要什么”。

Shortcuts 操作——获取日期

首先用 Shortcuts 获取两种格式的日期。

“年月日”格式的时间用来作为 CSV 中消费记录的日期(如前文所述,MoneyWiz 只支持年月日的日期);

包含“时分秒”的时间用来作为 CSV 的文件名;

获取日期
获取日期

OCR 消费记录

用到的工具:速拼(免费)、白描(免费)。

速拼用来拼长图,然后白描用来识别文本。

OCR 识别结果
OCR 识别结果

通过 Shortcuts 来打开速拼和白描,并添加一个“等待返回”动作,暂停执行 Shortcuts,直到重新返回 Shortcuts 再继续运行剩下的流程。

速拼和白描提供了丰富的 x-callback-url 操作,但是我们需要一些软件内手动的调整,x-callback-url 动作并不能满足我们的精细需求。

白描的优点在于:可以选择识别区域、可以在识别结果页面显示图片进行校对。

动作编写好了,等到运行时只需拼长图,手动返回 Shortcuts,继续识别文本并校对,复制结果,再手动返回 Shortcuts 继续运行剩下的流程。

注意:“等待返回”仅在从 Shortcuts App 中运行 Shortcuts 时有效。这意味着整套流程不能从其他地方运行,只能在 Shortcuts 中点击运行。

通过 OpenCat 处理

在 OpenCat 中新建一个对话,设置标题为“生活消费整理为CSV”,跳过设置主题的步骤,在创建好的对话中点击右上角 3 个点,上下文消息个数选择0,来节省 token 费用以及避免不必要的对话干扰。

在 OpenCat 中新建对话
在 OpenCat 中新建对话

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 中处理
将消费内容发送到 OpenCat 中处理

再添加一个“等待返回”动作,以便复制 ChatGPT 生成的结果回到 Shortcuts 中继续流程。

Shortcuts 中的操作

至此整个流程已经到了尾声。现在只需要将复制过来的结果,保存为 CSV 并用 MoneyWiz 打开即可。

将复制来的结果保存为 CSV
将复制来的结果保存为 CSV

因为文件保存在 iCloud 中,需要等待一会儿来确保文件可被访问。

如遇到 MoneyWiz 无法导入的情况,可以去“文件”App中手动打开 CSV 文件。

有时手动打开 CSV 文件也无法导入,一般是 MoneyWiz 的 bug,划掉 MoneyWiz,再次尝试打开 CSV 即可。

导入 MoneyWiz

跨过重重阻碍来到验收环节。

导入 MoneyWiz
导入 MoneyWiz

OK,完美。

一共 37 笔消费描述、价格、分类、时间全都记录到了 MoneyWiz。

小结

从 Hum 那里学习了很多前沿知识,每次学习到的新知识我都会思考一番哪里“用”得上。慢慢的,我发现在“用”的过程中,我的自动化能力得到了极大的拓展。而且以“用”为中介,我触及了一个又一个数字信息领域。每一个新发现的领域都可以被纳入到已经认识到的“用”的领域中,这个探索过程使我感到非常的快乐。

这次在摸索 ChatGPT 记账过程中,意外的遇到 GET URL Contents 报错。在寻找解决办法的过程中,意外发现居然可以在 Shortcuts 运行 Python 脚本!这其中有巨大的探索空间。一些繁琐的 Shortcuts 脚本也许都可以用编程的方式精简一番。

在探索自动化的过程中,总是有恰到好处的难度,总是有学习、解决、创造的乐趣。能够在这个领域中学习、分享、交流,实在是非常幸运和开心。

Hum 曾评论——

这是新手到 Power User 的 Shortcuts。

我的体验是,每一个 Shortcuts 都是新手到 Power User 的 Shortcuts。

拓展

经过我的探索,目前一共有 4 种在 Shortcuts 中使用 ChatGPT 的方式,各有优势与瓶颈,可根据情况使用。

  1. Shortcuts 直接调用 ChatGPT API
    • 优点:通过 API 使用,灵活性高
    • 瓶颈:当 ChatGPT 生成内容时间太长,Shortcuts 的 Get URL Contents 组件会报错“Request time out”。导致运行失败,无法获得返回结果。
  2. 通过支持 Shortcuts 组件的 Python App 运行 Python 脚本访问 ChatGPT API
    • Pythonista 68 元、Pyto 98 元
    • 优点1:可以避免 Shortcuts 的 Get URL Contents 组件会报错“Request time out”问题。
    • 优点2:自定义程度高,随意处理输入和输出
    • 瓶颈:需要付费、使用门槛高
  3. ChatGPT API 套壳客户端——OpenCat
    • URL Scheme
      • 优点1:不太会遇到中断输出的情况,一般可以获得完整输出
      • 优点2:可以自定义访问 API 时的参数。
      • 优点3:还有一些在记账场景之外的优点不过多介绍了
      • 瓶颈:不能直接在 Shortcuts 中获取结果
    • Shortcuts 动作
      • 优点:不需要编写 URL Scheme,可以直接获得返回结果
      • 瓶颈:返回内容太长时,Shortcuts 会报错,导致无法获得结果
  4. ChatGPT App 自带的 Shortcuts 动作
    • 优点1:不需要 API
    • 优点2:目前唯一通过自动化方式使用 ChatGPT 4 的方式
    • 优点3:相当于无限免费调用的 ChatGPT 3.5 和 ChatGPT 4 的 API!
    • 优点4:所有对话记录均保存在 ChatGPT 中,方便随时继续对话
    • 瓶颈:返回大量内容时,容易中断输出,需要手动点击继续。这在一些自动化场景是不可接受的。不过随着技术进步问题应该会得到解决。

author_avatar

https://twitter.com/fastLonggogo