Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

怎么让 siri 帮我记账 (不推荐使用,Just for fun) #1

Open
sword-jin opened this issue Feb 22, 2023 · 48 comments
Open

怎么让 siri 帮我记账 (不推荐使用,Just for fun) #1

sword-jin opened this issue Feb 22, 2023 · 48 comments

Comments

@sword-jin
Copy link
Owner

sword-jin commented Feb 22, 2023

背景

看到一条有趣的 Twitter,感觉非常有意思,于是我马上复刻了一个。

因为有工作流相关的工作背景知识,所以对于这个自动记账的功能原理大概是明白的。不过最大的不一样的点在于:如何把自然语言转成结构化的数据(一条账目本质上就是记账表里面的一条记录)。

借助最近非常火爆的 ChatGPT ,能非常简单处理自然语言。你可以非常直接的告诉 GPT 帮助分析问题,回复输出 JSON,这里实际操作很难保证完全的回复 JSON,有时候会带上一点文字(没调教好 🐶)。

目前 ChatGPT 背后的 openai 也提供了一定额度免费接口来供你使用,个人或者家庭场景使用完全不担心会超额。

数据存储

免费的数据存储现在也有很多服务提供一定量的免费额度,由于一直在使用 Notion,同时 Notion 提供一整套 API 给外部接入,非常方便。同时,未来需要做账单数据的统计,无论是在 Notion 的 UI 端创建表格来完成或者自己调用 API 来获取都是可以的。

很多年前大学的时候在用挖财记账,于是找了一下市面上的记账软件,没有发现好用的且能提供免费接口来记账的一款。

总之,数据还是存在自己能有一定控制权的地方比较好。

工作流设计

外部资源申请

OpenAI Token

https://platform.openai.com/account/api-keys 申请一个 OpenAI 的 API Token,需要使用 ChatGPT 的账号。

Notion Token & Database ID

Notion 通过自己应用接入的方式来进行集成,需要在开发者后台先新建一个应用,然后就可以获取这个 Token (不要随意泄露)。

CleanShot 2023-02-22 at 11 40 26@2x

然后,新建一个要记账的 Notion 表单,同时把新建的应用授权给这个页面(或者叫数据库)。

✨ Notion 表单模版 ✨

CleanShot 2023-02-22 at 11 43 29@2x

通过上面的浏览地址栏可以获取到这个表单的 Database ID
例如,这是 Notion 的链接,https://www.notion.so/b620?v=ga68h62k,其中,数据库 id 是 b620

这样,通过这个 Token 就可以调用 Notion API 来进行各种数据读写了。

创建 Siri 捷径

已经分享到 icloud,可自行获取,建议使用最新版:

  • v1.3
    • 接入 chat-gpt 模型
    • 增加时间计算(时间里面会带上时分秒)
      • 可使用 昨天上午我买了 ***,上周五,早上8点...
  • v1.2
    • 增加了计算账目时间(昨天,上周...)
    • 修复了一些流程问题
  • v1.1
  • v1.0

导入到本地之后,需要修改一些数据:

  • Username (记账的用户名)
  • Notion token
  • Notion database id
  • Gpt token (OpenAI Token)
@sword-jin sword-jin changed the title 怎么让 siri 帮我自动记账 怎么让 siri 帮我记账 Feb 22, 2023
@MQ-0707
Copy link

MQ-0707 commented Feb 25, 2023

快捷指令结合notion模板做任务看板
(记录可以做个一模板关于健身的模板比如跑步,骑行多少公里的notion看板,加快捷指令吗?)

@sword-jin
Copy link
Owner Author

sword-jin commented Feb 25, 2023

快捷指令结合notion模板做任务看板
(记录可以做个一模板关于健身的模板比如跑步,骑行多少公里的notion看板,加快捷指令吗?)

你有目前在用的运动类型的看板吗,我看看需要记录哪些数据。

找了几个看板,https://www.youtube.com/watch?v=rtzO5B8YA94

感觉运动类型的数据领域性有点强的,举铁类的,要记录每组的数据,跑步的话可能只需要时间和距离。

不像记账这个场景这么单一

@MQ-0707
Copy link

MQ-0707 commented Feb 25, 2023

just like this,可以碎片化的统计一些生活的数字,https://github.com/yihong0618/2023
https://github.com/yihong0618/2022

@artxia
Copy link

artxia commented Feb 25, 2023

建议加入时间值,例如:早上8点买了一份早餐花了12块

@sword-jin
Copy link
Owner Author

建议加入时间值,例如:早上8点买了一份早餐花了12块

可以,把现在这个日期字段扩充一些吧,改成带时间的

