A API de callback integrada do PAI-Rec captura parâmetros de solicitação, features de usuário e features de item no momento exato de cada solicitação de recomendação. Use esses logs para análise de dados, treinamento offline de modelos ou aprendizado online.
Métodos offline — como a associação de features por janelas de tempo — são pouco confiáveis porque a latência entre os links do sistema é difícil de estimar, o que causa vazamento de features. A API de callback resolve esse problema ao registrar as features na source: quando a solicitação de recomendação chega ao serviço, o sistema registra o ID da solicitação, as features de usuário e as features de item em uma fila de mensagens (DataHub ou Kafka) e sincroniza os dados com o MaxCompute (ODPS).

Pré-requisitos
Antes de começar, verifique se você tem:
Uma implantação do PAI-Rec com o mecanismo DPI configurado
Um projeto DataHub e a URL do endpoint da sua fonte de dados
(Opcional) Um modelo EasyRec, caso seu fluxo de callback use features geradas por modelo
Referência da API
Endpoint
POST /api/callback
Parâmetros da solicitação
|
Parâmetro |
Tipo |
Obrigatório |
Descrição |
Restrições |
Exemplo |
|
|
string |
Sim |
Nome da cena para registro de dados |
— |
|
|
|
string |
Sim |
ID de registro do usuário |
— |
|
|
|
string |
Sim |
Identificador exclusivo da solicitação de recomendação |
— |
|
|
|
json list |
Sim |
Lista de IDs dos itens recomendados |
Cada item deve incluir |
|
|
|
json string |
Não |
Features de usuário no momento da solicitação |
String JSON válida |
|
|
|
json string |
Não |
Informações adicionais da solicitação |
String JSON válida |
|
Exemplo de solicitação
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"}}'
Resposta
{
"code": 200,
"msg": "success"
}
|
Campo |
Tipo |
Descrição |
|
|
integer |
Código de status HTTP. |
|
|
string |
Mensagem de status. |
Configure o callback
A configuração do callback tem duas partes: o bloco CallBackConfs, que define o comportamento de registro em log, e o bloco DatahubConfs, que define o destino de gravação dos dados.
CallBackConfs
"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
}
}
|
Parâmetro |
Descrição |
Padrão |
Restrições |
|
|
Cena para registro de dados |
— |
Deve corresponder a um nome de cena em |
|
|
Tipo da fila de mensagens |
— |
Atualmente, apenas |
|
|
Nome da fonte de dados do DataHub |
— |
Deve corresponder a uma chave em |
|
|
Configuração do modelo, idêntica à configuração do mecanismo DPI |
— |
Omita este campo se não houver uso de features geradas por modelo |
|
|
Defina se o sistema deve registrar as features brutas de item do modelo EasyRec |
|
Defina como |
|
|
Taxa de amostragem para features brutas |
|
Inteiro de |
|
|
Número máximo de itens a processar por callback |
Todos os itens do fluxo de recomendação |
O sistema trunca os itens para os primeiros |
|
|
Taxa de amostragem aplicada após o truncamento por |
— |
Inteiro de |
|
|
Defina se o sistema deve usar as features de usuário do fluxo de recomendação quando |
— |
Quando definido como |
DatahubConfs
O PAI-Rec cria automaticamente o tópico do DataHub com base no nome e no esquema fornecidos. Não é necessário criar o tópico manualmente.
"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"}
]
}
}
Substitua ${ProjectName} pelo nome do seu projeto DataHub.
Configuração de carregamento de features
O carregamento de features para o fluxo de callback segue a mesma estrutura da configuração de features padrão. A única diferença é o alias da cena: use {scene_name}_callback como nome da cena em FeatureConfs. Por exemplo, para a cena home_feed, use 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"
}
}
]
}
}
Formato de log
Cada solicitação de callback contém um ID de usuário e uma lista de itens. Como as features de usuário podem ser extensas, o sistema grava as features de usuário e de item como registros de log separados no mesmo tópico do DataHub, diferenciados pelo campo module.
Log de features de usuário
|
Campo |
Tipo |
Descrição |
|
|
string |
Sempre |
|
|
string |
ID da solicitação de callback |
|
|
string |
Nome da cena da solicitação de callback |
|
|
integer |
Timestamp Unix da solicitação |
|
|
string |
ID do usuário |
|
|
string |
Features de usuário em formato de string JSON |
|
|
string |
Informações adicionais da solicitação de callback |
Log de features de item
|
Campo |
Tipo |
Descrição |
|
|
string |
Sempre |
|
|
string |
ID da solicitação de callback |
|
|
string |
Nome da cena da solicitação de callback |
|
|
integer |
Timestamp Unix da solicitação |
|
|
string |
ID do usuário |
|
|
string |
ID do item |
|
|
string |
Features de item em formato de string JSON |
|
|
string |
Features brutas retornadas pelo modelo EasyRec |
|
|
string |
Saída da Geração de Features (FG) do modelo EasyRec |
|
|
string |
Features de contexto retornadas pelo modelo EasyRec |
Ative callback automático de cena
Por padrão, o callback é um serviço separado chamado manualmente após cada solicitação de recomendação. O mecanismo DPI também suporta invocação automática: após a conclusão de uma solicitação de recomendação, o sistema chama o fluxo de callback automaticamente.
Para ative callbacks automáticos, defina AutoInvokeCallBack como true em SceneConfs:
"SceneConfs": {
"${scene_name}": {
"default": {
"RecallNames": [
"collaborative_filter"
],
"AutoInvokeCallBack": true,
"AutoInvokeCallBackRate": 100
}
}
}
Substitua ${scene_name} pelo nome real da cena, como home_feed.
|
Parâmetro |
Descrição |
Padrão |
Restrições |
|
|
Defina se o sistema deve chamar o fluxo de callback automaticamente após cada solicitação de recomendação |
— |
Defina como |
|
|
Percentual de solicitações de recomendação que acionam um callback automático |
— |
Inteiro de |