1. OpenClaw 会话隔天就消失,先别急着重装
OpenClaw 会话自动清除是个挺让人抓狂的问题:昨天还在的对话上下文,今天打开就空了,历史记录像被谁悄悄擦掉一样。这个现象在 OpenClaw 里其实有明确的触发机制,绝大多数情况不是软件坏了,而是会话保留策略在按默认规则做清理。OpenClaw 是一套面向本地与自托管场景的 AI 会话管理工具,能对接多种模型通道、保存多轮对话上下文、支持插件扩展,适合把它当成长期在线的编码助手或 Agent 底座来用的人。如果你正好属于「会话要留很久、上下文不能断」这类使用者,那这篇就是写给你的。
我先把结论摆出来:会话隔一天消失,最常见的原因是pruneAfter闲置过期策略被设成了 24h 左右,只要一个会话连续一天没被访问,就被判定为可清理对象。其次是maxEntries数量上限触发 LRU 淘汰,或者磁盘配额maxDiskBytes被写满后强制回收。这三者里,pruneAfter的时间特征最贴合「恰好一天」这个描述。
排查思路分两条线走。第一条线是配置持久化:把会话存储里的保留策略参数改对,让会话该留多久就留多久。第二条线是通道统一:把 OpenClaw 的 endpoint 和鉴权项收敛到 TaoToken 这个统一通道上,避免因为多通道切换、鉴权失效导致会话写入异常、看起来像「被清除」。两条线合起来,才能既保住会话文件,又保住会话背后的请求链路稳定。
下面我会按「先定位配置 → 再改保留策略 → 再把通道切到 TaoToken → 最后验证会话不再丢」的顺序展开,每一步都给可复制的片段和实际命令。你不需要一次全做完,但建议至少把第 3 节的配置片段落到自己的settings.json里,那是解决自动清除的核心。
2. 定位 OpenClaw 会话存储配置与 pruneAfter 参数
要解决 OpenClaw 会话自动清除,第一步是找到会话存储配置到底写在哪个文件里。OpenClaw 的配置通常分两层:一层是主配置config.yaml或settings.json,另一层是会话存储子节点storage.session。很多人只改了主配置里的模型参数,却漏了storage.session这一段,结果pruneAfter还是默认值,会话照样被清。
先确认你的配置目录。常见位置有三个:项目根目录下的config/、用户目录下的~/.openclaw/、以及通过环境变量OPENCLAW_CONFIG_DIR指定的路径。你可以用下面这条命令快速定位:
# 查找 OpenClaw 实际加载的配置文件 find / -name "settings.json" -path "*openclaw*" 2>/dev/null find / -name "config.yaml" -path "*openclaw*" 2>/dev/null # 如果设置了环境变量,直接看它指向哪 echo $OPENCLAW_CONFIG_DIR找到文件后,重点看storage.session这一段。它决定了会话文件怎么存、存多久、什么时候清。下面是一份典型的会话存储配置,我把它拆开讲每个字段的含义:
{ "storage": { "session": { "pruneAfter": "24h", "maxEntries": 5000, "maxDiskBytes": "5GB", "rotateBytes": "512MB", "path": "./data/sessions" } } }pruneAfter是闲置过期时间,会话自上次访问起超过这个时长就被清理,24h正好对应「隔一天就没了」。maxEntries是会话条目总数上限,超了就按最近最少使用淘汰,老会话先走。maxDiskBytes是会话目录总大小上限,写满后触发回收释放空间。rotateBytes是单个会话文件达到多大时轮转,防止单文件过大。
这里有个容易踩的坑:pruneAfter的写法在不同版本里可能是字符串"24h",也可能是数字86400(秒),还可能是0或false表示禁用。你改之前先确认当前值的类型,别把字符串改成数字导致解析失败、配置回退到默认值。改完记得备份原文件:
cp settings.json settings.json.bak.$(date +%Y%m%d)定位清楚之后,你就知道问题出在哪一行了。接下来第 3 节直接给可复制的修改片段,把保留策略调到符合你业务的值,同时把通道切到 TaoToken。
3. 可复制配置:会话保留策略 + TaoToken 通道接入
这一节是整篇的核心,给你两段可直接粘贴的配置。第一段改会话保留策略,解决自动清除;第二段把 endpoint 与鉴权项改到 TaoToken 统一通道,解决请求链路不稳导致的会话写入异常。两段都改完,OpenClaw 会话才算真正稳下来。
先改会话保留策略。把pruneAfter从24h拉长到你实际需要的时长,比如一周用168h,一个月用720h。如果你确实需要长期保留,可以设成0禁用自动过期,但必须同时把maxEntries和maxDiskBytes调大,否则会堆一堆会话文件把磁盘写满。下面这份是我实测比较稳的组合:
{ "storage": { "session": { "pruneAfter": "720h", "maxEntries": 20000, "maxDiskBytes": "20GB", "rotateBytes": "1GB", "path": "./data/sessions", "guardian": { "enabled": true, "healerEnabled": true, "usageTrackerEnabled": true } } } }pruneAfter设720h表示闲置 30 天才清理,日常使用基本不会触发。maxEntries提到 20000 给足余量,maxDiskBytes提到 20GB 避免磁盘配额先到。guardian这一段是会话文件守护,开启后能监听会话目录变化、自动修复损坏的*.jsonl文件,这是防止「文件损坏导致会话消失」的关键。
再改通道配置。OpenClaw 的模型请求走endpoint和apiKey两个字段,把它们统一指向 TaoToken,可以避免多通道切换时鉴权失效、请求 401 导致会话写入中断。TaoToken 的 API 地址是https://taotoken.net/api,模型 ID 按你实际用的填。配置片段如下:
{ "providers": { "default": { "type": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-5", "timeout": 120000 } } }这里三件套要写全:Base URL 是https://taotoken.net/api,Key 是你从控制台生成的密钥,Model ID 按需填。如果你用的是 Claude Code 这类工具,配置项名字可能叫ANTHROPIC_BASE_URL和ANTHROPIC_AUTH_TOKEN,但指向的地址和密钥是同一套。改完配置后重启 OpenClaw 服务:
# 如果是 systemd 管理 sudo systemctl restart openclaw # 如果是前台进程,先停再起 pkill -f openclaw && openclaw start重启后别急着用,先按第 4 节发一个验证请求,确认通道通了、会话能正常写入,再放心用。
4. 验证请求:确认会话不再被清空
配置改完,必须验证两件事:一是 TaoToken 通道能正常返回,二是会话文件在闲置后仍然存在。很多人改完配置就直接用,结果会话还是丢,回头一看是通道没通、请求根本没写进会话文件。
先验证通道。用 curl 直接打 TaoToken 的接口,确认鉴权和模型都正常:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'返回里能看到choices数组和内容,就说明通道通了。如果返回 401,说明 Key 不对或没带上;如果返回local proxy failed,说明本地网络到 TaoToken 的链路有问题,检查 DNS 和出站规则。
再验证会话持久化。发一条消息创建会话,记下会话 ID,然后等一段时间(或手动把系统时间往前调,模拟闲置),再看会话文件还在不在:
# 查看会话目录下的文件 ls -lh ./data/sessions/ # 查看某个会话文件的最后修改时间 stat ./data/sessions/session_xxx.jsonl # 用 jq 看会话内容是否完整 jq -r '.messages | length' ./data/sessions/session_xxx.jsonl如果闲置超过pruneAfter后文件仍在,说明保留策略生效了。如果文件还在但内容为空,多半是写入时通道报错,回到上一步查通道。如果文件直接不见了,检查guardian是否真的在跑:
ps aux | grep openclaw-guardian守护进程没起来的话,会话文件损坏后没人修复,表现就是「消失」。把守护进程按第 3 节的guardian配置启用,再观察一天,基本就不会再丢了。
5. 常见报错排查:401、local proxy failed、reading choices
改配置的过程中,你大概率会撞上几个典型报错。这一节把它们逐个拆开,对照真实报错给排查路径。
401 Unauthorized:最常见,出现在通道验证那一步。原因通常是 Key 写错、Key 前后有空格、或者用了别的通道的 Key。检查apiKey字段是不是sk-开头、有没有多余换行。如果你把 Key 放在环境变量里,确认变量名和配置里引用的一致。
local proxy failed:这个报错说明请求没出本地。可能是本地网络到 TaoToken 的链路不通,也可能是配置里baseUrl写成了https://taotoken.net(少了/api)。确认地址是https://taotoken.net/api,然后用 curl 单独测一次,排除是 OpenClaw 配置问题还是网络问题。
reading choices 报错:通常出现在解析响应时,说明返回体不是预期的 OpenAI 兼容格式。检查type字段是不是openai-compatible,model字段填的模型 ID 是否在 TaoToken 支持列表里。模型 ID 写错时,返回体结构会变,解析就报reading choices。
OAuth 相关报错:如果你用的是 Claude Code 这类带 OAuth 的工具,报错可能提示 token 过期或授权失败。这类工具建议直接用 API Key 模式接入 TaoToken,把ANTHROPIC_BASE_URL指向https://taotoken.net/api,ANTHROPIC_AUTH_TOKEN填 TaoToken 密钥,绕开 OAuth 刷新环节。
会话文件损坏:报错可能不明显,表现是会话加载失败或内容截断。用jq校验*.jsonl文件,如果解析失败就是损坏了。开启guardian的healerEnabled后,它会尝试修复;修不了的可以手动备份后删除,让 OpenClaw 重建。
排查时记住一个顺序:先 curl 验通道,再看 OpenClaw 日志,最后看会话文件。通道不通,后面全是白搭。
6. 把会话和通道都收口到 TaoToken
会话自动清除这件事,表面看是保留策略的问题,往深了看是「会话文件」和「请求通道」两条链路都要稳。只改pruneAfter,通道不稳照样会在写入时丢数据;只切通道,保留策略没调,闲置一天还是被清。两边都收口,才算真正解决。
我自己的做法是把 OpenClaw 的会话保留策略设成 30 天,同时把 endpoint 统一到 TaoToken,日常用下来会话没再莫名消失过。如果你也在做长期在线的编码助手或 Agent,建议把通道配置固化下来,别频繁切换。需要生成密钥就去控制台,接入细节看文档,想先试试模型效果可以直接开对话,长期跑编码任务的话 Coding Plan 更合适。把配置落到位,剩下的就是安心用。