先看现象。注册工具时报参数校验失败,提示 required 字段缺失或类型不匹配,Agent 一启动就异常。

排查方向其实有限,先把可能性排一排。required 里列了 properties 中不存在的字段。还有一种是参数类型写成了 Python 类型而不是 JSON 类型。

另外,嵌套对象的 properties 没有写全。

少数情况下是工具名带空格或特殊字符。

上来先用标准结构重写参数定义

params = {'type':'object','properties':{'city':{'type':'string'}},'required':['city']}

注册前用校验库跑一遍

python -c "import jsonschema;jsonschema.validate({'city':'北京'},params);print('ok')"

然后确认工具名只含字母数字下划线

python -c "print('get_weather'.isidentifier())"

等前面都确认过,再把工具定义打日志便于排错

print(json.dumps(tool_def, ensure_ascii=False)[:300])

同一份数据我导出了两份,一份留底,一份拿来试。

怎么算真的好了,看的是同一批现象。工具注册成功,Agent 调用时参数能正确传递,不再出现 schema 校验错误。

这里还有个坑。模型只看得到描述和 schema,描述写得含糊时会传错参数,工具说明里的示例往往比字段定义更影响成功率。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189