Tool Argument Validation
Tool Argument Validation 是在执行工具前校验 LLM 输出的参数是否符合 JSON Schema 的过程。它防止非法参数导致工具执行失败。
#type / concept
#status / evergreen
#tech / ai
[!info] related notes
- 所属 MOC: Tool Calling Engineering MOC
- 相关: Function Schema, Tool Runtime
Tool Argument Validation
一句话定义
Tool Argument Validation 是在执行工具前校验 LLM 输出的参数是否符合 JSON Schema 的过程。LLM 可能传入格式错误的参数(如日期格式错误、类型不对),校验可以提前发现问题。
核心原理
校验内容
| 校验项 | 例子 | 说明 |
|---|---|---|
| 类型 | string vs int | 参数类型是否正确 |
| 必填 | query 是必填 | required 字段是否都有 |
| 范围 | limit 在 1-100 | 数值范围是否合法 |
| 格式 | date 是 YYYY-MM-DD | 格式是否正确 |
| 枚举 | status 只能是 active/inactive | 值是否在允许范围内 |
Python 实现
import jsonschema
def validate_arguments(schema: dict, arguments: dict) -> tuple[bool, str]:
"""校验工具参数"""
try:
jsonschema.validate(arguments, schema)
return True, ""
except jsonschema.ValidationError as e:
return False, str(e)
# 使用
schema = {
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer", "minimum": 1, "maximum": 100}
},
"required": ["query"]
}
arguments = {"query": "test", "limit": 200} # limit 超出范围
valid, error = validate_arguments(schema, arguments)
# valid = False, error = "200 is greater than the maximum of 100"
参数修复
async def validate_and_repair(schema, arguments, llm):
"""校验失败时尝试让 LLM 修复参数"""
valid, error = validate_arguments(schema, arguments)
if valid:
return arguments
# 让 LLM 修复
prompt = f"""
工具参数校验失败:
错误: {error}
原始参数: {json.dumps(arguments)}
请修复参数使其符合 schema:
{json.dumps(schema)}
"""
repaired = await llm.chat(prompt)
return json.loads(repaired)
常见坑
- 不做校验: LLM 传了非法参数直接执行
- 校验错误信息不清楚: LLM 不知道怎么修复
- 不做参数修复: 校验失败就放弃