Wax
Wax 是一款专为苹果平台打造的高性能 AI 智能体记忆层,旨在让开发者轻松实现完全本地化、隐私安全的知识检索。它解决了传统 RAG(检索增强生成)系统依赖复杂服务器、云端数据库及繁琐配置的问题,将文档、向量索引和元数据全部封装在一个便携的 .wax 文件中。
这意味着用户无需搭建 Docker 容器或管理独立的数据库服务,只需通过 AirDrop 或 iCloud 即可同步整个知识库,实现了真正的“零配置”部署。Wax 特别适合需要在 iOS 或 macOS 上开发本地 AI 应用的开发者,尤其是那些对数据隐私有严格要求或希望应用离线运行的场景。
其核心技术亮点在于深度适配 Apple Silicon 芯片:利用 Metal 加速构建向量索引,并结合 SQLite FTS5 进行文本搜索,实现了亚毫秒级的混合检索延迟(p95 约 6ms),速度远超云端方案。作为纯 Swift 编写的单文件引擎,Wax 不仅启动迅速,更让 AI 智能体能够以极低的延迟实时调用记忆,真正将高效的知识检索保留在设备端。
使用场景
一位 iOS 开发者正在为一款面向医疗从业者的本地化 AI 助手应用构建知识库功能,要求所有患者笔记和医学文献必须在设备端处理,严禁上传云端。
没有 Wax 时
- 架构臃肿:为了同时支持文本关键词搜索和向量语义检索,不得不集成 SQLite 和独立的向量数据库库,导致项目依赖复杂,二进制体积显著增加。
- 隐私合规风险:若采用云端向量服务以降低开发难度,敏感医疗数据需传出设备,直接违反 HIPAA 等隐私法规,导致应用无法上架。
- 响应延迟高:在旧有的混合架构下,冷启动加载索引耗时超过 120ms,且复杂查询的 p95 延迟波动大,影响医生在查房时快速获取信息的流畅度。
- 数据同步困难:用户的多设备间知识备份需要协调数据库文件、向量索引文件和原始文档三个独立部分,极易出现状态不一致导致数据损坏。
使用 Wax 后
- 极简单文件架构:Wax 将文档、元数据、全文索引和 Metal 加速的向量索引打包进唯一的
.wax文件,无需配置服务器或管理多个存储引擎,代码量大幅减少。 - 纯本地隐私安全:所有数据处理均在 Apple Silicon 芯片上通过 Metal 加速完成,无需联网或 API 密钥,天然满足医疗级数据的本地隐私合规要求。
- 亚毫秒级极速响应:得益于针对 M 系列芯片的优化,Wax 实现了约 6ms 的混合检索延迟和 9ms 的冷启动时间,让 AI 助手能实时“回忆”起相关病例,体验丝滑。
- 原子化数据管理:医生只需通过 AirDrop 或 iCloud 传输单个
.wax文件即可完成全部知识库的迁移与备份,彻底消除了多文件同步的状态一致性难题。
Wax 通过单一文件和高性能本地计算,让开发者能在严格隐私限制下,为 Apple 平台打造出响应迅速且架构轻盈的 AI 记忆层。
运行环境要求
- macOS
- iOS
非必需,但针对 Apple Silicon (M-series) 优化,利用 Metal 加速向量索引 (HNSW)
未说明

