Browse Source

fix confit

linfan 1 year ago
parent
commit
1e57d7233f
6 changed files with 183 additions and 108 deletions
  1. 59 4
      app.py
  2. 4 4
      config.py
  3. 71 48
      rank_service.py
  4. 11 10
      recommend.py
  5. 27 0
      utils.py
  6. 11 42
      video_rank.py

+ 59 - 4
app.py

@@ -49,12 +49,39 @@ def homepage_recommend():
         uid = request_data.get('uid')
         category_id = request_data.get('categoryId')
         size = request_data.get('size', 4)
-        app_type = request_data.get('appType')
+        app_type = request_data.get('appType', 4)
         algo_type = request_data.get('algoType')
         client_info = request_data.get('clientInfo')
         ab_exp_info = request_data.get('abExpInfo', None)
         ab_info_data = request_data.get('abInfoData', None)
         version_audit_status = request_data.get('versionAuditStatus', 2)  # 小程序版本审核参数:1-审核中,2-审核通过,默认:2
+        machineinfoBrand = request_data.get('machineinfoBrand', '')
+        machineinfoModel = request_data.get('machineinfoModel', '')
+        machineinfoPlatform = request_data.get('machineinfoPlatform', '')
+        pagesource = request_data.get('pageSource', '')
+        versioncode = request_data.get('versionCode', 0)
+        recommendsource = request_data.get('recommendSource', '0')
+        sencetype = request_data.get('senceType', 0)
+        env_dict = {}
+        try:
+            env_dict['app_type'] = int(app_type)
+            env_dict['pagesource'] = str(pagesource)
+            env_dict['versioncode'] = int(versioncode)
+            env_dict['machineinfo_brand'] = str(machineinfoBrand)
+            env_dict['machineinfo_model'] = str(machineinfoModel)
+            env_dict['machineinfo_platform'] = str(machineinfoPlatform)
+            env_dict['recommendsource'] = str(recommendsource)
+            env_dict['sencetype'] = int(sencetype)
+        except:
+            env_dict['app_type'] = 4
+            env_dict['pagesource'] = str(pagesource)
+            env_dict['versioncode'] = 0
+            env_dict['machineinfo_brand'] = str(machineinfoBrand)
+            env_dict['machineinfo_model'] = str(machineinfoModel)
+            env_dict['machineinfo_platform'] = str(machineinfoPlatform)
+            env_dict['recommendsource'] = str(recommendsource)
+            env_dict['sencetype'] = sencetype
+            log_.error("feature error",env_dict)
 
         params = Params(request_id=request_id)
         # size默认为10
@@ -73,7 +100,8 @@ def homepage_recommend():
                 ab_exp_info=ab_exp_info,
                 params=params,
                 ab_info_data=ab_info_data,
-                version_audit_status=version_audit_status
+                version_audit_status=version_audit_status,
+                env_dict = env_dict
             )
 
             result = {'code': 200, 'message': 'success', 'data': {'videos': recommend_result['videos']}}
@@ -149,7 +177,33 @@ def relevant_recommend():
         page_type = request_data.get('pageType')  # 1:详情页;2:分享页
         ab_info_data = request_data.get('abInfoData', None)
         version_audit_status = request_data.get('versionAuditStatus', 2)  # 小程序版本审核参数:1-审核中,2-审核通过,默认:2
-
+        machineinfoBrand = request_data.get('machineinfoBrand', '')
+        machineinfoModel = request_data.get('machineinfoModel', '')
+        machineinfoPlatform = request_data.get('machineinfoPlatform', '')
+        pagesource = request_data.get('pageSource', '')
+        versioncode = request_data.get('versionCode', 0)
+        recommendsource = request_data.get('recommendSource', '0')
+        sencetype =  request_data.get('senceType', 0)
+        env_dict = {}
+        try:
+            env_dict['app_type'] = int(app_type)
+            env_dict['pagesource'] = str(pagesource)
+            env_dict['versioncode'] = int(versioncode)
+            env_dict['machineinfo_brand'] = str(machineinfoBrand)
+            env_dict['machineinfo_model'] = str(machineinfoModel)
+            env_dict['machineinfo_platform'] = str(machineinfoPlatform)
+            env_dict['recommendsource'] = str(recommendsource)
+            env_dict['sencetype'] = int(sencetype)
+        except:
+            env_dict['app_type'] = 4
+            env_dict['pagesource'] = str(pagesource)
+            env_dict['versioncode'] = 0
+            env_dict['machineinfo_brand'] = str(machineinfoBrand)
+            env_dict['machineinfo_model'] = str(machineinfoModel)
+            env_dict['machineinfo_platform'] = str(machineinfoPlatform)
+            env_dict['recommendsource'] = str(recommendsource)
+            env_dict['sencetype'] = sencetype
+            log_.error("feature error", env_dict)
         params = Params(request_id=request_id)
         recommend_result = video_relevant_recommend(
             request_id=request_id,
@@ -163,7 +217,8 @@ def relevant_recommend():
             page_type=page_type,
             params=params,
             ab_info_data=ab_info_data,
-            version_audit_status=version_audit_status
+            version_audit_status=version_audit_status,
+            env_dict = env_dict
         )
 
         result = {'code': 200, 'message': 'success', 'data': {'videos': recommend_result['videos']}}

