三家 AI 同晚宕机之后:规则、记忆、进度、模型出口四件备份
这篇解决什么问题
2026 年 9 月 3 日周四晚上,GPT、Claude、Grok 三家先后宕机。按各家状态页的记录,北京时间 21:26 Claude 先报「多个模型错误率升高」,21:30 Grok 跟上,22:43 ChatGPT 和 Codex 也进去了,最长的一家三个多小时才恢复。事后三家的说法都很短:Anthropic 说是「基础设施问题」,OpenAI 说是「路由错误」,SpaceXAI 发帖为「孟菲斯算力中心故障」道歉,并向「受影响的算力合作伙伴」致歉,没点名是谁。
很多人当晚的经历是一样的:agent 做到一半,干坐着等了两三个小时,想换一家,发现另一家也挂了。这暴露出一个误区:多订一家模型,不等于有了备份。两家可能租的是同一个机房,就算不是,你想切过去的时候别人也都在切,那家照样被压垮。
真正管用的备份不在哪一家服务商那里,在你自己的文件里。用 AI 做一个项目,核心资产就四样:项目规则、记忆、任务进度、模型出口。这篇把这四样各落成一段能直接照做的操作,做完之后,随便哪家挂了,你都能在几分钟内换一个 agent 接着干。
顺便一个数字:Claude 状态页的历史记录里,7 月 55 起事故,8 月 25 起,9 月头几天已经 6 起。他们挂不挂你管不了,能管的是挂的时候自己的东西别跟着没了。
全文以 Claude Code 为主,Codex 同理。命令以 macOS / Linux 为准,Windows 建议在 WSL 里照做。各家接口地址和模型名以其官方文档当日为准,文中给的是 2026 年 9 月核对过的值。
前置条件
- 在用 Claude Code 或 Codex 做实际项目,项目在 git 仓库里
- 会打开终端敲命令,知道软链是什么(不知道也没关系,第一件里有解释)
- 有一个 GitHub 或其他 git 托管账号,能建私有仓库
先看清楚:一次任务里,东西都在谁手里
不做任何配置的时候,这四样东西分别放在哪、挂了会怎样、备份该放哪:
- 项目规则:默认散在各项目和各工具目录的 CLAUDE.md、AGENTS.md 里。服务商挂了文件还在,但改一处要改多处,换 agent 要重配。备份放法:一个 git 仓库,软链分发。
- 记忆:默认存在某一家的会话记忆里,或 Claude Code 的自动记忆目录。存在会话里的跟着下线;本地文件在,但没有备份。备份放法:本地 markdown 加私有 git 仓。
- 任务进度:默认只在聊天窗口里。窗口一关、会话一断,做到哪一步没人知道。备份放法:仓库里的计划文件。
- 模型出口:默认一家的客户端连一家的接口。整家挂了没地方去。备份放法:环境变量换出口,路由配降级链。
下面逐件设置。
第一件:项目规则放进 git,软链到规则目录
Claude Code 除了 CLAUDE.md,还认一个规则目录 ~/.claude/rules/,里面每个 markdown 文件都会作为用户级规则对所有项目生效。把这个目录做成指向 git 仓库的软链,规则就有了版本历史,换机器、换 agent 都能拉回来。
建一个规则仓库
bashmkdir -p ~/ai-rules && cd ~/ai-rules git init # 把现有的规则收拢进来(有就搬,没有就新建) mv ~/.claude/rules/*.md . 2>/dev/null git add . && git commit -m "chore: 收拢 AI 规则文件"
软链到 Claude Code 的规则目录
bash# 原目录已经搬空的话先删掉,再建链 rmdir ~/.claude/rules 2>/dev/null ln -s ~/ai-rules ~/.claude/rules
验证看箭头:
bashls -la ~/.claude/rules
textlrwxr-xr-x 1 jiumu staff 22 7 31 03:46 /Users/jiumu/.claude/rules -> /Users/jiumu/ai-rules
规则文件只放跨项目都要遵守的东西。我本机这个目录一度有 7 个文件,其中两个是写短视频内容用的规则,在产品仓库里每一轮也被读一遍。后来砍到 4 个,再砍到 2 个。规则越少,每轮前置的 token 越少,换 agent 时要迁的东西也越少。
Codex 和其他 agent 怎么接
Codex、Cursor、Gemini CLI 都读 AGENTS.md。把同一份规则再软链成 AGENTS.md 就行:
bashln -s ~/ai-rules/AGENTS.md ~/.codex/AGENTS.md
Claude Code 不读 AGENTS.md,但可以在 CLAUDE.md 里写一行 @AGENTS.md 把它导进来,官方文档就是这么写的。规则和 skill 统一管理的完整做法,站内另有一篇「AI 配置统一管理:skill 只存一份,软链分发到所有 agent」,这里不重复。
第二件:记忆落本地,自动同步到私有仓
Claude Code 的自动记忆是一堆 markdown 文件,放在 ~/.claude/projects/<项目路径>/memory/ 下。先看看自己攒了多少:
bashfind ~/.claude/projects -path '*/memory/*.md' | wc -l
我本机是 195 个。这些是跟 AI 磨合了几个月攒下来的东西,只在一台电脑的一个目录里,没有任何备份。
只推记忆,不推聊天记录
~/.claude/projects 目录里除了记忆,还有每个会话的完整聊天记录(.jsonl),里面可能有密钥、有客户数据。同步的时候必须只放行 memory/*.md,其他一律不进仓库。用白名单式的 .gitignore 做到这一点:
bashcd ~/.claude/projects git init cat > .gitignore <<'EOF' # 白名单:默认全部忽略,只放行记忆目录里的 markdown * !*/ !*/memory/ !*/memory/*.md !.gitignore EOF git add . git status --short | head
看一眼 git status 的输出,确认列出来的全是 memory/ 下的 .md,没有任何 .jsonl。确认无误再建私有仓并推送:
bashgit commit -m "chore: 初始化记忆备份" git remote add origin [email protected]:<你的用户名>/agent-memory.git # 必须是私有仓库 git push -u origin main
仓库一定要设成私有。记忆文件里会有项目细节、服务器地址、你的工作习惯。推之前再跑一次 git ls-files | grep -v '/memory/',输出应该只有 .gitignore 一行。
让它自己推
每小时自动推一次,改动为空时什么都不做。Linux 直接用 crontab,macOS 的 cron 也能用,只是首次运行要给终端「完全磁盘访问」权限:
bashcrontab -e
加一行:
text0 * * * * cd ~/.claude/projects && git add -A && git diff --cached --quiet || git commit -qm "chore: 记忆自动同步 $(date +\%F)" && git push -q
想跨 agent 共享记忆:memhub
Claude Code 的自动记忆只有 Claude Code 自己读。如果想让 Claude Code 和 Codex 用同一个记忆库,可以装我开源的 memhub:本机一个 SQLite 数据库,会话开始时把相关记忆注入,会话结束自动抓取,检索用本地向量加关键词,不依赖任何一家的模型。三家全挂那晚它照常在跑。它自带的 deploy/memory-sync.sh 就是上面那套「只推 memory 下的 md」的脚本化版本,还带一个 launchd 定时器:
bashgit clone https://github.com/codesfly/memhub ~/Code/memhub cd ~/Code/memhub python3 -m venv .venv && ./.venv/bin/pip install -e . ./.venv/bin/python deploy/install.py --with-service deploy/memory-sync.sh init [email protected]:<你的用户名>/agent-memory.git deploy/memory-sync.sh schedule 3600
这一步是加分项,不装也不影响后面三件。
第三件:任务进度写进计划文件
服务挂的时候最疼的不是规则和记忆,是手上正在做的活。做到哪一步、改了什么,全在聊天窗口里,窗口一关就没了。
解决办法只有一条规矩:开始任务之前,先让 agent 把计划写进仓库里的一个 markdown 文件,每步一个勾选框;做完一步打勾,顺手提交一次。
开工前的第一句话
把这段当模板,每次开任务都先发:
text先别动手。把这个任务拆成步骤,写到 docs/plans/<任务名>.md,格式: - 每一步一行,前面带 - [ ] 勾选框 - 每步写清楚要改哪些文件、怎么验证 - 每完成一步:把 [ ] 改成 [x],然后 git commit 一次,commit 信息写这一步做了什么 写完计划先给我看,我确认了再开始。
交接给另一个 agent
Claude 挂了、换 Codex 接手,交接词只有几十个字:
text读 docs/plans/<任务名>.md,从第一个没打勾的步骤继续。 先 git log --oneline -5 看一下前面几步提交了什么,再动手。
它读的是一个几十行的文件,不是几万字的聊天记录。有人试过反过来的做法,把整段聊天记录丢给新的 AI,记录读完额度已经用掉一半,活还没开始。
服务挂的时候,已经开着的会话不一定马上断,新开的会话才连不上。这时候先别急着关窗口,趁它还能动,让它把当前进度写进计划文件再说。当晚有人就是这么切的:Claude 挂了切到 GPT,GPT 额度只剩 1%,硬撑到预发布环境上线,然后 OpenAI 也挂了。他能切得动,就是因为进度在代码仓库里,不在哪一家的会话里。
验证
随便找一个进行中的任务,关掉当前 Claude Code 会话,新开一个会话只发上面那句交接词。它能说出「前面做到第几步、接下来做什么」,这件就算配好了。
第四件:模型出口
先说 Claude Code 自带的降级,以及它的边界
Claude Code 可以配一条降级链,主模型过载时自动换下一个,最多三个模型:
bashclaude --fallback-model sonnet,haiku
或者写进 ~/.claude/settings.json:
json{ "fallbackModel": ["claude-sonnet-5", "claude-haiku-4-5"] }
它的边界要说清楚:链里只能是 Anthropic 自家的模型,触发条件是过载、不可用、服务端错误;认证失败、计费问题、限流不触发。整家挂了,这个设置帮不上忙。
改一个环境变量,把出口指到别家
Claude Code 这个壳不用换,改 ANTHROPIC_BASE_URL 把请求地址指到别家的 Anthropic 兼容接口就行。DeepSeek、Kimi、智谱、Ollama 的官方文档都写了接法,本质是一个地址、一个密钥、一个模型名:
- DeepSeek:地址
https://api.deepseek.com/anthropic,密钥放ANTHROPIC_AUTH_TOKEN,模型名如deepseek-v4-pro。文档在 api-docs.deepseek.com。 - Kimi:地址
https://api.moonshot.ai/anthropic,密钥放ANTHROPIC_AUTH_TOKEN,模型名如kimi-k3。文档在 platform.kimi.ai。 - 智谱:地址
https://api.z.ai/api/anthropic,密钥放ANTHROPIC_AUTH_TOKEN,模型名如glm-5.3。文档在 docs.z.ai。 - Ollama 本机:地址
http://localhost:11434,ANTHROPIC_AUTH_TOKEN=ollama,模型名是你拉下来的任意模型。文档在 docs.ollama.com。
给每个出口做一个 shell 函数,挂的时候一句话切过去。把下面加进 ~/.zshrc:
bash# 备用出口:DeepSeek claude-ds() { ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic \ ANTHROPIC_AUTH_TOKEN="$DEEPSEEK_API_KEY" \ ANTHROPIC_MODEL=deepseek-v4-pro \ claude "$@" } # 最后一环:本机 Ollama claude-local() { ANTHROPIC_BASE_URL=http://localhost:11434 \ ANTHROPIC_AUTH_TOKEN=ollama \ claude --model qwen3.5 "$@" }
密钥放在环境变量或密钥管理器里,别写死在函数体内。
验证:
bashsource ~/.zshrc claude-ds -p "你是哪家的模型?只回模型名。"
回答里出现 DeepSeek 的模型名,出口就通了。Ollama 那条先 ollama pull 一个模型,再同样跑一句。
换出口不只是换地址,模型名也要对上。地址改了、模型名还是 Anthropic 的,接口会直接报模型不存在。上面的模型名是 2026 年 9 月的值,各家改版很快,报错先去官方文档核一眼。
想自动切:claude-code-router 配一条降级链
手动切要人在场。想让它自己切,在本地起一个路由入口,配一条链:Claude 挂了走 DeepSeek,DeepSeek 也挂了走本机模型。GitHub 上的 claude-code-router(3.x 起改成带管理界面的本地网关,Node.js 22 以上)就是干这个的:
bashnpm install -g @musistudio/claude-code-router ccr ui
打开 http://127.0.0.1:3458 的管理页,按它的流程走四步:
- Providers 里加供应商:DeepSeek、Moonshot、Z.AI 都有内置预设,填 API key、选模型;本机 Ollama 用自定义端点加进去。
- Server 里点 Start,本地网关起在
http://127.0.0.1:3456。 - Agent Config 里选 Claude Code,选一个默认模型,应用配置。它会替你改 Claude Code 的出口地址,以后
claude照常启动,请求先进网关。 - Routing 里给默认模型加「ordered fallback」,顺序填:主力模型、DeepSeek、本机 Ollama。
配好之后 Logs 页能看到每一次请求实际走了哪家、状态码和耗时,这也是验证的地方。
链的最后一环一定要是你自己电脑上的模型。原因是踩踏:大家都配了自动切,一出事全往同一家切,那家也会被压垮。只有本机模型不跟任何人抢。电脑跑不动大模型也没关系,一个 3B 的小模型足够把计划文件里的下一步做完、把进度写下来,等大家恢复。
演练:不等真挂,自己先挂一次
四件配完,花十分钟做一次演练,每一件都有一个能看见的结果:
- 规则:
ls -la ~/.claude/rules看到箭头指向你的 git 仓库,git -C ~/ai-rules log --oneline有提交记录。 - 记忆:
git -C ~/.claude/projects ls-files | grep -vc '/memory/'输出1(只有 .gitignore),远端仓库里能看到记忆文件。 - 进度:关掉正在做任务的会话,新开一个只发交接词,它能接着做。
- 出口:把
ANTHROPIC_BASE_URL指到一个不存在的地址跑一句,看它报错;再用claude-ds或claude-local跑同一句,能出结果。
四条都过,下次三家再一起挂,你损失的只是那几分钟切换时间。
常见问题
这套太重了,最小版是什么?
两个文件加一个环境变量:一个 CLAUDE.md 放规则,一个计划 md 放进度,再加一个 ANTHROPIC_BASE_URL 的备用函数。记忆库和路由是加分项。
我主力用的是国产模型,还需要这些吗? 需要。豆包、Kimi、DeepSeek 都有自己的状态页,也都出过事故。四件里没有一件是针对某一家的,换个出口地址而已。
备胎模型能力差一截,接上有意义吗? 备胎的标准是不跟主力住在一起,不是同等强。挂的那两三个小时里,你要的是把计划文件里的下一步做完、把进度写下来,不是让它重构整个项目。
换了出口之后 Claude Code 的 skill、hooks 还能用吗? 能。skill、hooks、规则文件都是 Claude Code 这个壳的功能,跟后面接哪家模型无关。只是不同模型对工具调用的支持程度不一样,复杂的 agent 流程在小模型上可能跑不顺,这也是为什么进度要先写进文件。
记忆同步会把密钥推上去吗?
Claude Code 的自动记忆是模型自己写的总结,理论上不该含密钥,但不能保证。白名单 .gitignore 只挡住了聊天记录,记忆文件本身的内容要靠你在首次推送前过一遍。memhub 的同步脚本在写入前会先做一层密钥脱敏,这是它比手写 cron 多出来的一点。