不连网、不花钱:使用 apfel 在 Mac 终端里直接调用 Apple 原生 AI

9 阅读2分钟

Apple Intelligence · CLI · OpenAI兼容 · 本地推理


场景:不想为简单任务付费的开发者

日常开发中,一些低频但必要的 AI 需求反复出现:把自然语言转成可执行的 shell 命令、快速解释一段报错日志、给代码变量起个更贴切的名字。这些任务不值得专门订阅 OpenAI API,更不想把数据发到云端。Apple Silicon Mac 用户其实早已拥有一套本地大模型——Apple Intelligence 的 on-device foundation model——但苹果并未提供命令行接口。apfel 填补了这个缺口,让终端用户零成本、零配置地调用 Mac 内置的 AI 能力。

能力:三种模式覆盖常见工作流

apfel 提供三种使用形态,全部基于同一套本地模型:

UNIX 工具模式:单行命令完成单次推理,支持管道输入、文件附件、JSON 输出。示例:echo "Summarize: $(cat README.md)" | apfel 可直接把文档内容传给模型;apfel -o json 配合 jq 做脚本化解析。

OpenAI 兼容服务器apfel --serve 启动后暴露 http://localhost:11434/v1/chat/completions,与官方 OpenAI SDK 的接口格式一致。这意味着任何支持自定义 base_url 的客户端(如 Claude Code、Cursor)都可以无缝切换至本地后端,无需修改业务代码。

交互式聊天apfel --chat 进入多轮对话,内置上下文窗口管理(4096 tokens),支持 MCP 工具服务器接入。通过 --mcp 参数挂载本地或远程工具脚本后,模型可自动调用函数完成计算、搜索等任务。

原理:Swift 6.3 封装 FoundationModels

项目采用三层架构:ApfelCore 封装纯逻辑(上下文策略、工具调用解析、Token 计数),ApfelCLI 处理参数解析,主可执行文件通过 Swift 6.3 的 FoundationModels 框架与 Apple Intelligence 交互。HTTP 服务器基于 Hummingbird 构建,支持流式 SSE 和非流式 JSON 两种响应模式。工具调用通过 MCP(Model Context Protocol)协议实现,apfel 负责将 OpenAI 格式的 tool definition 转换为 Apple 原生的 ToolDefinition,并在对话历史中维护工具执行状态。上下文管理提供五种策略:优先保留最新对话、优先保留最早对话、滑动窗口、摘要压缩、以及超出预算时直接报错,适应不同场景对历史记忆的需求。

仓库创建于 2026-03-24,当前 4612 stars,可通过 Homebrew 一键安装。