為什麼 8B 開源模型跑 Agent 總死循環?Hermes 三個硬核調參(2026)
2026 年,本機跑 Llama 3.1/3.2 8B、Qwen 2.5 7B 或 Hermes 3 8B 看起来很划算——直到 Agent 进入死循環:工具 JSON 格式错误、反复调用 terminal,或一直说「我现在去跑测试…」却从不真正调工具。GPU 往往没问题,真正失控的是采样 + 上下文 + 工具面。
Hermes Agent(NousResearch/hermes-agent,MIT)面向前沿模型设计,但同样支持 OpenRouter、Ollama 及台灣常见的 OpenAI 兼容推理框架。本文說明小模型在 Agent 场景为何容易崩,并给出三个硬核調參加七步實操,帮助在 16–24 GB 顯存 的 Mac 或 Linux 上穩定长跑任务。
config.yaml 里的使用者級 temperature 仍未完全开放(#17565),请同時在 Ollama/推理服务端设采样,并配合下文 reasoning 与工具强制项。為什麼 8B 在函式调用上容易「翻车」
小尺寸 Instruct 模型多按单轮对话訓練,而不是五十轮工具軌跡。Agent 循环会放大三类弱点:
| 弱点 | Hermes 中的表现 | 為何燒 token |
|---|---|---|
| 结构化输出漂移 | 工具 JSON 夹带废话、键名错误或纯文本「假调用」 | 解析重试;模型反复重读整段线程 |
| 注意力稀释 | 早期 HTML/日志 把原始目标挤出窗口 | 忘记停止条件,重复同一计划 |
| 高熵采样 | 用不同措辞重复同一方案 | curl/grep 仅改微小参数 |
可引用定义:在 Hermes 中,「工具调用」指运行时解析并执行的结构化消息;8B 若输出叙述性文字而非该结构,循环无法推进,上下文会被重复计划塞满。
大模型靠体量自愈;8B 必须收窄工具菜单、压低 reasoning 开销、 積極 做上下文卫生。请配合 軌跡压缩,避免中段膨胀放大死循環。统一内存规划可参考 Apple Mac mini 规格。
架構:Hermes 每轮实际发送什么
| 层级 | 路径 / 命令 | 对小模型的影响 |
|---|---|---|
| 模型端点 | hermes model → config.yaml model: | context_length 设错会过早压缩或溢出 |
| 工具面 | hermes tools / agent.disabled_toolsets | 工具越少,prompt 里 JSON schema 越少 |
| Skills | ~/.hermes/skills/、hermes chat -s a,b | 每个 skill 增加指令;8B 建议最多 2 个 |
| 强制调用 | agent.tool_use_enforcement | 推动 Llama/Qwen 真调工具 而非口述 |
| Reasoning | agent.reasoning_effort + /reasoning | 默认 medium 在部分路由会加隐藏「思考」token |
| 上下文卫生 | compression.*、tool_output.* | 在巨型 stdout 填滿窗口前截断 |
Hermes 内部对部分模型有固定 temperature 契約。本地请在推理服务端设采样(Ollama PARAMETER temperature 0.2、llama.cpp --temp 0.2),在 YAML 暴露 temperature 之前,以 reasoning 与 tool 配置为主(#17565)。
三个比单纯调温更重要的设置
調參 1 — 关掉隐藏 reasoning(reasoning_effort: none)
默认 reasoning 为 medium,对 Opus 级有用,却常让本地 8B 膨胀:
agent:
reasoning_effort: none # or minimal for light planning
display:
show_reasoning: false
/reasoning
/reasoning none
典型症状缓解:长时间空白「思考」后出现畸形工具 JSON。
調參 2 — 强制真实工具调用(tool_use_enforcement)
8B 版 Llama/Qwen 爱「口述操作」。Hermes 可注入强制提示:
agent:
tool_use_enforcement: true
provider_routing:
require_parameters: true
默认 "auto" 仅对 GPT/Gemini 族开启——本地 8B 默认关闭,需手动打开。路由见 provider routing。
調參 3 — 技能节食:两 skill、最小 toolset
Skill 虽渐进披露,索引 alone 約 3k token;可选 MCP 目录还会再加。
8B 启动示例:
hermes chat --toolsets "terminal,file" \
-s github-pr-workflow,plan \
-m "qwen/qwen-2.5-7b-instruct"
- 预加载≤2 个 skill(
-s a,b),其余按需手动加载 - 全局禁用重型 toolset(见下方片段)
- 8B 机器不要装齐
optional-mcps/——每个 MCP 增加 schema 与失败面(MCP Mac 指南)
agent:
disabled_toolsets:
- web
- browser
- image_gen
- moa
- memory
可选:创建 profile 时清空 skill:
hermes profile create local-8b --no-skills
顯存檔位:Mac / 單卡 Linux 怎麼選
同樣是「8B」,量化等級、是否掛 MCP、閘道是否常駐,對穩定性的影響常大於型號本身。
| 硬體 | 模型示例 | Hermes 設定 | 穩定工具輪次(經驗值) |
|---|---|---|---|
| 16 GB 統一記憶體(Mac mini M4) | Qwen2.5-7B Q4 + 8k 上下文 | terminal,file + 1 個 skill | 6–12 次後建議手動 /compress |
| 24 GB(M4 Pro 等) | Llama-3.1-8B Q5 + 16k | 2 個 skill + compression.threshold: 0.40 | 約 12–20 次 |
| 32 GB+ 或獨顯 12 GB+ | 8B Q6 + 32k | 最多再加 1 個 MCP | 可嘗試較長重構任務 |
若 X 則 Y:連續兩次 JSON 工具失敗 → 減到 1 個 skill 並減半 tool_output.max_bytes。若已開 enforcement + 低溫仍循環,該任務更適合 14B+ 或雲端只做規劃。
三種常見死循環與對策
- 解析循環 — JSON 非法反覆重試。對策:enforcement、減工具、推理端降溫。
- 空轉計劃 — 只覆述計劃不調工具。對策:
reasoning_effort: none,提示詞寫明最多 N 次工具。 - 日誌循環 — 反覆讀巨大 stdout。對策:壓低
tool_output、40% 觸發壓縮、終端先head。
七步實操:Hermes 上穩定跑 8B Agent
第 1 步 — 安裝并设真实上下文长度
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
source ~/.zshrc
hermes doctor
将 model.context_length 设为本地真实上限(如 8192 或 16384),勿填营销上的 128k:
model:
context_length: 16384
前置:Hermes Mac 安裝指南。
第 2 步 — 指向本地端点
hermes model
hermes chat -q "Reply OK only" -m "your-local-model-id"
第 3 步 — 在 config.yaml 应用三项調參
agent:
reasoning_effort: none
tool_use_enforcement: true
disabled_toolsets:
- web
- browser
- image_gen
- memory
compression:
enabled: true
threshold: 0.40
tool_output:
max_bytes: 20000
max_lines: 500
file_read_max_chars: 30000
阈值宜低于默认——小窗口填滿很快。
第 4 步 — 服务端采样(在 YAML 暴露 temperature 前)
在 Ollama Modelfile 或 API 使用低 temperature 与适中 top_p:
PARAMETER temperature 0.2
PARAMETER top_p 0.9
Hermes 仍可能有 per-model 覆盖;服务端低熵有助于减少 JSON 幻觉。
第 5 步 — 用两个 skill 跑有界工具任务
hermes chat --toolsets "terminal,file" \
-s plan \
-m "your-local-model-id"
Task: list top 5 largest files in ./src, write paths to /tmp/top5.txt.
Rules: max 8 tool calls; if stuck, stop and report blocker.
觀察状态栏上下文百分比;自动压缩前若变橙可手动 /compress。
第 6 步 — 用 /usage 与 /stop 早发现循环
/usage
/stop
若相同参数的工具调用重复三次,应中止并收窄 prompt——8B 很少能无人干预自行纠正。
第 7 步 — 可选:常开 Mac mini 跑 gateway
24/7 自动化可把 gateway 放在不睡眠的机器上;8B 推理仍在 GPU,gateway 吃 CPU。循环穩定后再看 定時 Discord 日报——定時任务会放大失控开销。
排錯
每次工具调用都 JSON 解析失败
現象:Failed to parse tool call 或工具名出现在正文里。
處理:开启 tool_use_enforcement: true;toolset 缩至 terminal,file;降低服务端 temperature;换面向工具微调的量化(如 Qwen2.5-Instruct)。避免在 prompt 里要求并行多工具。
无限「我将要…」却不调工具
現象:模型描述步骤;TUI 无终端图标。
處理:同上,并在 SOUL.md 写明:「必须调用工具,禁止承诺未来操作。」skill 减至 1 个;确认非 reasoning_effort: high。
16K 模型第 4 轮就上下文爆满
現象:上下文条变红;回答混乱。
處理:compression.threshold: 0.35、减小 tool_output.max_bytes、禁用 web/browser,并养成 軌跡压缩 习惯(大段粘贴前先 /compress)。
常見問題
reasoning_effort: none 与 tool_use_enforcement。关注 #17565。compression.* 与 /compress 控制線上窗口——8B 主机建议两者并用。