返回技术博客

Forge:8B 小模型如何用护栏框架达到 99% Agent 任务成功率

Forge:8B 小模型如何用护栏框架达到 99% Agent 任务成功率

HN 上 673 分的热帖,一个叫 Forge 的开源项目声称:给 8B 参数的本地小模型套上"护栏",就能在 Agent 任务上从个位数成功率飙升到 84%,甚至让 Claude Sonnet 4.6 从 85% 提升到 98%。

这不是微调,不是更大的模型,不是更贵的 API——是在推理外层加了一个可靠性层。

问题:小模型做 Agent 为什么不行

当你让 8B 模型执行多步工具调用时,各种问题层出不穷:

  • JSON 输出格式错误(多了 code fence、混了自然语言)
  • 调用不存在的工具(幻觉工具名)
  • 跳步执行(该订酒店的时候直接跳到租车)
  • 混淆"文本回复"和"工具调用"的意图

作者 Antoine Zambelli(Texas Instruments 工程师)在 HN 举了个例子:

"模型决定订机票、酒店、租车。机票一次成功,但到酒店环节它发送了 'here is the payload: [json blob]' 这样的自然语言给 API,整个工作流直接挂掉,部分完成状态。Forge 能捕获这个错误并引导模型修正。"

Forge 怎么做

Forge 不是 Agent 编排框架,它只管一件事:让工具调用变可靠。核心机制:

1. Response Validation(响应校验)

每次模型输出工具调用后,校验:工具名是否存在?参数格式是否正确?类型是否匹配?

2. Rescue Parsing(格式拯救)

小模型经常把 JSON 放在 markdown code fence 里,或者用 Mistral 的 [TOOL_CALLS] 格式、Qwen 的 XML 格式。Forge 自动识别并转换为标准 OpenAI schema。

3. Retry Loop(重试循环)

校验失败时,注入修正消息让模型重试(默认 3 次)。客户端看到的只是一次稍慢的请求。

4. Synthetic Respond Tool(合成响应工具)

注入一个虚拟工具,帮助模型区分"我要回复用户"和"我要调用工具"这两种意图。

5. Step Enforcement(步骤约束)

可选的前置/终止步骤约束,防止模型跳步。

关键数据

配置 无 Forge 有 Forge
Ministral-3-8B(本地) 个位数 84%
Claude Sonnet 4.6 85% 98%

推荐后端:llama-server + Ministral-3-8B-Instruct Q8 量化。

为什么这很重要

1. 它证明"不够大"不是根本问题

如果护栏能让前沿模型 Sonnet 4.6 也从 85% 提到 98%,说明即使是大模型也在工具调用上犯结构性错误。问题不完全在智力,而在格式和流程控制。

2. 零训练成本

不碰模型权重,不需要标注数据,即插即用。今天在 8B 模型上用的护栏,明天换 70B 模型一样生效。

3. 本地 Agent 的可行性

结合 DeepSeek V4-Flash(284B 总参数,13B 激活)这类高效模型,Forge 让"本地 GPU 跑可靠 Agent 工作流"从理论变为现实。

与其他方案对比

方案 成本 效果 灵活性
换更大模型 API 费用×10-100 不保证提升格式可靠性 低(供应商锁定)
微调 标注数据+GPU时间 领域绑定 低(换场景要重训)
Forge 护栏 0(推理多几次重试) 84-98% 高(模型/场景无关)

总结

Forge 的核心洞察很简单:模型够聪明但不够可靠,可靠性可以在外层解决

这像是给一个聪明但粗心的实习生配了一个严格的 code reviewer——不需要换人,只需要加流程。对于想在本地跑 Agent 工作流、不想为每次工具调用付 $25/M tokens 的团队来说,这是目前性价比最高的路径。

GitHub: github.com/antoinezambelli/forge(MIT 许可,1664 stars)