背景
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 會自動建立。