向量召回接口
背景
PAI-Rec 引擎提供了获取 user/item 的向量的接口,方便用户获取 dssm 等模型生成的向量,方便用户集成到系统中。并且可以把数据写入到 datahub 消息队列中,可以提供一致性问题的跟踪。

用户可以使用 user_id + user_features 或者 item_id + item_features 请求接口,引擎会返回响应的 embedding, 并且通过配置可以落到 datahub 消息队列。
接口说明
接口地址
/api/embedding
请求参数
参数名称 | 参数说明 | 类型 | 是否必须 | 用例 |
uid | 用户id,如果生成 user 向量,需要传入 | string | 否 | “1000079” |
scene_id | 场景id | String | 是 | home_feed |
user_features | user 侧特征,如果生成 user 向量,需要传入 | json map | 否 | {“age”:20, “sex”:”male”} |
item_id | item id,如果生成 item 向量,需要传入 | string | 否 | 248791390 |
item_features | item 侧特征,如果生成 item 向量,需要传入 | json map | 否 | {“age”:20, “sex”:”male”} |
debug | debug 用,打印更多的日志 | bool | 否 | true |
request_id | 请求唯一标识ID,此参数为空时,PAI-Rec 引擎会自动生成,如果用户传入,使用参数值当成请求的ID | string | 否 | “c46c3f5e-***-1248” |
接口返回
名称 | 说明 | 类型 | 示例 |
code | 接口返回业务码 | int | 200 |
msg | 业务信息 | string | success |
request_id | 请求的唯一标识 | string | e332fe9c-***-d07f6 |
embedding | 生成的向量数据 | []float32 | [-0.10198704,0.10990965,0.04562417,***] |
model_config | 模型返回的透传配置 | map | {"model_version":"20260513"} |
错误码说明
错误码 | 说明 | msg |
200 | 接口正常 | success |
400 | 参数错误,不同的情况, msg 说明不同 | uid not empty 或者nexpected end of JSON input 等 |
500 | 服务器错误, 以 HTTP 错误码形式返回 |
请求样例
User 侧生成向量
curl -v http://host/api/embedding -d '{"uid":"76295990", "user_features":{"context_industry_index":"0,0,0"}, "scene_id":"dssm_user_embedding"}'返回数据
{
"code": 200,
"msg": "success",
"request_id": "d96534c7-***-163b1e2f173b",
"embedding": [
-0.10198704,
0.10990965,
0.04562417,
...
]
}
Item 侧生成向量
curl -v http://host/api/embedding -d '{"item_id":"76295990", "item_features":{"context_industry_index":"0,0,0} "scene_id":"dssm_item_embedding"}'返回数据
{
"code": 200,
"msg": "success",
"request_id": "5f339fef-***-5e72466d4d68",
"embedding": [
0.003976563,
0.22998181,
0.013637823,
...
]
}
引擎配置
在引擎配置中,提供了 EmbeddingConfs 单独的模块来配置。主要包含两部分
如何请求召回模型
如何落日志,目前支持 datahub
{
"EmbeddingConfs": {
"dssm_user_embedding": {
"RankConf": {
"RankAlgoList": [
"test_dssm_rec"
],
"Processor": "EasyRec"
},
"DataSource": {
"Name": "pairec_emb_dh",
"Type": "datahub"
}
},
"dssm_item_embedding": {
"RankConf": {
"RankAlgoList": [
"test_dssm_item"
],
"Processor": "EasyRec"
}
}
}
}EmbeddingConfs 支持多个场景下的配置。 在上面的例子中分别是
dssm_user_embedding、dssm_item_embedding。
RankConf 配置的模型信息,和正常的引擎服务的模型配置一样
DataSource
Type 消息队列类型,目前支持 datahub
pairec_emb_dh 的数据源名称, 在 DatahubConfs 能找到,上面的配置中,dssm_user_embedding 场景下请求会写入到 pairec_emb_dh 消息队列中,而 dssm_item_embedding 没有配置 DataSource 字段,则不会落日志。
模型配置
上面配置中,test_dssm_rec 和 test_dssm_item 分别是模型配置,在 AlgoConfs 里能找到。
{
"AlgoConfs": [
{
"Name": "test_dssm_item",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"ResponseFuncName": "torchrecEmbeddingResponseFunc",
"EndpointType": "DIRECT",
"Url": "http://xxx.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/test_dssm_item",
"Auth": "***"
}
},
{
"Name": "test_dssm_rec",
"Type": "EAS",
"EasConf": {
"Processor": "EasyRec",
"Timeout": 300,
"EndpointType": "DIRECT",
"ResponseFuncName": "torchrecEmbeddingResponseFunc",
"Url": "http://xxxx.vpc.cn-beijing.pai-eas.aliyuncs.com/api/predict/test_dssm_rec",
"Auth": "***"
}
}
]
}这里需要注意的是,ResponseFuncName 为固定值 torchrecEmbeddingResponseFunc。
数据源配置
这里说明 datahub 如何配置,才能采集日志。
{
"DatahubConfs": {
"pairec_emb_dh": {
"Endpoint": "http://dh-cn-beijing-int-vpc.aliyuncs.com",
"AccessId": "${AccessKey}",
"AccessKey": "${AccessSecret}",
"ProjectName": "",
"TopicName": "",
"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": "user_id",
"Type": "string"
},
{
"Field": "item_id",
"Type": "string"
},
{
"Field": "embeddings",
"Type": "string"
}
]
}
}
}上面只需要配置上 ProjectName 和 TopicName 即可。ProjectName 可以在 datahub 控制台上创建,上述配置后, TopicName 会自动创建。