+ 4 - 4
config.py

@@ -1318,7 +1318,7 @@ class DevelopmentConfig(BaseConfig):
     GET_USER_30DayReturnCnt_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/user/has30DayReturnCnt?mid='
 
     #tf serving url
-    TF_SERVING_URL = 'http://localhost:8501/v1/models/deepfm:predict'
+    TF_SERVING_URL = 'http://192.168.203.102:8501/v1/models/deepfm:predict'
 
     # 日志服务配置
     ALIYUN_LOG = {
@@ -1376,7 +1376,7 @@ class TestConfig(BaseConfig):
     GET_USER_30DayReturnCnt_URL = 'http://videotest-internal.yishihui.com/longvideoapi/openapi/user/has30DayReturnCnt?mid='
 
     # tf serving url
-    TF_SERVING_URL = 'http://localhost:8501/v1/models/deepfm:predict'
+    TF_SERVING_URL = 'http://192.168.203.102:8501/v1/models/deepfm:predict'
 
     # 日志服务配置
     ALIYUN_LOG = {
@@ -1434,7 +1434,7 @@ class PreProductionConfig(BaseConfig):
     GET_USER_30DayReturnCnt_URL = 'http://videopre-internal.piaoquantv.com/longvideoapi/openapi/user/has30DayReturnCnt?mid='
 
     # tf serving url
-    TF_SERVING_URL = 'http://localhost:8501/v1/models/deepfm:predict'
+    TF_SERVING_URL = 'http://192.168.203.102:8501/v1/models/deepfm:predict'
 
     # 日志服务配置
     ALIYUN_LOG = {
@@ -1492,7 +1492,7 @@ class ProductionConfig(BaseConfig):
     GET_USER_30DayReturnCnt_URL = 'http://longvideoapi-internal.piaoquantv.com/longvideoapi/openapi/user/has30DayReturnCnt?mid='
 
     # tf serving url
-    TF_SERVING_URL = 'http://localhost:8501/v1/models/deepfm:predict'
+    TF_SERVING_URL = 'http://192.168.203.102:8501/v1/models/deepfm:predict'
 
     # 日志服务配置
     ALIYUN_LOG = {

+ 71 - 48
rank_service.py

@@ -1,32 +1,33 @@
 #coding utf-8
 from db_helper import RedisHelper
 from config import set_config
-from  utils import request_post
+from  utils import  request_post_data
 import json
 from log import Log
 
+
 config_ = set_config()
 log_ = Log()
-def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
+def get_featurs(mid, data, size, top_K, flow_pool_P, env_dict=None):
     recall_list = []
     vidKeys = []
     feature_dict = {}
     # defult value
-    apptype = 0
+    apptype = 4
     pagesource = ""
-    versioncode = ""
-    machineinfo_brand=""
-    recommendsource = ""
-    machineinfo_platform = ''
-    sencetype = ''
-    mid = ''
-    if env_dict:
-        apptype = env_dict.get('app_type','')
-        pagesource = env_dict.get('versioncode', '')
-        versioncode = env_dict.get('versioncode', '')
+    versioncode = "580"
+    machineinfo_brand="HUAWEI"
+    recommendsource = "0"
+    machineinfo_platform = 'android'
+    sencetype = 100078
+    machineinfo_model ='M2006C3LC'
+    if env_dict and len(env_dict)>0:
+        apptype = env_dict.get('app_type',4)
+        pagesource = env_dict.get('pagesource', '')
+        versioncode = env_dict.get('versioncode', 0)
         machineinfo_brand = env_dict.get('machineinfo_brand', '')
         machineinfo_model = env_dict.get('machineinfo_model', '')
-        recommendsource = env_dict.get('recommendsource', '')
+        recommendsource = env_dict.get('recommendsource', '0')
         machineinfo_platform = env_dict.get('machineinfo_platform', '')
         sencetype = env_dict.get('sencetype', '')
     redisObj = RedisHelper()
@@ -58,7 +59,7 @@ def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
             continue
         vid = recall_item.get("videoId",0)
         mid_list.append(mid)
-        videoid_list.append(vid)
+        videoid_list.append(int(vid))
         apptype_list.append(apptype)
         pagesource_list.append(pagesource)
         versioncode_list.append(versioncode)
@@ -69,7 +70,9 @@ def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
         sencetype_list.append(sencetype)
         vidKeys.append(pre_str + str(vid))
         recall_list.append(recall_item)
+    #print("vidKeys:", vidKeys)
     video_static_info = redisObj.get_batch_key(vidKeys)
+    #print("video_static_info:",video_static_info)
     if video_static_info:
         for i in range(len(video_static_info)):
             try:
@@ -77,33 +80,34 @@ def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
                 vid = vidKeys[i].replace(pre_str,"")
                 if video_static_info[i] :
                     per_video_staic = json.loads(video_static_info[i])
-                    if vid in feature_dict:
-                        vid_fea_info = feature_dict[vid]
-                        day_rov_list.append(per_video_staic[0])
-                        day_share_return_score_list.append(per_video_staic[1])
-                        day_share_score_list.append(per_video_staic[2])
-                        day_return_rate_list.append(per_video_staic[3])
-                        day_ctr_score_list.append(per_video_staic[4])
-                        day_view_users_list.append(per_video_staic[5])
-                        day_view_pv_list.append(per_video_staic[6])
-                        day_play_users_list.append(per_video_staic[7])
-                        day_play_pv_list.append(per_video_staic[8])
-                        day_share_users.append(per_video_staic[9])
-                        day_share_pv_list.append(per_video_staic[10])
-                        day_return_users_list.append(per_video_staic[11])
+                    day_rov_list.append(float(per_video_staic[0]))
+                    day_share_return_score_list.append(float(per_video_staic[1]))
+                    day_share_score_list.append(float(per_video_staic[2]))
+                    day_return_rate_list.append(float(per_video_staic[3]))
+                    day_ctr_score_list.append(float(per_video_staic[4]))
+                    day_view_users_list.append(int(per_video_staic[5]))
+                    day_view_pv_list.append(int(per_video_staic[6]))
+                    day_play_users_list.append(int(per_video_staic[7]))
+                    day_play_pv_list.append(int(per_video_staic[8]))
+                    day_share_users.append(int(per_video_staic[9]))
+                    day_share_pv_list.append(int(per_video_staic[10]))
+                    day_return_users_list.append(int(per_video_staic[11]))
+                else:
+                    insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
+                                              day_return_rate_list, day_return_users_list, day_rov_list,
+                                              day_share_pv_list, day_share_return_score_list, day_share_score_list,
+                                              day_share_users, day_view_pv_list, day_view_users_list)
             except Exception:
-                day_rov_list.append(0.0)
-                day_share_return_score_list.append(0.0)
-                day_share_score_list.append(0.0)
-                day_return_rate_list.append(0.0)
-                day_ctr_score_list.append(0.0)
-                day_view_users_list.append(0)
-                day_view_pv_list.append(0)
-                day_play_users_list.append(0)
-                day_play_pv_list.append(0)
-                day_share_users.append(0)
-                day_share_pv_list.append(0)
-                day_return_users_list.append(0)
+                insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
+                                          day_return_rate_list, day_return_users_list, day_rov_list,
+                                          day_share_pv_list, day_share_return_score_list, day_share_score_list,
+                                          day_share_users, day_view_pv_list, day_view_users_list)
+    else:
+        for i in range(len(recall_list)):
+            insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list,
+                                      day_return_rate_list, day_return_users_list, day_rov_list,
+                                      day_share_pv_list, day_share_return_score_list, day_share_score_list,
+                                      day_share_users, day_view_pv_list, day_view_users_list)
     feature_dict["mid_list"] = mid_list
     feature_dict["videoid_list"] = videoid_list
     feature_dict["apptype_list"]  = apptype_list
@@ -114,7 +118,7 @@ def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
     feature_dict["recommendsource_list"] = recommendsource_list
     feature_dict["machineinfo_model_list"] = machineinfo_model_list
     feature_dict["machineinfo_platform_list"] = machineinfo_platform_list
-    feature_dict["sencetype_lis"] = sencetype_list
+    feature_dict["sencetype_list"] = sencetype_list
     feature_dict["day_rov_list"] = day_rov_list
     feature_dict["day_share_return_score_list"] = day_share_return_score_list
     feature_dict["day_share_score_list"] = day_share_score_list
@@ -130,6 +134,23 @@ def get_featurs(data, size, top_K, flow_pool_P, env_dict=None):
     feature_dict["day_share_users_list"] = day_share_users
     return feature_dict, recall_list
 
+
+def insert_static_default_fea(day_ctr_score_list, day_play_pv_list, day_play_users_list, day_return_rate_list,
+                              day_return_users_list, day_rov_list, day_share_pv_list, day_share_return_score_list,
+                              day_share_score_list, day_share_users, day_view_pv_list, day_view_users_list):
+    day_rov_list.append(0.0)
+    day_share_return_score_list.append(0.0)
+    day_share_score_list.append(0.0)
+    day_return_rate_list.append(0.0)
+    day_ctr_score_list.append(0.0)
+    day_view_users_list.append(0)
+    day_view_pv_list.append(0)
+    day_play_users_list.append(0)
+    day_play_pv_list.append(0)
+    day_share_users.append(0)
+    day_share_pv_list.append(0)
+    day_return_users_list.append(0)
+
 def get_tf_serving_sores(feature_dict):
     if not feature_dict or len(feature_dict)<22:
         return []
@@ -158,16 +179,18 @@ def get_tf_serving_sores(feature_dict):
                     "day_view_pv": feature_dict["day_view_pv_list"],
                     "day_view_users":feature_dict["day_view_users_list"]
     }
