2026年7月6日 2 分钟阅读

Afair 实战指南:给所有 AI 工具装上共享记忆,告别重复解释

tinyash 0 条评论

你同时在用 Claude Code、Cursor、Codex 和 ChatGPT 吗?如果是,你一定遇到过这个场景:在 Claude Code 里解释了一遍项目架构,切换到 Cursor 又要重新说一次,到 Codex 还得再来一遍。每个工具各有一个记忆空间,互不相通,你被迫在每个对话开头重复同样的上下文。

Afair 就是为了解决这个问题而生的。它是一个开源(AGPL-3.0)的自托管 MCP 记忆服务器,让你所有的 AI 工具共享同一个持久记忆空间。只需要一个 uv run python -m afair 命令就能启动,然后所有支持 MCP 的工具都能访问同一个记忆库。

安装与环境

Afair 依赖 Python 3.12+ 和 uv(Astral 的 Python 包管理工具)。先确保已安装 uv:

curl -LsSf https://astral.sh/uv/install.sh | sh

pip install uv

然后克隆 Afair 仓库并安装依赖:

git clone https://github.com/afairai/afair.git
cd afair
uv sync
cp .env.example .env

.env 文件中添加一个 LLM API Key(Anthropic、OpenAI 等均可):

ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx

启动服务器:

uv run python -m afair

服务器会在 http://127.0.0.1:8765 上启动。

实战场景 1:将 Claude Code 接入共享记忆

Claude Code 原生支持 MCP(Model Context Protocol),所以连接 Afair 非常简单。

在 Claude Code 的 MCP 配置文件(通常是 ~/.claude/settings.json)中添加:

{
  "mcpServers": {
    "afair": {
      "type": "http",
      "url": "http://127.0.0.1:8765"
    }
  }
}

然后,为了让 Claude Code 自动调用 Afair 的工具,在项目根目录创建一个 CLAUDE.md 文件:

## Shared Memory (Afair)

This project uses Afair as a shared memory layer. At the start of each session,
recall relevant context by calling the `recall` MCP tool. When you learn something
durable (a decision, a preference, a key fact), call `remember` to store it.
After completing significant work, call `observe` so the vault keeps up.

配置完成后,重启 Claude Code 会话。现在你可以在 Claude Code 中输入:

“回顾一下这个项目之前的架构决策”

Claude Code 会通过 Afair 的 recall 工具从共享记忆中拉取相关上下文。

实战场景 2:三个核心 MCP 工具

Afair 暴露了三个 MCP 工具,它们的接口是固定的——不会在后续版本中变更:

remember — 存储持久信息

当 Claude Code 了解到一个长效事实时,它自动调用 remember 来存储。例如:

remember 的内容:
- 项目使用 FastAPI + SQLAlchemy + React
- 前端部署在 Vercel,后端在 Railway
- 团队决定不使用 GraphQL,保持 RESTful 架构
- 数据库迁移使用 Alembic,CI 中自动执行

你可以手动向 Afair 存入信息:

“记住:这个项目使用 pnpm 作为包管理器,不是 npm。”

Afair 会存储这条信息,并在后续会话中被 Claude Code、Cursor 甚至 ChatGPT 通过 recall 读取到。

recall — 拉取当前相关记忆

当一个新的 AI 工具开始工作,它首先调用 recall 来获取与当前上下文相关的记忆。Afair 使用语义搜索(SQLite FTS5 + sqlite-vec)来找到最匹配的内容,而非简单的关键词匹配。

例如,如果你问 Claude Code 关于部署的问题,recall 会自动返回与部署相关的记忆(运行环境、平台选择、CI 配置等),而不会返回无关的记忆。

observe — 记录会话中的新信息

当 AI 工具在会话中发现了有价值的新信息,它调用 observe 将这一观察写回 Afair。这些信息会经过后台处理,被提取和索引,为未来的 recall 做好准备。

整个过程是:remember 存、recall 取、observe 记——三个工具覆盖了记忆的完整生命周期。

实战场景 3:多工具共享记忆

Afair 的真正价值在跨工具场景中体现。假设你同时使用 Claude Code 和 Cursor:

第一步:在 Claude Code 中启动项目

claude

你花了 30 分钟在 Claude Code 中设计项目架构、建立文件结构、配置开发环境。Claude Code 通过 observe 自动记录了关键的架构决策——使用 Next.js App Router、Prisma ORM、Auth.js 做认证。

第二步:切换到 Cursor

打开 Cursor,在它的 MCP 配置中添加同一个 Afair 服务器。启动后,Cursor 调用 recall,立即获取了你在 Claude Code 中建立的完整上下文:

  • 项目架构(Next.js App Router)
  • 数据库设计(Prisma schema 位置)
  • 认证方案(Auth.js + GitHub OAuth)
  • 环境变量配置(.env.local 模板)

无需重新解释,Cursor 已经知道整个项目的情况。你在 Cursor 中继续开发新功能,新的决策又通过 observe 写回 Afair。

第三步:用 ChatGPT 写文档

当你在 ChatGPT 中编写项目文档时,同样可以通过 MCP 连接 Afair——CLI 和桌面客户端走本地 MCP 连接,Web 客户端通过 HTTPS 部署访问。你的所有工具的上下文保持一致。

支持的客户端清单:

客户端本地 MCPWeb/远程
Claude Code✅ 原生支持
Cursor✅ 原生支持
Codex CLI✅ 原生支持
Windsurf✅ 原生支持
GitHub Copilot✅ 原生支持
Claude.ai✅ 需 HTTPS 部署 + OAuth
ChatGPT✅ 需 HTTPS 部署 + OAuth

架构简析

Afair 使用四层架构,所有数据保持单一事实源:

  1. 基座(Substrate):Append-only SQLite 数据库(FTS5 + sqlite-vec),内容寻址,从不重写日志
  2. 解释层(Interpretation):基于基座构建的版本化视图,可随时重新生成
  3. MCP 接口:版本化且只增不减,已发布的签名保持向后兼容
  4. 后台工作器:提取实体、链接关联、综合总结,都在同一个基座上操作

这种设计确保了数据的不可篡改性和可追溯性——任何信息都可以追溯到它的起源会话。

最佳实践

  1. 先用一个小项目试水:在一个小型 side project 中测试 Afair,确认它的工作方式符合你的预期
  2. 定期巡检记忆内容:Afair 的自省接口可以查看它记住了什么,确保没有存储过时或错误的信息
  3. 注意隐私边界:Afair 是纯自托管的数据存储在本地 SQLite 中,但如果你通过 HTTPS 对外暴露,确保配置好认证(OAuth)
  4. 不要过度打扰:Afair 的设计理念是 AI 工具自动调用 remember/recall/observe,但你也可以在关键决策后手动确认记忆已保存
  5. 配合 CLAUDE.md / .cursorrules 使用:在项目级指令中提及 Afair 的存在,让新接入的 AI 工具自动感知共享记忆层的存在

总结

Afair 解决了一个非常实际的痛点:多个 AI 工具之间的记忆孤岛。它的设计很简洁——三个 MCP 工具覆盖记忆的存、取、记三个环节,四层架构保证数据的可靠性。对于同时使用多个 AI 编码工具的开发者来说,Afair 可以显著减少重复解释的时间,让每个工具之间的切换无缝衔接。

相关链接:

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。