向量召回接口

更新时间:
复制为 MD 格式

背景

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

image

用户可以使用 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 会自动创建。