-    request_data= {}
-    request_data["inputs"] = inputs_data
-    print(request_data)
+    request_data_dict= {}
+    request_data_dict["inputs"] = inputs_data
+    #print(request_data_dict)
+    request_data= json.dumps(request_data_dict)
+    #print(request_data)
     # 调用http接口
-    result = request_post(request_url=config_.TF_SERVING_URL, request_data=request_data, timeout=(0.1, 1))
+    result = request_post_data(config_.TF_SERVING_URL,request_data, timeout=(0.1, 1))
 
     # print("result:", result)
     if result is None:
         print("result is None")
         log_.info('call tf serving error,types: {}')
         return []
-    print(result)
-    return  result
+    #print(result)
+    return result

+ 11 - 10
recommend.py

@@ -411,7 +411,7 @@ def video_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, al
 def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type, algo_type, client_info,
                     expire_time=24*3600, ab_code=config_.AB_CODE['initial'], rule_key='', data_key='',
                     no_op_flag=False, old_video_index=-1, video_id=None, params=None, rule_key_30day=None,
-                    shield_config=None):
+                    shield_config=None, env_dict = None):
     """
     首页线上推荐逻辑
     :param request_id: request_id
@@ -452,7 +452,7 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
 
     if app_type in [config_.APP_TYPE['LAO_HAO_KAN_VIDEO'], config_.APP_TYPE['ZUI_JING_QI']]:
         t = [gevent.spawn(pool_recall.rov_pool_recall_with_region, size, expire_time, ab_code, exp_config)]
-        if ab_code ==60054 :
+        if ab_code ==60054 or ab_code==60066:
             t.append(gevent.spawn(pool_recall.get_sim_hot_item_reall_filter, exp_config))
         if ab_code == 60055:
             t.append(gevent.spawn(pool_recall.get_return_video_reall, exp_config))
@@ -470,7 +470,7 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
         t = [gevent.spawn(pool_recall.rov_pool_recall_with_region, size, expire_time, ab_code, exp_config),
              gevent.spawn(pool_recall.flow_pool_recall, size, config_.QUICK_FLOW_POOL_ID),
              gevent.spawn(pool_recall.flow_pool_recall, size)]
-        if  ab_code == 60054:
+        if  ab_code == 60054 or ab_code==60066:
             t.append(gevent.spawn(pool_recall.get_sim_hot_item_reall_filter))
         if ab_code == 60055:
             t.append(gevent.spawn(pool_recall.get_return_video_reall, exp_config))
@@ -494,7 +494,7 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
         result['rankResult'] = []
         return result
     #1. merge simrecall
-    if ab_code == 60054:
+    if ab_code == 60054 or ab_code==60066:
         rov_pool_recall = []
         if len(recall_result_list) >= 2:
             region_recall = recall_result_list[0]
@@ -653,7 +653,7 @@ def video_old_recommend(request_id, mid, uid, size, top_K, flow_pool_P, app_type
             }
     #if ab_code=="ab_new_test":
     #print("before data:", data)
-    rank_result, flow_num  = video_new_rank2(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P), ab_code=ab_code, exp_config=exp_config)
+    rank_result, flow_num  = video_new_rank2(data=data, size=size, top_K=top_K, flow_pool_P=float(flow_pool_P), ab_code=ab_code, mid=mid, exp_config=exp_config, env_dict=env_dict)
     #print(rank_result)
     if rank_result:
         result['rank_num'] = len(rank_result)
@@ -1583,7 +1583,7 @@ def get_recommend_params(recommend_type, ab_exp_info, ab_info_data, mid, app_typ
 
 
 def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
-                             client_info, ab_exp_info, params, ab_info_data, version_audit_status):
+                             client_info, ab_exp_info, params, ab_info_data, version_audit_status, env_dict):
     """
     首页线上推荐逻辑
     :param request_id: request_id