快速开始
Wax 是一款高性能、单文件的内存层,专为 Apple 平台上的 AI 代理设计。
在设备端运行,私密且可移植。无需服务器,也无云端依赖。
English · Español · Français · 日本語 · 한국어 · Português · 中文
Wax 是什么?
Wax 是一个 Swift 原生的持久化引擎,专为 AI 代理设计。它将文档、嵌入向量和结构化知识存储在一个单一的可移植 .wax 文件中。
目标很简单:让记忆保留在本地,设置尽可能轻量化,并确保检索速度足够快,从而能够持续参与交互过程。
为什么选择 Wax?
| 特性 | Wax | SQLite (FTS5) | 云端向量数据库 |
|---|---|---|---|
| 搜索 | 混合(文本 + 向量) | 仅文本* | 仅向量* |
| 延迟 | ~6ms (p95) | ~10ms (p95) | 150ms - 500ms+ |
| 隐私 | 100% 本地 | 100% 本地 | 云端托管 |
| 设置 | 无需配置 | 较低 | 复杂(API 密钥) |
| 架构 | 苹果芯片原生 | 通用 | 各不相同 |
为什么使用单个 .wax 文件?
大多数 RAG 架构最终都会包含数据库、向量存储和文件服务器。而 Wax 通过将文档、元数据和索引打包到一个二进制文件中,大大简化了系统组件。
- 减少设置复杂度: 无需 Docker 环境,也无需单独维护数据库。
- 可移植性: 只需通过 AirDrop、iCloud 或其他同步方式即可轻松传输文件。
- 原子性: 备份、复制或删除整个文件即可,无需在多个服务之间追踪状态。
性能
Wax 针对 M 系列芯片硬件和本地检索进行了优化。
检索延迟(p95)
- 数值越低越好,单位为毫秒。
Wax(混合) |██ 6.1ms
SQLite(文本) |████ 12ms
云端 RAG |██████████████████████████████████████████████████ 150ms+
冷启动时间(p95)
- 数值越低越好,单位为毫秒。
Wax |███ 9.2ms
传统方法 |██████████████████████████████████████ 120ms+
[!提示] 吞吐量: Wax 在 M3 Max 芯片上以全混合索引模式可处理 85.9 篇文档/秒。 完整基准测试报告:Resources/docs/benchmarks/2026-03-06-performance-results.md
架构
Wax 使用基于帧的容器格式,并将所需的搜索引擎直接嵌入主文件中:SQLite FTS5 用于文本检索,Metal 加速的 HNSW 索引则用于向量检索。
文件内部布局
┌──────────────────────────────────────────────────────────────────────────┐
│ 双重头部页(A/B) │
│ (魔数、版本、生成号、指向 WAL 和 TOC 的指针、校验和) │
├──────────────────────────────────────────────────────────────────────────┤
│ WAL(预写日志) │
│ (用于防止崩溃时未提交变更丢失的原子环形缓冲区) │
├──────────────────────────────────────────────────────────────────────────┤
│ 压缩的数据帧 │
│ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ 帧 0(LZ4) │ │ 帧 1(LZ4) │ │ 帧 2(LZ4) │ ... │
│ │ [原始文档] │ │ [元数据/JSON] │ │ [系统信息] │ │
│ └──────────────────┘ └──────────────────┘ └──────────────────┘ │
├──────────────────────────────────────────────────────────────────────────┤
│ 混合搜索索引 │
│ ┌──────────────────────────────┐ ┌──────────────────────────────┐ │
│ │ SQLite FTS5 Blob │ │ Metal HNSW 索引 │ │
│ │ (文本搜索 + EAV 事实) │ │ (向量搜索) │ │
│ └──────────────────────────────┘ └──────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────────────┤
│ TOC(目录) │
│ (所有帧的索引、父子关系以及各引擎的清单) │
└──────────────────────────────────────────────────────────────────────────┘
- 原子级容错: 双重头部和 WAL 日志确保即使进程在写入过程中意外终止,数据存储仍能保持一致。
- 统一检索: 单一查询即可同时访问 BM25 文本索引和 HNSW 向量索引。
- 结构化知识: 内置的 EAV(实体-属性-值)存储机制可以高效地管理持久性事实和长期推理任务。
快速入门
Swift
import Wax
// 使用沙盒安全的可写位置(适用于应用程序和 CLI 工具)
let url = URL.documentsDirectory.appending(path: "agent.wax")
// 1. 打开一个内存存储
let memory = try await Memory(at: url)
// 2. 保存一条记忆
try await memory.save("用户正在使用 SwiftUI 构建习惯追踪器。")
// 3. 使用混合召回(文本 + 向量)进行搜索
let results = try await memory.search("用户在构建什么?")
if let best = results.items.first {
print("找到:\(best.text)")
print("文档 ID:\(best.metadata["id"] ?? "未知")")
// → "找到:用户正在使用 SwiftUI 构建习惯追踪器。"
}
try await memory.close()
SwiftUI 示例
import SwiftUI
import Wax
struct ContentView: View {
@State private var result = "搜索中…"
var body: some View {
Text(result)
.task {
do {
let url = URL.documentsDirectory.appending(path: "agent.wax")
let memory = try await Memory(at: url)
try await memory.save("用户正在使用 SwiftUI 构建习惯追踪器。")
let context = try await memory.search("用户在构建什么?")
result = context.items.first?.text ?? "未找到任何内容"
try await memory.close()
} catch {
result = "错误:\(error.localizedDescription)"
}
}
}
}
CLI 工具(main.swift)
import Wax
@main
struct AgentMemory {
static func main() async throws {
let url = URL.documentsDirectory.appending(path: "agent.wax")
let memory = try await Memory(at: url)
try await memory.save("用户正在使用 SwiftUI 构建习惯追踪器。")
let results = try await memory.search("用户在构建什么?")
if let best = results.items.first {
print("找到:\(best.text)")
}
try await memory.close()
}
}
想要存储持久化的事实和长期推理吗?请参阅 结构化记忆。
对于重复的 CLI 向量操作,Wax CLI 现在会自动启动并重用本地代理,该代理负责管理长期存储以及由代理管理的会话存储,以支持诸如 remember、recall 和 search --mode hybrid 等命令。
如果您需要显式且长期存在的会话,仍然可以直接运行代理:
wax-cli daemon --store-path ~/.wax/memory.wax
您可以发送 JSON 行,例如:
{"id":"1","command":"remember","content":"汽车需要定期维护。"}
{"id":"2","command":"search","query":"汽车保养","mode":"hybrid","topK":3}
{"id":"3","command":"shutdown"}
简单的纯文本用法仍然是单次执行。如果向量搜索不可用,混合/向量命令现在会明确报错,而不是静默降级为纯文本模式。
AI 编程助手
如果您使用像 Claude Code、Cursor 或 Windsurf 这样的 AI 编程助手,有两种不错的设置方式:
- 当您需要持久化记忆、会话交接以及助手内部的跨会话搜索时,可以使用 Wax MCP 服务器。
- 当您希望助手直接根据 Swift API 编写正确的 Wax 框架代码时,可以使用捆绑的 Wax 技能。
安装 MCP 服务器(Claude Code):
npx -y waxmcp@latest mcp install --scope user
此安装流程会将捆绑的 Wax 运行时暂存到一个稳定的本地目录,并将暂存的 wax-mcp 二进制文件注册到 Claude Code 中。npx 仅用于安装/引导。
安装技能(Claude Code):
# 从您的项目目录中
claude install-skill https://github.com/christopherkarani/Wax/tree/main/Resources/skills/public/wax
安装完成后,您的助手无需额外的提示支架,即可直接与 Memory、VideoRAGOrchestrator、PhotoRAGOrchestrator、混合搜索、结构化记忆以及 MCP 服务器协同工作。
或者粘贴以下提示以从头开始:
Wax 入门提示(点击展开后复制)
在此仓库中使用 Wax MCP 服务器来实现持久化记忆。
工作流程规则:
- 在会话开始时,首先调用 `handoff_latest` 加载先前的上下文,然后调用一次 `session_start` 并保留返回的 `session_id`。
- 使用 `remember` 存储决策、发现和简短的事实性笔记。如果记忆是会话范围的,请将 `session_id` 作为顶级参数传递。不要将 `session_id` 放入 `metadata` 中。
- 使用 `recall` 获取整合后的上下文,使用 `search` 获取原始的排名结果。
- 当语义检索有帮助时,优先选择 `mode: "hybrid"`。当您需要快速或确定性的词汇查找时,使用 `mode: "text"`。
- 在正常的代理流程中,不要管理 `SESSION_STORE`、`--store-path` 或 `flush`。长期记忆和虚拟会话存储由代理负责。
- 在会话结束时,使用 `handoff` 传递 `content`、可选的 `project` 和 `pending_tasks`,然后调用 `session_end`。
- 仅在需要跨会话检索代理管理的会话历史记录及其出处元数据时,才使用 `corpus_search`。
- 对于稳定的实体和事实,而非临时调试笔记,请使用结构化记忆工具(`entity_upsert`、`fact_assert`、`fact_retract`、`facts_query`、`entity_resolve`)。
行为期望:
- 在要求我重新陈述先前的上下文之前,先阅读现有的交接记录和召回结果。
- 保持记忆的简洁、事实性和任务相关性。
- 当跨会话的结果看起来相关时,请引用出处元数据,以便我们知道它来自哪个会话存储。
安装
Swift 包管理器
dependencies: [
.package(url: "https://github.com/christopherkarani/Wax.git", from: "0.1.8")
]
生态系统工具
🤖 MCP 服务器
Wax 提供一流的 模型上下文协议 (MCP) 服务器。将您的本地记忆连接到 Claude Code 或任何兼容 MCP 的代理。
npx -y waxmcp@latest mcp install --scope user
发布的安装程序会将捆绑的运行时暂存到一个稳定的本地目录,并直接注册 wax-mcp,这样稳定的 MCP 会话就不需要通过原始的 npx 来启动。有关推荐的 Claude Code 提示和设置流程,请参阅 Resources/docs/wax-mcp-setup.md。
🔍 WaxRepo
一款用于 Git 历史记录的语义搜索 TUI。索引任何仓库,并使用自然语言查找代码或提交。
# 从任何 Git 仓库中
wax-repo index
wax-repo search "我们在哪里实现了 WAL?"
许可证
Wax 根据 Apache License 2.0 发布。详细信息请参阅 LICENSE。
版本历史
waxmcp-v0.1.192026/03/260.1.192026/03/200.1.182026/03/190.1.172026/03/14waxmcp-v0.1.162026/03/06waxmcp-v0.1.152026/03/050.1.92026/03/03waxmcp-v0.1.112026/02/270.1.82026/02/250.1.72026/02/170.1.62026/02/140.1.52026/02/120.1.42026/02/100.1.32026/02/030.1.22026/01/310.1.12026/01/310.1.02026/01/21常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器