Tool Argument Validation

Tool Argument Validation 是在执行工具前校验 LLM 输出的参数是否符合 JSON Schema 的过程。它防止非法参数导致工具执行失败。

#type / concept #status / evergreen #tech / ai

[!info] related notes

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)

常见坑

  1. 不做校验: LLM 传了非法参数直接执行
  2. 校验错误信息不清楚: LLM 不知道怎么修复
  3. 不做参数修复: 校验失败就放弃

参考资料

创建于 2026/6/30 更新于 2026/7/15