@@ -1679,7 +1679,8 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
     # old video: 60056, test2
     elif ab_code == 60052 or ab_code == 60053 or ab_code == 60054 \
             or ab_code == 60055 or ab_code == 60056 or ab_code==60057  \
-            or ab_code==60065 or ab_code == 60067 or ab_code==60068  or ab_code==60066:
+            or ab_code==60065 or ab_code == 60067 or ab_code==60068 \
+            or ab_code==60066:
         result = video_old_recommend(request_id=request_id,
                                      mid=mid, uid=uid, app_type=app_type,
                                      size=size, top_K=top_K, flow_pool_P=flow_pool_P,
@@ -1687,7 +1688,7 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
                                      ab_code=ab_code, expire_time=expire_time,
                                      rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
                                      old_video_index=old_video_index, video_id= None,
-                                     params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
+                                     params=params, rule_key_30day=rule_key_30day, shield_config=shield_config, env_dict=env_dict)
     else:
         result = video_recommend(request_id=request_id,
                              mid=mid, uid=uid, app_type=app_type,
@@ -1742,7 +1743,7 @@ def video_homepage_recommend(request_id, mid, uid, size, app_type, algo_type,
 
 
 def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_exp_info, client_info,
-                             page_type, params, ab_info_data, version_audit_status):
+                             page_type, params, ab_info_data, version_audit_status, env_dict):
     """
     相关推荐逻辑
     :param request_id: request_id
@@ -1806,7 +1807,7 @@ def video_relevant_recommend(request_id, video_id, mid, uid, size, app_type, ab_
                                  ab_code=ab_code, expire_time=expire_time,
                                  rule_key=rule_key, data_key=data_key, no_op_flag=no_op_flag,
                                  old_video_index=old_video_index, video_id=video_id,
-                                 params=params, rule_key_30day=rule_key_30day, shield_config=shield_config)
+                                 params=params, rule_key_30day=rule_key_30day, shield_config=shield_config, env_dict = env_dict)
     else:
         result = video_recommend(request_id=request_id,
                              mid=mid, uid=uid, app_type=app_type,

+ 27 - 0
utils.py

@@ -44,13 +44,40 @@ def request_post(request_url, request_data, timeout):
     """
     try:
         headers = {"Connection": "close"}