@sword-jin
Copy link
Owner Author

just like this,可以碎片化的统计一些生活的数字,https://github.com/yihong0618/2023
https://github.com/yihong0618/2022

哦哦,我知道这位的跑步打卡,挺酷的,你在用吗

@MQ-0707
Copy link

MQ-0707 commented Feb 27, 2023

在用,就是在想怎么把生活的琐事可以快速方便数据化,结合快捷指令,更好玩。> > just like this,可以碎片化的统计一些生活的数字,https://github.com/yihong0618/2023

https://github.com/yihong0618/2022

哦哦,我知道这位的跑步打卡,挺酷的,你在用吗

@MQ-0707
Copy link

MQ-0707 commented Mar 1, 2023

image类似于这种表格在notion里面就是单个任务数据是不断叠加的,结合快捷指令触发怎么实现,大佬?

@sword-jin

This comment was marked as resolved.

@MQ-0707
Copy link

MQ-0707 commented Mar 1, 2023

他好像用的是建立了不同的issue 分类,然后通过GitHub actions自动任务触发issue统计到一个表里面。他这个好像也能结合快捷指令。

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 1, 2023

https://github.com/skipmaple/Kobe,这个就是自动记录起床时间,用快捷指令触发。

这个倒是容易,要搞成各种列表数据,统计数据,notion 不一定支持。airtable 这个肯定可以的,我抽空研究研究,也有 API 可以供捷径来使用。

起床,闹钟关了可能又迷了30分钟 🐶

@MQ-0707
Copy link

MQ-0707 commented Mar 1, 2023

确实这个早起是一个很有挑战性的事情,年底一统计,应该很有意义😀,那个表格是不是飞书好像也有一个多维表格

@artxia
Copy link

artxia commented Mar 1, 2023

[v1.2]泄露了作者的key @sworday
另外建议原url升级 icloud可以做到。
bug反馈 1.2版 不能识别"昨天""前天" 报错时间 is not a property that exists.
需要在notion模板里面新增“时间”列

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 1, 2023

[v1.2]泄露了作者的key @sworday
另外建议原url升级 icloud可以做到。
bug反馈 1.2版 不能识别"昨天""前天" 报错时间 is not a property that exists.
需要在notion模板里面新增“时间”列

感谢,已经删了。时间这个,我用旧的模版测好像可以,之前有 时间 这一列的

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 1, 2023

确实这个早起是一个很有挑战性的事情,年底一统计,应该很有意义😀,那个表格是不是飞书好像也有一个多维表格

对,国内的是多维表格。发现了一个好玩的 https://notioncharts.io/embed/charts/1c37efb7-0414-410e-a483-ddb6708b9d2b

CleanShot 2023-03-01 at 15 03 54@2x

但这个只能有 5 个免费的图标。

突然有个想法,可以用 github ci 把 Notion 数据进行汇总,然后生成静态 html 和 图片,图片还能通过 Notion API 给更新到 Notion 看板上(理论上应该可以)。在这个项目里面实现一套图表的配置语法就可以了,甚至可以直接参考 Notion Charts 的。

同时数据源也不必受限于 Notion 了,读 Gitlab issue,外部 OpenAPI 的接口应该都是可以的。

或许现在已经有开源的这种静态的图标生成的框架了,grafana 就可以(不过应该不可以导出静态的东西)

@yeloveyou
Copy link

yeloveyou commented Mar 1, 2023

我在晚上发现问题了,你输入的内容可以解析在notion中,但是在表格中却没有插入数据,我试了很多次都是如此,如下图

图片点击展开

70405ec20839dda15e064238b226b52
25f46bf25a4f38c79c048f34afe5e0e

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 1, 2023

@yeloveyou

能否帮忙 debug 一下,应该是 1.2 更新后时间的问题,默认用了 UTC 时区了,换成北京时间要加 8 个小时,所以这条数据相当于是 +1 天后消费,你可以先把 Notion 表格的 Group 清理掉,应该就出来了,或者等我更新一下。

把 1.2 的时间更新取消了,OpenAI 计算出来的相对时间有很大的问题

@sword-jin
Copy link
Owner Author

建议加入时间值,例如:早上8点买了一份早餐花了12块

可以,把现在这个日期字段扩充一些吧,改成带时间的

@artxia OpenAI 对时间的处理太拉垮了,计算的相对时间很有问题,它真正都不知道现在是什么时间,我又把时间计算的部分回滚了

@yeloveyou
Copy link

对的,因为访问chatgpt需要挂外网节点,我估计是我挂的节点不同导致他的时间计算不对

