在 macOS 中通过命令行与 Siri 交互

Interacting with Siri via the command line in macOS

我在我的 phone 上使用 Siri,并且可以随时随地创建提醒。当我在办公室时,我不想使用 Siri 打扰安静,所以我通常使用与 Reminders 应用程序集成的 Alfred 工作流程,或者直接使用 Reminders 应用程序。

但是,两者都有一个相当笨拙的界面,如果我可以在命令行中键入会容易得多:

$ siri "remind me to check stack overflow for responses to my question in 15 minutes"

macOS Sierra 已将 Siri 引入桌面,但到目前为止,除了 大声说话 之外,我一直无法找到与 Siri 交互的任何方式,并且Spotlight 无法匹配具有自然语言理解能力的 Siri。

Apple 已发布 Siri SDK,但它似乎主要与向 Siri 添加功能有关,而不是为了公开 Siri API。

Apple 是否向 macOS 上的 Siri 公开任何类型的API,以便人们可以通过命令行、系统调用或其他可执行文件发出 Siri 请求?

注意:我知道这个问题可以在 Ask Different、Super User 或 Unix & Linux 找到更好的归宿。最后,我决定与 API 或 SDK 进行一些编程集成是最可能的解决方案,因此 Stack Overflow 似乎是 post 最合适的地方。如果 mods 不同意,请迁移到最好的社区。

我今天想要相同的功能 - 我可以使用它但可以改进:https://youtu.be/VRLGCRrReog

TLDR 是 Rogue Amoeba 使用 LoopBack 并将 Siri 的输入 Mic 更改为 Loopback。例如,然后在终端中使用 Say 命令。

这不是来自命令行,而是更接近......我还没有测试过它,但是在 High Sierra 中有一种方法可以使用辅助功能设置来让您使用键盘向 Siri 提问。

如何启用:

  • 系统偏好设置 > 辅助功能 > Siri。
  • 单击 Enable Type to Siri 旁边的框,这样会出现一个勾号。
  • 现在,当您触发 Siri 时,会出现一个键盘,您可以在其中输入查询。

从这里抓取:https://www.macworld.co.uk/news/mac-software/how-use-siri-on-mac-3536158/

如 Brad Parks 所述,您可以从“辅助功能”菜单启用 'Type to Siri'。您可以使用它通过模拟按键与 Siri 交互。

我创建了一个简单的 Python 脚本,当从命令行调用时,它的行为与您在问题中所要求的一样。

脚本使用 keyboard Python 模块。

#!/usr/bin/python
import sys
import time
import keyboard

def trigger_siri():
    keyboard.press('command+space')
    time.sleep(0.3)
    keyboard.release('command+space')
    time.sleep(0.2)  # Wait for Siri to load

if __name__=='__main__':
    trigger_siri()
    keyboard.write(sys.argv[1])
    keyboard.send('enter')

Cliclick 是一个很棒的(免费的)工具,用于通过命令行触发鼠标和键盘事件。安装 Cliclick 后,我启用了 "Type to Siri"(系统偏好设置 > 辅助功能 > Siri)。我还将 Siri 的键盘快捷方式更改为 "Press Fn (Function) Space"(系统偏好设置 > Siri)。其他键盘快捷方式选项需要您 "Hold" 一个键,这是可以做到的,但它会让事情变得有点棘手。

完成所有这些后,我可以从终端调用 Siri,如下所示:

$ cliclick kd:fn kp:space ku:fn w:250 t:"turn on the living room lights" kp:return

更进一步,如果您熟悉 terminal aliases and functions,您可以创建一个 "siricli" 函数:

siricli(){
    cliclick kd:fn kp:space ku:fn w:250 t:"" kp:return
}

添加该功能后打开一个新终端window,现在您可以像这样从命令行调用 Siri:

siricli "turn on the living room lights"