You need to enable JavaScript to run this app.
导航

推荐接口(predict)

最近更新时间2023.11.22 11:41:21

首次发布时间2022.04.13 17:53:21

调用个性化推荐接口,传入用户id以及相关的上下文信息等,可以获得推荐结果列表。

调用方法

predict(self, request: PredictRequest, *opts: CoreOption) -> PredictResponse

方法参数

参数

类型

说明

request

PredictRequest

请求体,请求体包含的参数说明见下表,具体使用方式见用例示范

opts

list[Option]

请求中可选参数,具体使用方式见用例示范;
注意:可通过
Option.with_request_id(request_id: str)自行设置requestId

  • request_id字段很重要,会通过request_id串起个性化推荐、曝光数据上报、行为数据。
  • 每次请求的request_id需要保证唯一
  • 如果未指定request_id,SDK会自动生成唯一的request_id,可通过返回体拿到该request_id

request请求体参数:

参数
类型
是否必传
描述
user
object
用户信息
context
object
上下文信息
candidateItems
object list
跳过召回等特殊场景需要上传候选集
parentItem
object
相关推荐场景需要上传
filterItems
object list
需要过滤的物品列表

方法返回

推荐服务相关方法使用自定义的PredictRsponse类作为响应类型。

参数
类型
描述
code
int32
0或200代表正常,不等同于http status,用于排查业务错误
message
string
状态信息,默认"OK",遇到错误会返回错误信息
value
object
request_id
string
推荐请求的request_id

示例

import uuid
from datetime import datetime

from byteair import ClientBuilder, Client
from byteair.protocol.volcengine_byteair_pb2 import *
from core import Region, Option, NetException, BizException, metrics


# 示例省略client初始化过程


def predict():
    # 构造predict请求体
    predict_request = PredictRequest()
    user = predict_request.user
    user.uid = 'uid1'
    context = predict_request.context
    context.spm = "A$##$B$##$C"
    context.extra["extra_key"] = "extra_value"


    feature = context.feature
    feature.stringFeature["key"] = "value1"
    feature.stringFeature["key"] = "value2"
    feature.stringArrayFeature["array_key"].values.append("array_value1")
    feature.stringArrayFeature["array_key"].values.append("array_value2")
    filter = context.filter
    filter.stringFilter["key"] = "value"
    filter.stringArrayFilter["array_key"].values.append("array_value1")
    filter.stringArrayFilter["array_key"].values.append("array_value2")
    
    candidate_item1 = predict_request.candidateItems.add()
    candidate_item1.id = "item_id1"
    candidate_item2 = predict_request.candidateItems.add()
    candidate_item2.id = "item_id2"


    opts = (
        Option.with_request_id(str(uuid.uuid1())),
        # 默认default,无需修改.
        Option.with_scene("default"),
        Option.with_timeout(timedelta(milliseconds=1000)),
        # 是否开启SPM路由.开启的话需要保证请求体里的SPM存在且绑定了栏位.
        # server会根据body里的SPM路由到选择的栏位.
        Option.with_headers({"Enable-Spm-Route": "true"}),
    )
    try:
        rsp = client.predict(predict_request, *opts)
    except (NetException, BizException) as e:
        print("[predict] occur error, msg: %s" % e)
        return
    if not rsp.success:
        print("[predict] failure")
        return
    print("[predict] success")