Back
Featured image of post 打造MacOS下最便捷的AI使用姿势

打造MacOS下最便捷的AI使用姿势

在上一篇文章中,我提到了一些关于如何更高效、便捷地调用AI能力的问题。本文将教你如何在10秒钟内完成一次AI交互。在Siri变得更加智能之前,这可能是MacOS下最方便的使用方式了。即使将来Siri与OpenAI结合,它也有自己的独特优势。

需求

细说起来我想要的还挺多,主要有几个点:

交互便捷性

打开网页进行输入和交互的方式依然略显繁琐。每次需要创建会话、选择模型、输入内容,过程繁杂且容易分心。有没有更便捷的方式?我想问AI的问题很简单很临时,这么搞更重要的是工作的上下文切换导致分神。

多模型支持

有时某些AI网站还打不开,不得不切换一家服务,这种时候更麻烦,你还要记那么多网站。不光切换网站,切换模型也麻烦,我常用的就那几个,有没有好的定制方式?我想要“个性化服务”:)

个性化预设

日常工作主要的流程就是那几种,在不同网站都要写一串雷同的prompt,虽然这一点可以通过像之前介绍的Chatgpt Next Web等自定义解决,但我们想做个懒人,不想打开网页,不想寻找。

在MacOS下个人最习惯的还是用Alfred来交互,所以我会从Alfred的Workflow角度来寻找方案。

两套方案

Alfred官方推荐的ChatGPT/DALL-E

基本使用

本来制作了一个视频,文件较大浏览不方便,先上个图: Alfred-chatgpt

在Alfred5.5版本之后,终于提供了更好的View,支持图片,支持网格,也支持了Markdown,这对我们AI聊天的输出展示友好起来了。只要在官网下载ChatGPT / DALL-E安装即可,之后聊天绘图就变得非常简单。它主要能力:

  • 基本的聊天和会话。
  • 查询和继续历史会话。
  • 借助Alfred的Universal Action,随时对一段内容调用AI。

微调配置

为了提高使用体验,我们可以进行一些微调。首先,增加触发方式,例如使用热键: Alfred-hotkey 其次,我们想使用其它模型怎么办,我之前在文件中介绍过一站式多模型管理:One API实用指南可以便捷的将各种模型聚合到一起,怎么在这里使用上?很简单:

  • 在Alfred的对应Workflow中点击右上角的[x]
  • 找到Environment Variables,修改环境变量chatgpt_api_endpoint,设置上你oneapi的地址。
  • 找到Configuration Builder,在Popup Selection中找到gpt_model,将你的各种模型添加到列表中。 使用自定义API的设置

如果一切正常你已经可以使用这些模型了,或许如之前文章提到,白嫖不少模型真开心~

两个问题

但有可能会遇到另一个问题:在使用这些非openai模型时,Stream流式输出可能会中断!这个问题我提了个Issue,如其中所述,经过一番分析后只需要简单修改即可。

  • 找到Alfred的Workflow列表,在对应ChatGPT/DALL-E这个右键点击,选择Open in Finder
  • 用你喜爱的编辑器打开chatgpt文件,找到如下行修改:
1
2
3
4
5
6
7
  // If response is not finished, continue loop
  if (finishReason === null) return JSON.stringify({
    rerun: 0.1,
    variables: { streaming_now: true },
    response: responseText,
    behaviour: { response: "replacelast", scroll: "end" }
  })

修改为:

1
2
3
4
5
6
7
  // If response is not finished, continue loop
  if (finishReason === null || finishReason == undefined) return JSON.stringify({
    rerun: 0.1,
    variables: { streaming_now: true },
    response: responseText,
    behaviour: { response: "replacelast", scroll: "end" }
  })

你再试试,使用起来应该不容易遇上问题了?

怎么?还有问题,有时会报Connection stalled,这是因为有些模型返回慢时,超过5秒就认为异常了,可以适当延长一下时间。搜索如下行,将5000修改为合适的值,比如10000,即10秒超时。

1
  const stalled = new Date().getTime() - fileModified(streamFile) > 10000

然后你再玩玩看,现在还有其它问题不,有的话欢迎找我!我发现用一些可以实时联网的模型,查看一些资讯都不用去找网页搜索啦,快人一步呢!

当然,这个方案还有些不完美。比如自定义prompt的管理,比如和当前正在进行的工作的联动,比如快速切换模型,有些是不能,有些仍不便,我们继续看下一个方案!

非官方但强大的kiki-ai-workflow

“Kiki AI Workflow” 是一个为 Alfred 设计的 AI 工具集,支持 OpenAI Chat GPT、OpenRouter 和 Anthropic LLM 模型。其功能包括:

  • 快速聊天:通过 Alfred 的命令栏启动对话。
  • 自定义预设:根据选定文本或用户输入进行语法校正、翻译等操作。
  • 会话续接:轻松继续之前的对话。
  • Markdown 聊天:在 Markdown 编辑器中进行 AI 请求。
  • Whisper AI 转录:多语言音频转录功能。

看起来又强大了不少呢!可以定义预设了,还可以语音转录了。实际使用起来,也有不少惊喜,快让我们看看它。 它的官网,注意看它的介绍视频,已经挺详细了。

