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

18

我会在手机和手表上使用Siri来随时创建提醒事项。当我在办公室时,我不想打扰到安静的环境,因此通常会使用与提醒事项应用程序集成的Alfred工作流程,或直接使用提醒事项应用程序。

然而,两者界面都有点笨拙,如果我可以直接在命令行中输入就会容易得多:

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

macOS Sierra已经将Siri引入了桌面,但迄今为止,我无法找到与Siri互动的方式,除了实际大声说出来,而且Spotlight也不具备自然语言理解匹配Siri的功能。

苹果公司已经宣布了Siri SDK,但似乎主要是用于向Siri添加功能,而不是公开Siri API。

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

注:我知道这个问题可能更适合发布在Ask Different、Super User或Unix & Linux等社区。最终,我决定一些程序化地集成API或SDK是最有可能的解决方案,因此Stack Overflow似乎是最合适的发布地点。如果管理员不同意,请转移到最合适的社区。


1
刚刚安装了Sierra更新,和你一样有同样的想法。不想在办公室与Siri交谈,宁愿在bash中键入命令。这应该是一个自然的功能,因为Siri听到命令后的第一项工作很可能涉及将该命令解析为文本。 - rtm
4个回答

8
我今天也想要同样的功能 - 我让它工作了,但仍然可以改进:https://youtu.be/VRLGCRrReog 简而言之,使用Rogue Amoeba的LoopBack,并将Siri的输入麦克风更改为Loopback。 然后在终端中使用Say命令,例如。

不错的技巧,但我希望有一种更直接的方法 :) - devth
很棒的解决方案! - FRAGA

8

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

如何启用它:

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

摘自此处:https://www.macworld.co.uk/news/mac-software/how-use-siri-on-mac-3536158/


5
如Brad Parks所述,您可以从“辅助功能”菜单启用“键入Siri”。您可以使用这个功能模拟按键来与Siri交互。
我创建了一个简单的Python脚本,当从命令行调用时,就像您在问题中请求的那样运行。
该脚本使用Python模块keyboard
#!/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')

那个键盘库似乎在下载整个pypi注册表.... - sorin

3

Cliclick 是一个非常好用(且免费)的工具,可通过命令行触发鼠标和键盘事件。在安装 Cliclick 后,我启用了“对 Siri 进行打字输入”(系统偏好设置 > 辅助功能 > Siri)。我还将 Siri 的键盘快捷键更改为“按 Fn(函数)空格键”(系统偏好设置 > Siri)。其他键盘快捷键选项需要您“按住”一个键,虽然也可以实现,但会稍微复杂一些。

完成所有设置后,我可以在终端中使用如下命令调用 Siri:

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

进一步地,如果您熟悉终端别名和函数,则可以创建一个“siricli”函数:

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

在添加该功能后,打开一个新的终端窗口,现在你可以像这样从命令行调用Siri:
siricli "turn on the living room lights"

这是我最喜欢的解决方案。谢谢! - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接