目录

用 iOS 的快捷指令调用 LLM 实现日常工作的自动化

自从 GPT 3.5 的横空出世已经有三年有余,这几年中 LLM 不局限于文本补全,在各个方面都有了功能上的扩展,例如深度思考、多模态、函数调用等等。本文中笔者将以「从剪贴板中的文本添加 To-do」这一功能为例,展示如何在 iOS 的快捷指令中,利用 LLM 函数调用的功能,实现日常工作的自动化。

https://image.ne0.io/2025-05-24-15-14-45.png

背景

iOS 的快捷指令

iOS 的快捷指令是苹果提供的一个自动化工具,允许用户创建自定义的工作流程来简化日常任务。用户可以通过图形化的界面创建指令。快捷指令可以与系统和一些第三方应用交互,以实现自动化操作。

在本文的场景中,主要用到了快捷指令的这些功能:

  • 获取剪贴板内容
  • 发送网络请求(以调用 LLM 的 API)
  • 解析 JSON 响应
  • 添加待办事项到 提醒 app

快捷指令的最大缺点是只支持图形化的界面操作,无法直接编写代码,这使得一些复杂的逻辑实现变得困难,也不能让 LLM 辅助编写代码。

LLM 函数调用

将 LLM 用于自动化任务的一个难点是如何让 LLM 理解并执行规范化的操作。

函数调用 (Function Calling), 或者用最近流行的说法是「模型上下文协议」 (Model Context Protocol, MCP), 是指 LLM 在处理请求时,可以调用预定义的函数来获取或处理数据。支持函数调用的模型可以在响应中返回函数调用的参数,而不是直接生成文本。这使得 LLM 可以更精确地执行任务,并减少了对自然语言理解的依赖。

例子

要添加一个待办事项,我们需要的是这个时间的标题、时间和描述。我们根据这一需求定义函数:

"tools": [{
    "name": "extract_event_and_time",
    "description": "从文本中提取事件和时间信息",
    "parameters": {
        "type": "object",
        "properties": {
            "event": {
                "type": "string",
                "description": "从文本中提取的事件的简单描述"
            },
            "time": {
                "type": "string",
                "description": "从文本中提取的时间信息,格式化为 yyyy/MM/dd HH:mm"
            },
            "description": {
                "type": "string",
                "description": "可选,从文本中提取的事件的详细描述"
            }
        },
        "required": ["event", "time"]
    }
}]

然后加上我们的 system prompt 和 user prompt, 发送请求给 LLM:

{
    "model": "gpt-4.1-mini",
    "messages": [
        {
            "role": "system",
            "content": "你是一个智能助手。你的任务是从用户提供的文本中提取创建提醒事项所需的信息,并使用 'extract_event_and_time' 函数来结构化这些信息。请特别注意日期和时间的解析,当前的时间是{当前时间}。"
        },
        {
            "role": "user",
            "content": "{剪贴板内容}"
        }
    ],
    "tools": tools,
    "tool_choice": {
        "type": "function",
        "function": {
            "name": "extract_event_and_time"
        }
    }
}

以输入明天中午吃麦当劳为例,得到的请求结果如下:

{
    "choices": [
        {
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null,
            "message": {
                "annotations": [],
                "content": null,
                "refusal": null,
                "role": "assistant",
                "tool_calls": [
                    {
                        "function": {
                            "arguments": "{\"event\":\"中午吃麦当劳\",\"time\":\"2025-05-25-12-00\"}",
                            "name": "extract_event_and_time"
                        },
                        "id": "call_CAttuHgDc49Qvrv8zUa3PubB",
                        "type": "function"
                    }
                ]
            }
        }
    ],
    "created": 1747378308,
    "id": "chatcmpl-BXjD2WiJg93r6pt6EmuGMk7Hcflv5",
    "model": "gpt-4.1-mini",
    "object": "chat.completion",
    "service_tier": "default",
    "system_fingerprint": "fp_79b79be41f",
    "usage": {
        "completion_tokens": 24,
        "completion_tokens_details": {
            "accepted_prediction_tokens": 0,
            "audio_tokens": 0,
            "reasoning_tokens": 0,
            "rejected_prediction_tokens": 0
        },
        "prompt_tokens": 137,
        "prompt_tokens_details": {
            "audio_tokens": 0,
            "cached_tokens": 0
        },
        "total_tokens": 161
    }
}

这之后,用快捷指令的「从输入中获取词典」、「获取字典值」、「从列表中获取项目」等操作解析出函数调用的参数,然后用「添加提醒」操作将待办事项添加到提醒 app 中,即可。

已经写好的样例快捷指令可以在这里下载, 只需您填写自己的 API Key 即可使用。