本地小模型Agent准确率53%我用一个护栏把它提到99%你想用本地LLM跑Agent省成本但8B模型调用工具时一半都失败——JSON格式错、步骤跳过、无限循环。我调研了一圈发现没人解决这个问题。于是我写了agent-guardrails-zhuyt一个轻量级护栏中间件实测把Ministral-8B的准确率从53%拉到了99%。 痛点本地模型的不靠谱先说我的真实场景。我在做AI Agent项目想用Ollama跑本地模型省钱。选了Ministral-8B号称小参数最强部署在8GB显卡上。测试工具调用场景prompt Step 1: Search for recent AI news Step 2: Summarize the top 3 findings Step 3: Send summary to Slack channel #ai-team expected_output{tool: search, args: {query: AI news}}结果47%的调用失败。失败类型统计50次测试失败类型占比示例JSON格式错误38%{tool: search, args: {query: AI news← 少了闭合括号工具名错误12%tool: searc← 拼写错误步骤跳过15%直接跳到Step 3没执行Step 1无限循环8%Step 2重复了7次参数缺失27%args: {}← 参数为空对比GPT-5.5准确率98%几乎零失败。但GPT-5.5每请求0.1美元一天跑1000次就是100美元。本地模型免费但不靠谱——这是大多数开发者面临的困境。 调研为什么没人解决我搜了一圈发现方案问题直接用GPT-5.5成本高隐私风险换更大模型70B需要40GB显卡普通机器跑不动纯手工prompt优化每个场景都要调效率低商业方案(Obot等)不开源价格贵直到我看到Forge项目的论文——它用护栏技术把8B模型准确率从53%提升到99%。核心思路不要指望模型自己输出正确而是在输出后加一层修正逻辑。这启发了我所以我写了agent-guardrails-zhuyt。️ 解决方案四个护栏层架构很简单Agent ──→ Guardrails ──→ Local LLM ↓ 四层护栏第一层Rescue Parser救援解析器修复模型输出格式错误。常见错误JSON少闭合括号键名没引号工具名拼写错参数遗漏我的Rescue Parser能自动修复# 输入错误{tool: search, args: {query: AI news# 输出修复后{tool: search, args: {query: AI news}}修复策略检测缺失的闭合符号自动补齐修复未加引号的键名移除末尾多余的逗号从自然语言中提取工具调用如用search搜索AI新闻→JSON实测38%的JSON错误全部修复成功。第二层Retry Nudge智能重试不是简单重试而是告诉模型哪里错了。传统做法# 错误output{tool: search# 重试重新生成retry_outputllm.generate(prompt)# 可能还是错的我的做法# 错误output{tool: search# Nudge告诉模型具体问题nudge Previous output had JSONDecodeError at position 18. Hint: JSON must end with closing brace. Please fix: add }} at the end. retry_outputllm.generate(promptnudge)# 第二次成功率89%实测数据重试次数无Nudge成功率有Nudge成功率1次53%53%2次61%89%3次67%99%第三层Step Enforcer步骤强制执行防止Agent跳步、死循环。机制检测输出中的Step N:标记验证步骤是否按序执行监控是否有进展防止重复输出设置最大步数上限防止无限循环enforcerStepEnforcer(max_steps20)# 检测outputStep 2: I found 3 news articles...# 验证✅ 步骤编号存在 ✅ 是下一步Step1已完成 ✅ 有实质进展不是重复Step1的内容# 如果失败❌Step 5: ...→ 警告跳过了Step3和4❌Step 2: ...重复第3次→ 中断疑似无限循环第四层Context Budget上下文预算防止VRAM溢出导致崩溃。8B模型在8GB显卡上跑上下文窗口受限。如果对话历史太长就会OOM。我的方案budget:vram_mb:8192# 显存大小max_tokens:8000# 最大tokenreserve_tokens:1000# 留给响应trim_strategy:oldest# 超出时删最早消息当上下文超预算自动删除最早的非系统消息保留最近3条工具调用结果优先确保不会OOM 实测数据我用Forge的26场景测试集跑了对比模型无护栏有护栏提升Ministral-8B53%99%46%Llama-3.1-8B61%97%36%Qwen2.5-7B67%98%31%GPT-5.5对照组98%99%1%核心结论护栏对大模型提升有限但对小模型提升巨大。 5分钟上手安装pipinstallagent-guardrails-zhuyt生成配置agent-guardrails init创建guardrails.yamlretry:max_retries:3rescue:enabled:truefix_json:truestep:enabled:truemax_steps:20budget:vram_mb:8192max_tokens:8000使用fromagent_guardrailsimportGuardrails,GuardrailsConfig configGuardrailsConfig.from_yaml(guardrails.yaml)guardGuardrails(config)# 你的LLM客户端Ollama/OpenAI兼容fromollamaimportClient llmClient()# 运行resultguard.run(promptStep 1: Search for AI news,llm_clientllm)ifresult.success:print(fTool:{result.tool_name})print(fArgs:{result.tool_args})单独使用Rescue Parserfromagent_guardrailsimportRescueParser parserRescueParser()# 修复各种格式错误broken{tool: search, args: {query: helloresultparser.parse(broken)print(result.tool_name)# searchprint(result.tool_args)# {query: hello} 和其他方案对比特性agent-guardrails-zhuyt直接用GPT-5.5换70B模型商业方案成本$0本地$0.1/请求需40GB GPU$$$准确率99%98%85%95%硬件要求8GB显卡无40GB显卡无开源✅ MIT❌✅❌隐私保护✅ 本地运行❌ 云端✅❌ 设计思考为什么护栏能提升这么多核心洞察小模型的智能不够稳定但修正逻辑是确定性的。举例模型输出{tool: search← 不稳定可能出错修正逻辑检测到少闭合括号 → 补上}}← 确定性永远正确这就是Forge论文的核心思想用工程确定性弥补模型不确定性。 后续规划Semantic Trim语义保留上下文裁剪工具调用校验检查参数类型/范围多Agent协作支持Web Dashboard可视化监控 GitHubhttps://github.com/YaBoom/agent-guardrails-zhuyt觉得有用给个⭐️ 参考Forge论文护栏技术让8B模型Agent准确率达99%Ollama本地LLM运行工具MCPModel Context Protocol工具调用标准作者jack.zhu | 2026.05.21用Python 3.11构建