允许列表优于拒绝列表在可能的情况下,定义 允许 的内容(允许列表),而不是试图列出所有 不 允许的内容(拒绝列表)。拒绝列表众所周知难以正确实现,并且随着新攻击载体的发现而经常被规避。例如,对于需要国家代码的参数,请根据已知有效国家代码列表进行验证。处理验证失败当验证或净化规则被违反时,你的工具不应仅仅崩溃或继续处理受污染的数据。它需要:明确拒绝输入。返回提供信息的错误消息。 这对LLM智能体尤为重要。一个好的错误消息可以帮助智能体理解哪里出了问题,并可能在后续尝试中修正其输入。例如,如果Pydantic验证失败,其ValidationError包含关于错误的结构化信息。你可以将其格式化为LLM可以解析或理解的字符串。# (Pydantic SearchToolInput 示例的延续) # ... # except ValidationError as e: # error_details = e.errors() # 这是一个字典列表 # # 为LLM构建一个用户友好的消息 # messages = [] # for error in error_details: # field = \" -> \".join(map(str, error['loc'])) # loc 可以是嵌套模型的路径 # msg = error['msg'] # messages.append(f\"字段 '{field}':{msg}\") # error_summary = \"输入验证失败。 \" + \"; \".join(messages) # return {\"status\": \"error\", \"message\": error_summary, \"details\": error_details} # llm_provided_input_very_wrong = {\"query\": \"Q\", \"max_results\": 200, \"extra_field\": \"test\"} # result = search_documents(llm_provided_input_very_wrong) # print(json.dumps(result, indent=2)) # 预期输出可能如下所示: # { # \"status\": \"error\", # \"message\": \"Input validation failed. Field 'query': ensure this value has at least 3 characters; Field 'max_results': ensure this value is less than or equal to 50; Field 'extra_field': extra fields not permitted\", # \"details\": [ # { /* Pydantic 错误详情 */ } # ] # }目标是为LLM(或监控智能体的开发者)提供足够的信息,以便更好地理解输入要求。通过认真应用输入验证和净化,你为你的Python工具构建了信任和可靠的基础。这不仅能防止错误和安全漏洞,还有助于LLM智能体与其扩展功能之间更可预测和有效的交互。请记住,任何来自你直接控制范围之外的输入,包括LLM生成的输入,都需要仔细检查。","isAccessibleForFree":false,"hasPart":{"@type":"WebPageElement","isAccessibleForFree":false,"cssSelector":".login-required-content"}}
© 2025 ApX Machine Learning