用 grammar 约束,本地模型终于不再把 JSON 写坏
paulqq · reddit · 2026-07-29
这篇是一个很实用的本地 agent 工程方案:用 grammar 约束让小模型别再把 JSON 输出搞坏。
作者指出,本地跑模型时,结构化输出最常见的问题是:
- 少一个右括号;
- 编造一个不存在的 tool 名;
- JSON 后面又多吐一段废话。
他的做法是利用 llama.cpp 的 GBNF grammar 能力,把每个工具的 schema 编译成语法规则,让模型在 token 级别就被约束住,从而理论上不可能生成非法 JSON。另外,他还会按轮次缩小 grammar,只让模型看到当前真正相关的 3–5 个工具,而不是全部 50 个。
文章背景是他自己的本地 Rust agent Eris:
- 用 Markdown 笔记做记忆;
- 单个 Rust binary 运行;
- 完全本地化;
- 附带了代码仓库和完整实现细节。
「编程与Agent」频道最新
- Claude Opus 5 在 DeepSWE 夺魁,号称成本还低 28% — daniel_mac8 · 2026-07-29
- Claude 文件夹把原始资料变成自更新第二大脑 — wschroll · 2026-07-29
- Opus 5 发布 5 天,社区已能生成整站和完整游戏 — heypearlai · 2026-07-29
- Opus 5 已能无外部素材生成完整 Minecraft 作品 — heypearlai · 2026-07-29
- Opus 5 发布 5 天,社区已在晒完整游戏 demo — heypearlai · 2026-07-29
- AI 代理手机到底是什么,为何移动端流程离不开它 — Petesneaknex · 2026-07-29