# 用 Shortcuts 和 ChatGPT 批量记账到 MoneyWiz

> 本文公开全文。

原文：https://utgd.net/article/20174

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

在 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 格式。进一步简化了流程。

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

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

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

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

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

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

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

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

接下来是魔术揭秘时间。

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

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

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

### Shortcuts 操作——获取日期

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

“年月日”格式的时间用来作为 CSV 中消费记录的日期（如前文所述，MoneyWiz 只支持年月日的日期）；

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

### OCR 消费记录

用到的工具：速拼（免费）、白描（免费）。

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

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

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

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

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

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

### 通过 OpenCat 处理

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

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 中指定的对话。

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

### Shortcuts 中的操作

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

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

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

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

### 导入 MoneyWiz

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

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 会报错，导致无法获得结果

- ChatGPT App 自带的 Shortcuts 动作 优点1：不需要 API 优点2：目前唯一通过自动化方式使用 ChatGPT 4 的方式 优点3：相当于无限免费调用的 ChatGPT 3\.5 和 ChatGPT 4 的 API！ 优点4：所有对话记录均保存在 ChatGPT 中，方便随时继续对话 瓶颈：返回大量内容时，容易中断输出，需要手动点击继续。这在一些自动化场景是不可接受的。不过随着技术进步问题应该会得到解决。

---

[前往标准阅读页](https://utgd.net/article/20174?audience=web)