+        #print(request_url)
+        #print(headers)
         response = requests.post(url=request_url, json=request_data, timeout=timeout, headers=headers)
+        #print("response:", response)
         if response.status_code == 200:
             res_data = json.loads(response.text)
             return res_data
         else:
             return None
     except Exception as e:
+        #print(e)
+        log_.error('url: {}, exception: {}, traceback: {}'.format(request_url, e, traceback.format_exc()))
+        return None
+
+
+def request_post_data(request_url, request_data, timeout):
+    """
+    post 请求 HTTP接口
+    :param request_url: 接口URL
+    :param request_data: 请求参数
+    :param timeout: 超时时间,单位为秒,type-float or tuple(connect_timeout, read_timeout)
+    :return: res_data json格式
+    """
+    try:
+        headers = {'content-type': 'application/json'}
+        response = requests.post(url=request_url, data=request_data, timeout=timeout, headers=headers)
+        #print("response:", response)
+        if response.status_code == 200:
+            res_data = json.loads(response.text)
+            return res_data['outputs']
+        else:
+            return None
+    except Exception as e:
+        #print(e)
         log_.error('url: {}, exception: {}, traceback: {}'.format(request_url, e, traceback.format_exc()))
         return None
 

+ 11 - 42
video_rank.py

@@ -593,7 +593,7 @@ def video_rank_with_old_video(rank_result, old_video_recall, size, top_K, old_vi
     return new_rank_result[:size]
 
 
-def video_new_rank2(data, size, top_K, flow_pool_P, ab_code, exp_config=None):
+def video_new_rank2(data, size, top_K, flow_pool_P, ab_code, mid, exp_config=None, env_dict=None):
     """
         视频分发排序
         :param data: 各路召回的视频 type-dict {'rov_pool_recall': [], 'flow_pool_recall': []}
@@ -624,50 +624,21 @@ def video_new_rank2(data, size, top_K, flow_pool_P, ab_code, exp_config=None):
     elif ab_code == 60056:
         pre_str = "k_p7:"
     #print("pre_str:", pre_str)
+    recall_list = []
     rov_recall_rank = data['rov_pool_recall']
     #call rank service
     if ab_code == 60066:
-         feature_dict, recall_list = get_featurs(data, size, top_K, flow_pool_P)
-         score_result = get_tf_serving_sores(feature_dict)
-         if score_result and len(score_result)>0 and len(score_result) == len(recall_list):
-             for i in range(len(score_result)):
-                 recall_list[i]['sort_score'] = score_result[i]
-             rov_recall_rank = sorted(recall_list, key=lambda k: k.get('sort_score', 0), reverse=True)
-         else:
-             redisObj = RedisHelper()
-             vidKeys = []
-             recall_list = []
-             for recall_item in data['rov_pool_recall']:
-                 if len(recall_item) <= 0:
-                     continue
-                 vid = recall_item.get("videoId", 0)
-                 vidKeys.append(pre_str + str(vid))
-                 recall_list.append(recall_item)
-             video_scores = redisObj.get_batch_key(vidKeys)
-             if video_scores and len(recall_list)>0:
-                 for i in range(len(video_scores)):
-                     try:
-                         # print(video_scores[i])
-                         if video_scores[i] is None:
-                             recall_list[i]['sort_score'] = 0.0
-                         else:
-                             video_score_str = json.loads(video_scores[i])
-                             recall_list[i]['sort_score'] = video_score_str[0]
-                     except Exception:
-                         recall_list[i]['sort_score'] = 0.0
-                 rov_recall_rank = sorted(recall_list, key=lambda k: k.get('sort_score', 0), reverse=True)
+        feature_dict, recall_list = get_featurs(mid, data, size, top_K, flow_pool_P, env_dict)
+        score_result = get_tf_serving_sores(feature_dict)
+        if score_result and len(score_result) > 0 and len(score_result) == len(recall_list):
+            for i in range(len(score_result)):
+                recall_list[i]['sort_score'] = score_result[i][0]
+                #print(score_result[i][0])
+            rov_recall_rank = sorted(recall_list, key=lambda k: k.get('sort_score', 0), reverse=True)
     else:
         redisObj = RedisHelper()
         vidKeys = []
-        recall_list = []
-        for recall_item in data['rov_pool_recall']:
-            if len(recall_item) <= 0:
-                continue
-            vid = recall_item.get("videoId", 0)
-            vidKeys.append(pre_str + str(vid))
-            recall_list.append(recall_item)
-        video_scores = redisObj.get_batch_key(vidKeys)
-        if video_scores and len(recall_list)>0:
+        if video_scores and len(recall_list) > 0:
             for i in range(len(video_scores)):
                 try:
                     if video_scores[i] is None:
@@ -677,9 +648,7 @@ def video_new_rank2(data, size, top_K, flow_pool_P, ab_code, exp_config=None):
                         recall_list[i]['sort_score'] = video_score_str[0]
                 except Exception:
                     recall_list[i]['sort_score'] = 0.0
-            rov_recall_rank =sorted(recall_list, key=lambda k: k.get('sort_score', 0), reverse=True)
-
-    print(rov_recall_rank)
+            rov_recall_rank = sorted(recall_list, key=lambda k: k.get('sort_score', 0), reverse=True)
     flow_recall_rank = sorted(data['flow_pool_recall'], key=lambda k: k.get('rovScore', 0), reverse=True)
     rov_recall_rank, flow_recall_rank = remove_duplicate(rov_recall=rov_recall_rank, flow_recall=flow_recall_rank,
                                                      top_K=top_K)