
1. 为什么你的 OpenClaw 只认 4096 token如果你跟着前两篇把 OpenClaw 接到了本地 LM Studio聊天框里问“你好”一切正常但一旦让它读整个src目录、分析项目结构就会撞上这行红字Error: Embedded agent failed before reply: Model context window too small (4096 tokens). Minimum is 16000.显存明明够LM Studio 里加载的模型也标着 32k为什么 OpenClaw 咬死只有 4096原因在于 OpenClaw 启动时会向本地推理服务询问模型信息而 LM Studio 返回的模型 ID比如openai/gpt-oss-20b不在 OpenClaw 内置的模型参数表里。对于“不认识”的模型OpenClaw 出于稳定性考虑统一按 4096 token 的保守值处理。这个默认值对短对话够用但 Agent 任务要读文件、拼上下文、保留多轮历史16000 是它认为的最低门槛4096 直接触发拒绝。要解开这个限制唯一可靠的入口是openclaw.json。本文交付一份可直接复制的 JSON 骨架把上下文窗口强制拉到 32000并给出重启后验证生效的具体命令和检查点。适合已经完成本地部署、正在被上下文报错卡住的 OpenClaw 用户。2. 改配置前先确认两件事2.1 找到真正生效的 openclaw.jsonOpenClaw 在不同安装方式下配置目录不同常见位置有两个# 正式环境 ~/.openclaw/openclaw.json # 开发/调试环境 ~/.openclaw-dev/openclaw.json你可以用一条命令确认当前实际读取的是哪个ls -l ~/.openclaw/openclaw.json ~/.openclaw-dev/openclaw.json 2/dev/null同时注意目录下还有一个models.json。这个文件是网关启动时自动扫描生成的缓存每次重启都会被覆盖。你手动改它重启后 32000 会变回 4096所以不要动它。真正持久生效的只有openclaw.json。2.2 确认 LM Studio 端的模型 ID打开 LM Studio在已加载模型的详情里复制模型标识符格式类似openai/gpt-oss-20b。这个字符串必须和后面 JSON 里的id字段逐字符一致大小写、斜杠、连字符都不能差。差一个字符OpenClaw 就会把它当成另一个未知模型继续套 4096 默认值。3. 可复制的 openclaw.json 关键字段骨架下面这段是models字段的完整结构。核心是mode: merge它告诉 OpenClaw 以你手写的参数为准去合并系统扫描结果而不是被扫描结果覆盖。{ models: { mode: merge, providers: { custom-127-0-0-1-1234: { baseUrl: http://127.0.0.1:1234/v1, apiKey: lm-studio, api: openai-completions, models: [ { id: openai/gpt-oss-20b, name: Local RTX 3090 Power, reasoning: false, input: [text], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 32000, maxTokens: 32000 } ] } } } }几个字段的作用对照字段作用注意点mode合并策略必须是merge否则手写值被覆盖id模型标识与 LM Studio 完全一致contextWindow上下文窗口本篇核心设为 32000maxTokens单次最大输出与窗口同量级避免截断baseUrl本地服务地址默认 1234 端口按实际改修改前 vs 修改后的关键差异修改前contextWindow 缺失 → 系统按 4096 处理 → Agent 任务被拒 修改后contextWindow 32000 → 系统按 32000 处理 → 长上下文可用注意maxTokens不建议设得比contextWindow还大否则单次输出可能挤占输入空间反而触发截断。4. 双端对齐与重启验证4.1 LM Studio 端也要开大窗口只改 OpenClaw 不够。回到 LM Studio在右侧Model Options里找到Context Length把滑块拉到模型支持的上限。如果这里还是 4096OpenClaw 发过去的长上下文会被服务端直接截断或报错。显存参考20B 级模型开 32k 上下文大约占用 18–20G 显存。24G 卡可以跑但如果你同时开了其他占显存的程序建议先关掉再测。4.2 重启网关保存openclaw.json后重启 OpenClaw 网关让配置重新加载pnpm openclaw gateway如果你用的是全局安装命令可能是openclaw gateway重启时留意终端输出正常情况下不会再出现 4096 相关的警告。4.3 验证上下文长度是否生效最直接的验证是发一个需要长上下文的请求。在聊天框里粘贴一篇超过 5000 字的文章或者让它读取整个项目目录读取 src 目录下所有 .ts 文件汇总每个文件的导出函数生成一份 README.md如果配置生效Agent 会开始处理大量 token日志里能看到上下文长度接近 32000 而不是 4096。你也可以在网关日志里搜索contextWindow关键字确认加载的值是 32000。另一个检查点是看是否还报Minimum is 16000。这个报错消失说明窗口已经越过最低门槛。5. 本篇常见错排查改了没生效重启后还是 4096。先确认你改的是openclaw.json而不是models.json。后者是缓存重启即覆盖。再用ls -l确认路径有些环境同时存在正式和开发两个目录改错了那个不生效的。模型 ID 对不上。打开 LM Studio 复制模型标识符和 JSON 里的id逐字符比对。常见错误是把openai/gpt-oss-20b写成gpt-oss-20b少了前缀。LM Studio 端窗口没开大。只改 OpenClaw服务端仍按小窗口处理长请求会被截断。两端都要设成 32000。显存不够导致加载失败。32k 上下文对显存要求明显上升。如果 LM Studio 加载模型时报 OOM先把Context Length降到 16k 试跑确认链路通了再往上加。mode写成了replace或其他值。只有merge能实现“手写参数覆盖系统扫描”。写错会导致配置被忽略。JSON 语法错误。多一个逗号、少一个引号都会让整个文件解析失败。改完可以用python -m json.tool openclaw.json快速校验语法。6. 长上下文跑通后的下一步上下文窗口解锁到 32k 之后OpenClaw 的 Agent 能力才算真正可用读多文件、保留长对话历史、处理大段日志都不再被 4096 卡住。这套配置的核心就三点——改对文件、用merge模式、两端对齐窗口大小。如果你在验证阶段想快速确认模型本身的长上下文能力可以先用模型对话入口发一段长文本测试响应质量确认模型端没问题再回到 OpenClaw 调 Agent 任务。模型对话入口https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite长期跑编码和 Agent 任务的话建议把常用的模型参数固化到配置里避免每次重启重新调。Coding Plan 适合这种高频调试场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite配置过程中如果遇到鉴权或接入报错先检查 API Keys 和接入文档大部分问题出在 key 或 baseUrl 上https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewrite下一篇会处理重启后 token 变化导致的鉴权失败问题把动态 token 固定下来省掉每次手动复制的麻烦。