回调接口

回调接口也是 pairec 内置的 API 接口。 回调接口主要用来落实时特征日志。单独拿出来介绍。

背景

实时特征是推荐中很重要的一环,尤其是其中的实时序列特征,一般来说能达到较明显的推荐效果提升。然而实时特征对准确性的要求很高,如通过离线卡时间窗口关联的方式,由于很难估计系统各链路间的延时,很容易就出现特征不准确、特征穿越的问题,加上这些不准确的特征达到适得其反的效果。

如何定义准确性?一个训练样本S_i(对应推荐请求R_i)中的实时特征,需要是推荐请求R_i时刻的useritem特征,因此最佳保证实时特征是在推荐请求达到推荐服务的时候,在算法计算推荐结果的同时,把recomid+user的实时特征+item的实时特征落入日志中(如Kafka等),然后再导入到Odps中。

然而往往因为AB实验的原因,一个推荐服务不是接受所有的实验流量的,没有办法给所有的实验流量来落实时特征,训练的时候又往往需要全量的训练样本进行训练,这些样本都需要有实时特征才能发挥实时特征的效果。因此,最佳近似实时的方式是通过callback接口,简单来说,A服务如果想落实时特征(f1,f2,f3...),B服务在下发之前,会异步调用A服务的callback接口,告诉A服务下发列表,让A服务把这些特征给落下来。该方案灵活性也较高,A服务想落的实时特征不会跟B服务想落的产生冲突,且实时性有保障,下发时刻和算法获取特征的时刻是近似同时的,不会出现特征穿越的问题。

接口定义

接口名称

/api/callback

请求参数

参数名称

参数类型

是否必须

参数说明

用例

scene_id

string

场景ID

homepage

uid

string

用户注册ID

85578510

request_id

string

请求的唯一标识

d9cb1c8d-4d3f-491b-9ea3-380481dabde3

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":{}, "item_list":[{"item_id":"113939841"},{"item_id":"113764910"}],"request_info":{"recom_id":"1111111"}}'

返回数据

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

字段

类型

描述

示例

code

integer

返回码标识

接口状态码,200成功

msg

string

提示信息

成功为success