全部產品
Search
文件中心

Artificial Intelligence Recommendation:Callback 回調介面

更新時間:Oct 12, 2025

回調介面

PAI-Rec包含內建的回調介面。回調介面主要用來記錄推薦請求時刻的即時特徵日誌,包括請求參數、使用者和物品的即時特徵,可以用於後續的資料分析、離線模型訓練或線上學習。

背景

即時特徵是推薦中很重要的一環,包括即時統計特徵和即時序列特徵,尤其是使用者即時序列特徵。一般來說,增加即時特徵能明顯的提升推薦系統的指標效果。然而即時特徵對準確性的要求很高,如通過離線卡時間視窗關聯的方式(指通過離線日誌反推在推薦時刻使用者和物品的即時特徵),由於很難估計系統各鏈路間的延時,很容易就出現特徵不準確、特徵穿越的問題,在召回和排序模型中加上這些不準確的特徵得到適得其反的效果。

如何定義準確性?一個訓練樣本S_i(對應推薦請求R_i)中的即時特徵,需要是推薦請求R_i時刻的user和item特徵,因此最佳記錄即時特徵是在推薦請求打到建議服務的時候,在演算法計算推薦結果的同時,把requestId(請求標識)+user的即時特徵+item的即時特徵落入日誌中(如datahub/kafka等),然後再同步到 MaxCompute(ODPS) 中。

image.png

介面定義

介面名稱

/api/callback

請求參數

參數名稱

參數類型

是否必須

參數說明

用例

scene_id

string

首頁推薦

homepage

uid

string

使用者註冊ID

85578510

request_id

string

請求的唯一標識

d9cb1c8d***

features

json string

使用者特徵

{"age":25, "city":"beijing"}

item_list

json list

推薦的uid列表

[{"item_id":"99886867"}, {"item_id":"99888623"}]

request_info

json string

請求資訊

{"recom_id":"12334234"}

請求範例

curl 'http://host/api/callback' -d '{"uid":"84603208","request_id":"d9cb1c8d-4d3f-491b-9ea3-380481dabde3","scene_id":"homepage","features":{"age":25, "city":"beijing"}, "item_list":[{"item_id":"113939841"},{"item_id":"113764910"}],"request_info":{"recom_id":"1111111"}}'

返回資料

{
 "code":200,
 "msg":"success",
}

欄位

類型

描述

樣本

code

integer

返回碼標識

介面狀態代碼,200成功

msg

string

提示資訊

成功為success

回調配置

Callback 流程主要分兩部分

  • 載入 user/item 特徵

  • 很多情況下如果使用 EasyRec 模型, item 特徵是與模型繫結到一起的。 需要請求 easyrec 模型,拿到模型產生的 FG 特徵

把上面的特徵資料寫入到訊息佇列(datahub) 中。

"CallBackConfs": {
  "home_feed": {
    "DataSource": {
      "Name": "pairec_callback_dh",
      "Type": "datahub"
    },
    "RankConf": {
      "RankAlgoList": [
        "ali_rnk_v2_woid_callback_public_v2"
      ],
      "ContextFeatures": [
        "none"
      ],
      "Processor": "EasyRec"
    },
    "RawFeatures": false,
    "RawFeaturesRate": 0,
    "ItemSize": 100,
    "ItemSizeRate": 10,
    "UseUserFeatures": true
  }
  
}
  • home_feed 是情境名稱,針對哪個情境落日誌

  • DataSource

    • Type 訊息佇列類型,目前支援 datahub

    • pairec_callback_dh datahub 的資料來源名稱, 在 DatahubConfs 能找到

  • RankConf 配置的模型資訊,和正常的引擎服務的模型配置一樣,如果沒有模型產生的特徵資訊,可以不配置

  • RawFeatures 是否記錄item側的raw features 特徵。只有設定為true才會記錄。設定為true的同時,RawFeaturesRate設定採樣比例(可取值的範圍是0 ~ 100)。

  • ItemSize 控制調用callback的item數量。如果推薦介面返回的item數量過多,可以此參數控制數量,截取前ItemSize個item數量。不設定此值的話,預設按推薦鏈路的下發item數量。

  • ItemSizeRate 按採樣比例取得item數量,可取值範圍是1 ~ 100。如果ItemSize和ItemSizeRate同時設定的話,先用ItemSize進行截取,然後按ItemSizeRate比例採樣。

  • UseUserFeatures 使用 AutoInvokeCallBack時,是否使用推薦鏈路擷取的user特徵進行調用。設定之後,callback鏈路中FeatureConfs可以不用額外取user特徵。

