DeepAI Paper Hermes Agent 教程,Hermes 上下文、流式与输出,Hermes 模型与 Provider API 1M 上下文不是越大越好:Hermes 在 Claude Pro 上踩到的 200K 限制

1M 上下文不是越大越好:Hermes 在 Claude Pro 上踩到的 200K 限制

很多人看到 “1M context window” 的第一反应是:越大越好。对 Agent 来说,上下文越长,理论上能记住更多历史、读更多文件、处理更复杂任务。

但在真实账号和不同模型服务里,上下文窗口不是一个可以随便拉满的数字

NousResearch/hermes-agent issue #3577 里,一个 Claude Pro 用户遇到的问题就很典型:Hermes 默认按 1M 上下文使用模型,但 Claude Pro 账号实际只允许 200K。短任务看起来没问题,一旦对话或文件长度超过 Pro 账号限制,就会突然撞墙。

更重要的是,评论里很快发现:这不是 Claude Pro 单点问题,GPT 模型、本地 Ollama / OpenAI-compatible 模型也可能被错误地报成更大的 context window。


这类 bug 最麻烦的地方:前期一切正常

它不像 API Key 错误,一上来就 401。

也不像依赖安装失败,启动阶段就崩。

上下文窗口配置错,往往会表现得很“温柔”:

短对话:正常
小文件:正常
普通问答:正常
长上下文任务:突然超限

所以用户很容易误判为:

  • 模型临时抽风;
  • provider 限流;
  • 文件太大;
  • prompt 写得不对;
  • Agent 历史太脏。

但根因可能只是:Hermes 以为你有 1M,实际上你的账号/模型只给 200K。


issue #3577 的核心:Claude Pro 不是 Enterprise

原始报告很短,但点很准:

Hermes defaults to 1M context window with no option to choose 200K.
Claude Pro doesn't allow a context window bigger than 200K.
Works fine until the limit is exceeded.

用户期望:

默认使用 200K context window

实际情况:

默认使用 1M

问题不是 Claude 模型完全不可用,而是 Hermes 没有把订阅层级差异纳入上下文窗口选择。

Claude Pro、Team、Enterprise、不同 API 入口、不同模型版本之间,上下文能力并不总是同一个数字。Agent 如果只按模型名硬编码最大值,就容易踩坑。


后续讨论:GPT 和 Ollama 也有类似问题

评论里有人补充:

This also happens to GPT models, like 5.4. It defaults to 1M and I can't change it to the 200k context window.

还有本地 Ollama 用户反馈:

Using Gemma4:26b with 128K context, reported as 256K in terminal.

这说明问题范围比 “Claude Pro 1M/200K” 更大。

真正的问题是:Hermes 需要一个可靠机制来确定“当前这个 provider + model + account + deployment 实际可用的上下文窗口”。

而不是简单认为:

模型理论最大窗口 = 当前用户可用窗口

为什么硬编码 context window 很危险?

硬编码上下文窗口有三个典型风险。

1. 账号层级不同

同一个模型名,在不同账号或产品层级下可能有不同限制。

例如:

  • Pro 用户:200K;
  • Enterprise 或特殊 API:更高;
  • 第三方聚合服务:可能做了转发或限制;
  • 本地部署:取决于启动参数和硬件。

如果 Hermes 不知道用户实际层级,就不能安全默认到最大值。

2. Provider 命名不统一

OpenAI-compatible provider、OpenRouter、DeepAI API 中转站、本地 Ollama、vLLM、LiteLLM 等都会暴露模型名。

但模型名并不总能告诉你真实上下文能力。

例如同一个 “Gemma / GPT / Claude” 名称,可能对应不同 quant、不同后端、不同 max tokens 配置。

3. 超限往往发生在任务后半段

上下文过大不是一开始报错,而是在 Agent 已经读了很多历史、工具输出、文件内容之后才失败。

这会浪费:

  • 时间;
  • token;
  • API 调用;
  • 用户耐心;
  • 任务状态。

更好的设计:让用户能显式设置 max_context_window

评论里提到的方向是:增加模型级别配置,例如:

models:
  anthropic/claude-sonnet-4:
    max_context_window: 200000

或者按 provider/model 做覆盖:

model_overrides:
  claude-pro-sonnet:
    provider: anthropic
    max_context_window: 200000
  local-gemma4-26b:
    provider: ollama
    max_context_window: 128000

关键不是具体字段名,而是能力:

> 用户必须能把“理论最大窗口”压到“当前账号真实可用窗口”。

这比让 Agent 盲目相信模型数据库更可靠。


自动查询 server 可以吗?

理想状态下,Hermes 可以向 provider 查询当前模型能力。

但现实里很难统一:

  • 有些 provider 不返回上下文窗口;
  • 有些 OpenAI-compatible 服务返回字段不标准;
  • 本地 Ollama 的运行参数可能比模型卡片更重要;
  • 第三方中转站可能暴露的是聚合模型名;
  • 同一模型不同账号 tier 能力不同。

所以自动查询是长期方向,短期更稳的是:

