现场是这样的。Agent 的外层工具 search_orders 带一个 filter 对象,模型把内层 filter.status 的值写到了外层 status 上,schema 校验通过但查询条件为空,返回零条。
中间走过弯路,把「服务端用宽松模式忽略了多余字段」当成主因,改完现象没变。
排查方向其实有限,先把可能性排一排。嵌套对象在 schema 里只写了 type 没写 properties;模型对同名层级的字段容易混淆;提示词里没有给出嵌套结构的示例。
上来先把嵌套结构写全并带上示例
python fix_schema.py --nested filter.status
服务端开启严格校验拒绝多余字段
python server.py --extra forbid
接着打印收到的参数逐层比对
python tool_dump.py --indent
剩下的就是用同名字段的请求验证拦截生效
python call_tool.py --payload nested.json
改之前先确认了最近有没有人动过配置,避免白查一遍。
恢复的判定其实很直接。层级写错时请求被明确拒绝并提示多余字段,层级正确时查询返回预期条数。
嵌套 schema 只写 type 等于没约束,模型会把字段拍平,严格模式加示例比反复改提示词有效。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
