Klee
Apple Silicon 本地运行的原生 AI 助手,支持文件读写、Shell 命令、网页搜索,数
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
Apple Silicon 本地运行的原生 AI 助手,支持文件读写、Shell 命令、网页搜索,数
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:深夜里,你正赶一个紧急报告,需要问 AI 帮忙润色一段文字、查一段技术细节。打开 ChatGPT 的网页要翻墙、等待响应;打开 Claude Desktop 又要注册账号、数据还得上传到云端。但如果你有一台 Apple Silicon Mac,打开一个 ~75MB 的本地应用,所有对话都在你电脑的内存里运行——连不上网也能工作,数据永远不会离开你的设备。这就是 Klee 试图解决的核心问题。
大模型(LLM)的能力在过去两年突飞猛进,但普通用户使用它们的方式基本只有两种:要么通过网页版(数据上传到云端),要么通过 API(需要自己写代码、配置环境)。这两种路径都存在隐私隐患——当你让 AI 处理一份包含商业机密的文档、一段公司内部代码,甚至是私人聊天记录时,这些数据实际上都流经了第三方服务器。
Apple Silicon 的出现改变了这个局面。统一内存架构(Unified Memory)让 CPU 和 GPU 共享同一块高速内存,配合苹果的 Metal GPU 加速,即使是大模型也能在本地高效运行。MLX 是苹果为 Apple Silicon 专门优化的机器学习框架,提供了 Swift、Python 多语言接口,Klee 正是在这个技术基础上构建的。
Klee 的开发团队来自 signerlabs,另一个产品 ShipSwift 为 Klee 提供了大量组件和架构参考。项目采用 MIT 许可证,开源在 GitHub。
Klee 不是又一个套壳 ChatGPT。它是一个具有本地工具调用能力的 AI Agent,这才是它真正的价值所在。
当你打开 Klee 下载一个模型(比如 Qwen 3.5 9B 或 DeepSeek R1 8B)后,AI 可以帮你做这些事:
grep、git、curl 等命令,完成自动化脚本任务整个过程无需 Docker、无需 Node.js、无需 MCP 协议——这些都是其他 AI 工具常见的依赖。Klee 用的是 MLX Swift 自带的原生 ToolCall API,Swift 代码直接内嵌在应用进程中,工具调用完全在进程内完成,没有额外的外部进程通信开销。
视觉方面,Klee 支持多模态模型(VLM),可以给 AI 发送图片让它看图说话。流式响应(Streaming)让 token 逐字显示,而不是等完整回答才一次性输出。还有一个很实用的功能:Inline Thinking,模型推理时的思考过程会显示在一个可折叠的卡片里,方便你理解 AI 为什么给出某个答案。
Klee 的代码结构非常清晰,是典型的 MVVM 架构:
Klee/
KleeApp.swift # App 入口
Model/ # 数据模型(Conversation、AppState、KleeError)
View/ # SwiftUI 视图层
ViewModel/ # 视图模型(ChatViewModel)
Service/ # 核心服务层
Assets.xcassets/ # 应用图标和资源
Service 层是最关键的部分:
LLMService.swift:MLX Swift 推理引擎的封装,是整个应用的核心。它处理模型加载、流式生成、性能指标采集(每秒 token 数、预填充时间、解码速度)。代码注释里提到团队参考了 oMLX 的 engine_core.py 做了 Phase C 级别的性能优化,包括 Metal pipeline 预热、KV 缓存量化(可选,4bit/8bit)、准确的性能指标采集。ChatStore.swift:对话管理器,负责对话的 CRUD 操作和 JSON 持久化。每个对话独立存储为 ~/Library/Application Support/Klee/chats/{uuid}.json。DownloadManager.swift + HuggingFaceAPI.swift:模型下载模块,支持断点续传,通过 HuggingFace API 下载 mlx-community 量化模型。代码里还有 huggingFaceMirror 配置,支持切换到国内镜像加速下载。IntentRouter.swift:意图路由,识别用户请求是聊天还是工具调用。TokenizerPatcher.swift:Tokenizer 修复工具,解决某些模型 tokenizer 与 MLX 不兼容的问题。View 层全是 SwiftUI 代码,ChatView.swift 是主聊天界面,WelcomeView 是首次打开的引导页,MarkdownTextView 处理 Markdown 渲染(模型输出多为 Markdown 格式),ThinkingBlockView 展示模型的思考过程。
性能优化亮点:LLMService 里有一段详细的参数调优注释。团队经过分析发现,当 temperature > 0 时 MLX 会自动选择 CategoricalSampler(最高效的采样方式),而 topP = 1.0 时 TopPSampler 的开销(softmax + cumsum + sort)完全可以省掉。prefillStepSize = 512 匹配 oMLX 的调度器默认值,repetitionPenalty = nil 直接跳过重复惩罚处理,每个 token 节省额外计算。
Klee 的部署体验接近极致:
.dmg 文件(Developer ID 签名,非 App Store)不需要 Docker、不需要命令行、不需要 Python 环境、不需要配置任何 API Key(如果不启用网页搜索)。模型缓存到 ~/.klee/models/,重启后无需重新下载。
硬件需求分级明确:
所有模型都是 4bit 量化版本,来自 mlx-community HuggingFace 组织,在保证质量的同时将内存占用降到最低。
Klee 是一款特色鲜明但边界清晰的产品,不是万能解决方案:
适用边界:作为纯 macOS 原生应用,Klee 只支持 Apple Silicon(抱歉 Intel Mac 用户)。最低系统要求 macOS 15.0(Sequoia),意味着很多还没升级的用户无法使用。此外,即使是 122B 参数的顶级配置,对话质量和云端顶级模型(如 GPT-4o、Claude 3.7)仍有差距——毕竟 4bit 量化本身会带来一定的质量损失。
网页搜索的代价:Jina AI 免费 API key 每天有速率限制,高频使用可能需要付费升级。相比之下,OpenAI/Anthropic 的官方 API 生态更成熟、模型选择更多,但隐私性不如 Klee。这是一个隐私便利性的权衡。
本地工具生态有限:目前内置工具只有文件读写、Shell 命令、网页搜索。相比 Claude Desktop 的 MCP 扩展生态或 OpenAI Agent SDK 的插件系统,Klee 的可扩展性暂时较弱。不过项目 roadmap 提到了"Platform modules"(原生 Swift 平台集成),未来可期。
Klee 代表了一个正在壮大的方向:Privacy-first AI on-device inference。2025 年 WWDC 后,Apple Intelligence 的本地化策略让行业看到了端侧 AI 的可行性;Klee 则把这个能力开放给了更广泛的开源社区。
从技术上看,Klee 验证了一条实用路径:用 MLX Swift 在 Apple Silicon 上跑 4bit 量化大模型,性能足够日常使用(Qwen 3 8B 跑出 4.3 GB 内存占用、几十 token/s 的生成速度),同时隐私保护达到最高级别。Qwen、DeepSeek 等开源模型的崛起为此类应用提供了高质量的模型选择。
Klee 的增长曲线值得关注:1740 stars、135 forks、22 个 open issues,说明社区正在活跃参与。ShipSwift 的商业支持也为项目的长期维护提供了资金保障。