for param_name, param_value in params.items(): if param_name inself.tool_def["parameters"]["properties"]:
param_def =self.tool_def["parameters"]["properties"][param_name]
expected_type = param_def.get("type")
for param_name, param_value in params.items(): if param_name inself.tool_def["parameters"]["properties"]:
param_def =self.tool_def["parameters"]["properties"][param_name]
# 检查最小值 if"minimum"in param_def and param_value < param_def["minimum"]:
errors.append(f"参数'{param_name}'不能小于{param_def['minimum']}")
# 检查最大值 if"maximum"in param_def and param_value > param_def["maximum"]:
errors.append(f"参数'{param_name}'不能大于{param_def['maximum']}")
# 检查枚举值 if"enum"in param_def and param_value notin param_def["enum"]:
errors.append(f"参数'{param_name}'必须是{param_def['enum']}中的一个")
classErrorHandler:"""错误处理器"""def handle(self, error, context):"""处理错误"""
error_type =self.classify_error(error)if error_type =="network":returnself.handle_network_error(error, context)elif error_type =="parameter":returnself.handle_parameter_error(error, context)elif error_type =="authentication":returnself.handle_auth_error(error, context)elif error_type =="resource":returnself.handle_resource_error(error, context)else:returnself.handle_unknown_error(error, context)def classify_error(self, error):"""分类错误类型"""
error_str = str(error).lower()if any(word in error_str for word in["timeout","connection","network"]):return"network"elif any(word in error_str for word in["parameter","invalid","missing"]):return"parameter"elif any(word in error_str for word in["auth","key","permission"]):return"authentication"elif any(word in error_str for word in["limit","quota","unavailable"]):return"resource"else:return"unknown"def handle_network_error(self, error, context):"""处理网络错误"""return{"success":False,"error":"网络连接失败,请检查网络后重试","retryable":True,"retry_after":5# 5秒后重试}def handle_parameter_error(self, error, context):"""处理参数错误"""return{"success":False,"error": f"参数错误: {str(error)}","retryable":False,"suggestion":"请检查输入参数是否正确"}# 其他错误处理方法类似...
2. 用户友好的错误消息
将技术性错误转换为用户能理解的消息:
def user_friendly_error(error):"""生成用户友好的错误消息"""
error_map ={"timeout":"请求超时,请稍后重试","connection_error":"网络连接失败,请检查网络","invalid_api_key":"API 密钥无效,请检查配置","rate_limit_exceeded":"调用频率过高,请稍后再试","invalid_parameters":"输入参数不正确,请检查后重试"}
error_str = str(error).lower()for key, message in error_map.items():if key in error_str:return message
return"系统繁忙,请稍后重试"