@MQ-0707
Copy link

MQ-0707 commented Mar 2, 2023

确实这个早起是一个很有挑战性的事情,年底一统计,应该很有意义😀,那个表格是不是飞书好像也有一个多维表格

对,国内的是多维表格。发现了一个好玩的 https://notioncharts.io/embed/charts/1c37efb7-0414-410e-a483-ddb6708b9d2b

CleanShot 2023-03-01 at 15 03 54@2x

但这个只能有 5 个免费的图标。

突然有个想法,可以用 github ci 把 Notion 数据进行汇总,然后生成静态 html 和 图片,图片还能通过 Notion API 给更新到 Notion 看板上(理论上应该可以)。在这个项目里面实现一套图表的配置语法就可以了,甚至可以直接参考 Notion Charts 的。

同时数据源也不必受限于 Notion 了,读 Gitlab issue,外部 OpenAPI 的接口应该都是可以的。

或许现在已经有开源的这种静态的图标生成的框架了,grafana 就可以(不过应该不可以导出静态的东西)

image image

其实,在这个文章的基础上(https://sspai.com/post/75842),加上快捷指令再操作应该就更自动化了。

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 3, 2023

新版的 API 发布后,对时间的处理增强了很多,什么时间都可以计算出来。

curl https://api.openai.com/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer TOKEN' \
  -d '{
  "model": "gpt-3.5-turbo",
  "messages": [
    {
      "role": "user",
      "content": "你现在是一个智能的记账分析程序,帮我记录一些日常的家庭消费,现在时间是 2023-03-03 17:12:00,时区是 Asia/Shanghai。除此之外,你还有一些需要注意的地方"
    },
    {
      "role": "assistant",
      "content": "请问还有什么要注意的?"
    },
    {
      "role": "user",
      "content": "我需要知道消费的内容,消费时间(如果不知道就用现在的时间),消费金额,消费的币种(默认是 RMB),消费分类,以及为谁付的钱。我还需要告诉你一些规则,你输出给我的是一段 json 字符串,如果能分析出是一笔消费,返回如下:{\"code\": 0, \"data\": {\"title\": \"苹果\", \"category\": \"水果\", \"cost\": 20, \"currency\": \"RMB\", \"time\": \"2023-03-02T17:12:00+08:00\", \"pay_for\": \"Tom\"}}。如果这句话并不是消费,告诉我:{\"code\": 1}。"
    },
    {
      "role": "assistant",
      "content": "了解,请问还有什么要注意的?"
    },
    {
      "role": "user",
      "content": "你需要留意消费发生的时间,我告诉你的日期有可能是一个相对时间,同时,你还需要注意时区的处理。"
    },
    {
      "role": "assistant",
      "content": "好的,我明白了你的要求。请告诉我你的第一笔消费的细节。"
    },
    {
      "role": "user",
      "content": "刚刚买菜花了 90 元"
    },
    {
      "role": "assistant",
      "content": "{\"code\": 0, \"data\": {\"title\": \"买菜\", \"category\": \"生活开销\", \"cost\": 90, \"currency\": \"RMB\", \"time\": \"2023-03-03T17:12:00+08:00\", \"pay_for\": \"\"}}"
    },
    {
      "role": "user",
      "content": "错误的句子"
    },
    {
      "role": "assistant",
      "content": "{\"code\": 1}"
    },
    {
      "role": "user",
      "content": "上周一给闪闪买玩具花了 80 元"
    },
    {
      "role": "assistant",
      "content": "{\"code\": 0, \"data\": {\"title\": \"玩具\", \"category\": \"日常花费\", \"cost\": 80, \"currency\": \"RMB\", \"time\": \"2023-02-20T17:12:00+08:00\", \"pay_for\": \"闪闪\"}}"
    },
    {
      "role": "user",
      "content": "10分钟前给闪闪买奶粉 300 元"
    }
  ],
  "max_tokens": 100,
  "temperature": 0
}'

@yeloveyou

This comment was marked as resolved.

@sword-jin
Copy link
Owner Author

sword-jin commented Mar 6, 2023

@yeloveyou
表格不用的,等我更新一下 1.3 的捷径模版吧

@yeloveyou
Copy link

@yeloveyou 表格不用的,等我更新一下 1.3 的捷径模版吧

互联网的本质果然好,分享共助

@sword-jin

This comment was marked as resolved.

@artxia
Copy link

artxia commented Mar 6, 2023

功能建议:v1.3
使用 快捷指令 里面的“请求输入“功能, 可以实现Siri直接呼出操作,然后记录。而不再依靠点击操作,这样更便捷。
例如:“hi~ siri 智能记账” 然后说出 “今天早上10点买咖啡花了15元”