資料來源配置

  "DatahubConfs": {
    "pairec_callback_dh": {
      "Endpoint": "http://dh-cn-hangzhou-int-vpc.aliyuncs.com",
      "ProjectName": "${ProjectName}",
      "TopicName": "pairec_callback_log",
      "Schemas": [
        {
          "Field": "request_id",
          "Type": "string"
        },
        {
          "Field": "module",
          "Type": "string"
        },
        {
          "Field": "scene",
          "Type": "string"
        },
        {
          "Field": "request_time",
          "Type": "integer"
        },
        {
          "Field": "user_features",
          "Type": "string"
        },
        {
          "Field": "item_features",
          "Type": "string"
        },
        {
          "Field": "request_info",
          "Type": "string"
        },
        {
          "Field": "user_id",
          "Type": "string"
        },
        {
          "Field": "item_id",
          "Type": "string"
        },
        {
          "Field": "raw_features",
          "Type": "string"
        },
        {
          "Field": "generate_features",
          "Type": "string"
        },
        {
          "Field": "context_features",
          "Type": "string"
        }
      ]
    }
    }

在上面的配置中, topic name 可以不用手動建立, PAI-Rec 可以根據 topic name 及 schema 自動建立。

特徵載入配置

配置參考 特徵配置。這裡不同一點就是情境名稱 + _callback 作為特徵載入的情境別名。

home_feed_callback  的情境名稱是 home_feed + _callback 來的。

"FeatureConfs": {
  "home_feed_callback": {
    "AsynLoadFeature": true,
    "FeatureLoadConfs": [
      {
        "FeatureDaoConf": {
          "AdapterType": "hologres",
          "HologresName": "pairec-holo",
          "FeatureKey": "user:uid",
          "UserFeatureKeyName": "client_str",
          "HologresTableName": "dwd_ali_user_all_feature_v2_holo",
          "UserSelectFields": "*",
          "FeatureStore": "user"
        },
        "Features": [
          {
            "FeatureType": "new_feature",
            "FeatureName": "day_h",
            "Normalizer": "hour_in_day",
            "FeatureStore": "user"
          },
          {
            "FeatureType": "new_feature",
            "FeatureName": "week_day",
            "Normalizer": "weekday",
            "FeatureStore": "user"
          },
          {
            "FeatureType": "new_feature",
            "FeatureName": "rand_int_v",
            "Normalizer": "random",
            "FeatureStore": "user"
          }
        ]
      },
      {
        "FeatureDaoConf": {
          "AdapterType": "hologres",
          "HologresName": "pairec-holo",
          "FeatureKey": "user:uid",
          "UserFeatureKeyName": "client_str",
          "HologresTableName": "dwd_ali_user_table_v3_expo_static_feature_v2_holo",
          "UserSelectFields": "*",
          "FeatureStore": "user"
        }
      }
    ]
  }
}

日誌格式

callback 請求資料包含一個 uid + item 列表。 很多請求下, user 的特徵比較大,為了省空間,我們會把 user 特徵和 item 特徵分開落下來。

user 特徵日誌,包含下面資料

  • request_id 請求ID, callback 請求裡獲得

  • scene 情境名稱,callback 請求裡獲得

  • request_time 請求時間

  • user_features user 特徵, json string

  • user_id 使用者ID標識

  • request_info 額外的請求資訊, callback 請求裡獲得

  • module   固定值 user , 表明是 user 特徵

item 特徵日誌,包含下面資料

  • request_id 請求ID, callback 請求裡獲得

  • scene 情境名稱,callback 請求裡獲得

  • request_time 請求時間

  • module   固定值 item , 表明是 item 特徵

  • item_id item ID 標識

  • user_id 使用者ID標識

  • raw_features easyrec 模型返回raw features

  • generate_features easyrec 模型返回的 FG 之後的特徵資訊

  • context_features easyrec 模型返回的上下文特徵

  • item_features item 特徵, json string

情境自動回調

通常 callback 作為單獨的服務進行部署,使用者需要自己組裝資料進行調用。目前PAI-Rec引擎裡也支援自動調用callback鏈路。在配置單裡配置上callback相關的配置,只需要在SceneConfs裡開啟AutoInvokeCallBack標識即可。推薦請求完成後,會進行一次callback介面的回調。

當AutoInvokeCallBack = true 開啟的情況下,如果設定 AutoInvokeCallBackRate 也能控制回調callback介面的比例。可取值範圍1~100。如果不設定AutoInvokeCallBackRate, 或者 AutoInvokeCallBackRate = 0 全部流量進行回調。

"SceneConfs": {
  "${scene_name}": {
    "default": {
      "RecallNames": [
        "collaborative_filter"
      ],
      "AutoInvokeCallBack": true,
      "AutoInvokeCallBackRate": 100
    }
  }
}

若有收穫,就點個贊吧