不过先要泼个冷水,因为它创建时Alfred还没有出5.5版本,不支持markdown输出,所以对话的呈现上在文本框输出时并不太好看,当然,作者也作了努力,可以通过在一个Markdown编辑器中聊天的方式变相支持更好的输出,然而,身为懒人的人,不想打开一个编辑器啊!但是它有自己强大的地方,一会再聊,先看几个使用图: kiki基本对话 在发起对话前,按着Fn+Shift后可以选择要使用的模型,还是比较便利的: kiki发送前可选择使用的模型 当我们选择一段文本后,通过Alfred的Universal Action相关快捷键,可以唤起一些操作。 kiki-universal-action 然后可以调起我们的一些预设(也内置了几个),这就比上一个有了更多的选择和可能性。 kiki预设使用

基本的使用就不详细介绍了,这里聊一点使用技巧:

充分利用Modifers(修饰符)

详细见modifiers,这些修饰符可以帮助您更好地控制Kiki的行为和输出方式。以下是各个修饰符的解释:

  • CMD(Command):使用CMD键允许您选择备用模型,并在配置的情况下选择备用系统角色。
  • OPT(Option):按住OPT键可以将响应直接粘贴到最前面的窗口中,而不是在对话框中显示。这对于快速处理和集成Kiki的输出非常有用。
  • CTRL(Control):在使用CTRL键时,现有的上下文文件不会被重置。请注意,如果文件中现有消息的数量超过了工作流配置中设置的阈值,那么最早的消息将被移除。
  • SHIFT:这个修饰符触发Kiki以对话框形式回复。这是Kiki回答聊天或从Alfred命令栏启动预设的默认方式。正如我们很快会学到的,这个“默认”可能会改变。
  • FN(Function):按住FN键允许您在选定文本下方获取Kiki的回答。此选项仅在通过通用操作、热键、片段或外部触发器在选定文本上使用Kiki时可用。
  • FN + SHIFT:这允许您将请求发送到在Kiki数据文件夹中的presets/models.json文件中配置的任何预设模型。重要提示:您必须重命名预设文件夹或使其可发现,并为使此功能正常工作配置一些模型。

了解这些修饰符及其功能有助于您更有效地使用Kiki CLI,并根据需要定制输出和交互方式。

添加自定义模型使用

这块只需要修改预设目录Preset的models.json文件即可,添加一些内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[
  {
    "id": "gpt-4o",
    "theModel": "gpt-4o"
  },
  {
    "id": "gpt-35-turbo",
    "theModel": "gpt-35-turbo"
  },
  {
    "id": "M_baichuan4",
    "theModel": "Baichuan4"
  },
  {
    "id": "m_doubao-pro-4k",
    "themodel": "doubao-pro-4k"
  },
  {
    "id": "hunyuan",
    "theModel": "hunyuan"
  },
  {
    "id": "moonshot-v1-8k",
    "theModel": "moonshot-v1-8k"
  }
]

在对话时按FN + SHIFT可选择它们。

自定义预设日常使用

我们修改预设目录Preset的text.json文件,添加一些内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
  {
    "id": "translateCn",
    "theTitle": "翻译成中文",
    "thePrompt": "将以下内容翻译为中文,不要在您执行的任务上包含任何注释或引号:\n[[txt]]"
  },
  {
    "id": "InterpretiveCode",
    "theTitle": "解释代码",
    "thePrompt": "请作为一个专业的程序员,对以下代码的关键点进行适当解释,不要说太多基础的内容,说重点即可。请使用中文回答:\n[[txt]]"
  },
  {
    "id": "codeReview",
    "theTitle": "代码审查",
    "thePrompt": "请审查以下代码,指出其中的错误和改进的地方,不要说太多基础的内容,说重点即可,请使用中文回答:\n[[txt]]"
  }

然后面对各种场景,随时调出: kiki自定义预设

Whisper语音

借助于Whisper的语音识别,我们可以语音输入,也可以直接丢一个声音文件给它,一会便返回文字给你。然后它同时提供了Run Preset,打通了语音输入这个路径。 注意要使用这个功能需要自己安装它提供的快捷指令,第一次使用还需要给相关权限,同时要设置一下文件路径,不然会报错。还有要注意文件路径不能有空格等,不然也会报错。

在当前APP内融入AI

Kiki有个比较好的能力是很方便融入当前你使用的软件,不论是写代码还是码字。比如,我要把前面这一段翻译为英文。

1
Kiki has the advantage of being able to integrate well with the software you are using, whether you are coding or writing. For example, I want to translate the previous paragraph into English.

可以直接在这段话后面追加::kip即可(Kiki Use as Prompt 的snippet配置keyword)。不需要跳出,也不需要来回复制、粘贴。如果是在VSCode中写代码,写个注释再唤起AI,有点像是在用Copilot的感觉了:)关键是这个模型是咱自己定义和任意切换的。

借助云同步

Kiki设计为数据可单独保存在指定目录,我们只需要将其数据目录设置为如Dropbox或其它云盘目录,这样所有设备都在自动同步后,共享这些设置,包括历史会话等,体验上又上升一级。

尾声

以上就是对这两个工具的介绍,希望能对你的日常使用有所帮助。有了它们之后,小问题我就不会再打开网页了。另外,文中虽然提到了部分看似要提前准备的工作(如OneAPI聚合AI模型),但并不是必须的,两个workflow默认对GPT、Gemini等主流几个模型都支持得不错,达到了开箱即用,不必担心,上手轻松。如果你也想体验这种便捷和丝滑,赶紧安装试试看吧!

我是个爱折腾技术的工程师,也乐于分享。欢迎点赞、关注、分享,更欢迎一起探讨技术问题,共同学习,共同进步。为了获得更及时的文章推送,欢迎关注我的公众号:

扫码关注公众号