自动识别 + 用户可覆盖

也就是:能查就查,查不到或不可信时允许用户配置上限。


排查:如何判断自己是不是 context window 设大了

如果你遇到长任务后半段突然失败,可以按下面查。

1. 看失败发生的时机

如果短对话没问题,长文件/长历史后才失败,优先怀疑上下文窗口或 token budget。

2. 对照账号真实限制

确认你用的是:

  • Claude Pro 还是 API / Enterprise;
  • OpenAI 官方还是 OpenAI-compatible 中转;
  • 本地模型实际启动参数;
  • provider 控制台标注的上下文上限。

3. 看 Hermes 显示或日志中的 context window

如果 Hermes 显示 1M,但你的账号只支持 200K,就需要降上限。

4. 找可配置入口

优先寻找:

max_context_window
context_window
model override
provider override

如果版本暂不支持,只能升级、切模型或减少上下文输入。


和 DeepAI API 中转站的关系

DeepAI API 中转站提供统一的 OpenAI-compatible API 入口:

Base URL: https://api.deepai.wang/v1
API Key: 你的 DeepAI Key
Model: 以 DeepAI 控制台为准

如果你通过 DeepAI 调用多种模型,也要注意:上下文窗口应以 DeepAI 控制台和上游实际能力为准,而不是只看 Hermes 内置模型名。

更稳的做法是:

  • 在 DeepAI 控制台确认模型实际上下文;
  • 在 Hermes 中设置对应 model override;
  • 对长文件任务保留安全余量;
  • 不要把所有模型都默认当成 1M。

DeepAI 能帮你统一 API 入口,但不能替 Hermes 自动知道每个账号、每个模型、每个本地部署的真实 context window。


给 Agent 用户的实用建议

如果你经常做长上下文任务,我建议这样配置和使用:

1. 不要盲信 1M; 2. 先确认账号/模型真实上限; 3. 给 Hermes 设置保守的 max context; 4. 长文件任务先做分块摘要; 5. 保留 10%-20% 输出余量; 6. 本地模型按实际启动参数配置,而不是按模型宣传页配置; 7. OpenAI-compatible 中转服务以控制台说明为准。

这比等任务跑到一半再超限更省钱。


FAQ

1M context window 不是更好吗?

只有在你的账号和 provider 真支持时才更好。否则它只是一个会导致超限的错误假设。

Claude Pro 为什么不能直接用 1M?

不同订阅层级有不同上下文限制。Claude Pro 常见限制是 200K,不能按更高 tier 的能力默认配置。

GPT / Ollama 也会受影响吗?

会。评论里已有 GPT 和本地 Ollama 用户反馈类似“显示窗口大于实际可用窗口”的问题。

最好的修复是什么?

支持模型级 max_context_window override,并在可能时从 provider 查询真实能力。

DeepAI API 中转站能避免这个问题吗?

DeepAI 可以统一 API 入口,但上下文上限仍要以 DeepAI 控制台和上游模型实际能力为准。Hermes 仍需要正确配置 context window。


总结

#3577 的教训很简单:

上下文窗口不是越大越好,而是越准确越好。

对 Agent 来说,1M 不是一个安全默认值。Claude Pro 用户可能只有 200K,本地 Ollama 模型可能只有 128K,OpenAI-compatible provider 也可能有自己的限制。

真正可靠的做法,是让 Hermes 支持模型级上下文上限配置,并允许用户把理论最大值压到账号实际可用值。

Related Post

对象不是流:Copilot ACP 把 SimpleNamespace 塞进迭代器后的连锁崩溃对象不是流:Copilot ACP 把 SimpleNamespace 塞进迭代器后的连锁崩溃

Hermes copilot-acp 使用 claude-opus-4.7 时出现 SimpleNamespace object is not iterable,不是模型或 API Key 问题,而是 ACP adapter 把对象当成 stream iterable 处理。本文复盘 #16271,解释 acp://copilot 的 response 形态为什么不能靠猜。

只有思考没有正文,Hermes 流式输出也会崩:Gemini reasoning-only delta 的 .content 空洞只有思考没有正文,Hermes 流式输出也会崩:Gemini reasoning-only delta 的 .content 空洞

Gemini Code Assist streaming 中 reasoning-only delta 先于正文到达,Hermes 旧版 _make_stream_chunk 没有补 content=None,导致 downstream 访问 delta.content 时报 AttributeError。本文复盘 #24974:为什么流式 chunk schema 必须稳定。

Hermes Issue #464:Ghostty / tmux 输入框边框闪烁不是终端坏了,而是 TUI 重绘冲突Hermes Issue #464:Ghostty / tmux 输入框边框闪烁不是终端坏了,而是 TUI 重绘冲突

Hermes Agent 热门已关闭 Issue #464 复盘:Ghostty、tmux、Warp 或 Docker Terminal 中输入框边框闪烁,根因并非模型 API,而是 thinking spinner 通过 raw stdout / \r 与 prompt_toolkit 渲染冲突。附 HERMES_SPINNER_PAUSE=1 hermes 排查方法。