调用个性化推荐接口,传入用户id以及相关的上下文信息等,可以获得推荐结果列表。
predict(self, request: PredictRequest, *opts: CoreOption) -> PredictResponse
参数 | 类型 | 说明 |
---|---|---|
request | PredictRequest | 请求体,请求体包含的参数说明见下表,具体使用方式见用例示范 |
opts | list[Option] | 请求中可选参数,具体使用方式见用例示范;
|
request请求体参数:
参数 | 类型 | 是否必传 | 描述 |
---|---|---|---|
user | object | 是 | 用户信息 |
context | object | 是 | 上下文信息 |
candidateItems | object list | 否 | 跳过召回等特殊场景需要上传候选集 |
parentItem | object | 否 | 相关推荐场景需要上传 |
filterItems | object list | 否 | 需要过滤的物品列表 |
size | int | 否 | 接口返回物品个数(优先级高于栏位配置返回数量) |
推荐服务相关方法使用自定义的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" predict_request.size = 10 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")