IMG_9827

IMG_9826

@sword-jin

This comment was marked as resolved.

@sword-jin
Copy link
Owner Author

@artxia 有一个问题,如果是通过点击进来的,就只能手动输入了,好像没有方法可以兼容, https://www.reddit.com/r/shortcuts/comments/tuisfl/how_to_tell_if_shortcut_was_invoked_through_siri

其实,现在也是可以用 siri 唤醒使用的,不过 prompt 不能自定义

@joylmy
Copy link

joylmy commented Mar 7, 2023

谢谢 sworday 的捷径!用上之后觉得好方便啊!

@artxia
Copy link

artxia commented Mar 8, 2023

确实无解。。。正如Reddit所说需要开发者选其一或者做2个版本。
不过从体验上来说,我觉得有Siri直接唤醒后,场景上也没必要使用点击输入了

@MQ-0707
Copy link

MQ-0707 commented Mar 9, 2023

yihong0618/gitblog#209

@sword-jin
Copy link
Owner Author

yihong0618/gitblog#209

我也关注这个 blog 了,不过我目前还没有这么强烈的记录欲 🐶

@HANLINMU
Copy link

HANLINMU commented Apr 2, 2023

你好,我有一个小问题哈,现在category这一个property是作为一个单独的property,如果category是一个relation连接到另外一个database,这样的话要怎样去拓展呢?

@sword-jin
Copy link
Owner Author

你好,我有一个小问题哈,现在category这一个property是作为一个单独的property,如果category是一个relation连接到另外一个database,这样的话要怎样去拓展呢?

在 notion 找了一下,好像没发现这个字段类型,你可以翻翻文档看支不支持

@HANLINMU
Copy link

HANLINMU commented Apr 3, 2023

你好,我有一个小问题哈,现在category这一个property是作为一个单独的property,如果category是一个relation连接到另外一个database,这样的话要怎样去拓展呢?

在 notion 找了一下,好像没发现这个字段类型,你可以翻翻文档看支不支持

就是我的记账database里面 category这个property 不是选择,也不是文字,而是一个relation 连接到另外一个database的。 因为我看现在基本上这整个流程都是基于一个database,category都是 选择 这个property。 所以我在想 是不是需要在这个后面写 因为现在这个都是properties
image

image

@sword-jin
Copy link
Owner Author

你好,我有一个小问题哈,现在category这一个property是作为一个单独的property,如果category是一个relation连接到另外一个database,这样的话要怎样去拓展呢?

在 notion 找了一下,好像没发现这个字段类型,你可以翻翻文档看支不支持

就是我的记账database里面 category这个property 不是选择,也不是文字,而是一个relation 连接到另外一个database的。 因为我看现在基本上这整个流程都是基于一个database,category都是 选择 这个property。 所以我在想 是不是需要在这个后面写 因为现在这个都是properties image

image

哦哦,原来如此,那你这个需要改捷径脚本,要把 openai 返回的这个类型和你另外的 Database 中的 database_id 映射

https://developers.notion.com/reference/property-object#relation

@candyboyou
Copy link

调用api要钱的呀。。。

@sword-jin
Copy link
Owner Author

调用api要钱的呀。。。
肯定啊,GPT-3便宜的

@zhyh6920
Copy link

siri 可以写入飞书的多维表格吗

@MQ-0707
Copy link

MQ-0707 commented Apr 30, 2023

大佬,记的账单数据怎么做成折线图表格统计数据金额,按月那种?

@sword-jin
Copy link
Owner Author

大佬,记的账单数据怎么做成折线图表格统计数据金额,按月那种?

可以的,使用 https://notioncharts.io

@sword-jin
Copy link
Owner Author

siri 可以写入飞书的多维表格吗

看上去可以 MarshalError

@346926484
Copy link

试了一下还不错,就是一次只能识别一条,这个是选用的模型的关系马

@asa1525
Copy link

asa1525 commented Jun 2, 2023

今天提示 you exceed your current quota, please check your plan and billing…

@sword-jin
Copy link
Owner Author

今天提示 you exceed your current quota, please check your plan and billing…

openai 需要充值,我已经停用了,不折腾这个了

@MorrisXu-Driving
Copy link

太牛了,我测试成功了

@sword-jin sword-jin changed the title 怎么让 siri 帮我记账 怎么让 siri 帮我记账 (不推荐使用,Just for fun) Nov 2, 2023
@StefanoDong
Copy link

小白一个 notion 接口错误 notion 调用 接口 要钱吗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests