A/B 服务集成

更新时间:
复制 MD 格式

集成 A/B 实验功能

image

  1. 上图中的Client指的是客户侧服务。客户可以通过PAI-Rec控制台进行实验配置。

  2. 当客户集成PAI-Rec引擎服务后,引擎服务启动后,会自动拉取实验配置,当推荐请求到来时,SDK会进行实验匹配,并能关联到具体实验的实验参数。通过不同的实验参数,引擎会体现不同的行为,走不同的召回路径,或者调用不同的Rank模型。

  3. PAI-Rec 本身已经预定了一些实验参数,可以直接在实验配置中使用。设置实验参数,需要完全按照参数名称的规则来,否则匹配了实验,也找不到对应的参数。

    参数名称

    参数类型

    参数说明

    样例

    default.RecallNames

    json array

    召回的列表,需要包含所有的召回

    "default.RecallNames":[ "HomepageEtrecRecall", "HomepageDssmRecall"]

    "recall." + 具体的recall name

    json object

    根据 recall config , 创建新的 recall

    {"recall.MyRecall":{"version":"v2"}}

    filterNames

    json array

    过滤列表,包含所有的过滤流程

    {"filterNames":["UniqueFilter", "UserExposureFilter"]}

    default.SortNames

    json array

    重排列表,包含所有的重排流程

    {"default.SortNames":["ItemRankScore"]}

    rankconf

    recconf.RankConfig

    排序算法的配置

    "rankconf":{"RankAlgoList":["pai_homepage_fm"],"RankScore":"${pai_homepage_fm}"}

    features.scene.name

    string

    Features load 对应的场景名称

    "homepagetf"

    generalRankConf

    recconf.GeneralRankConfig

    粗排的配置, 包括 user feature 的获取,算法配置 RankConf, 详细配置参考粗排配置

    {"generalRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}}

    coldStartGeneralRankConf

    recconf.ColdStartGeneralRankConfig

    冷启动粗排配置, 详细配置参考粗排配置

    {"coldStartGeneralRankConf":{"FeatureLoadConfs":[{"FeatureDaoConf":{}}],"RankConf":{},"ActionConfs":[]}}

    coldStartRankConf

    recconf.ColdStartRankConfig

    冷启动召回,rank 阶段配置,指定 rank 算法

    {"coldStartRankConf":{"RecallName":"ColdStartRecall", "AlgoName":"linucb"}}

            func (c *HomeFeedController) makeRecommendContext() {
            c.context = context.NewRecommendContext()
            c.context.Size = c.param.Limit
            c.context.Param = &c.param
            c.context.RecommendId = c.RequestId
            c.context.Config = recconf.Config
            c.context.Debug = c.param.Debug
            abcontext := model.ExperimentContext{
                    Uid:         c.param.DistinctId,
                    RequestId:   c.RequestId,
                    FilterParams: map[string]interface{}{},
            }
            if abtest.GetExperimentClient() != nil {
                    c.context.ExperimentResult = abtest.GetExperimentClient().MatchExperiment(c.param.SceneId, &abcontext)
                    log.Info(c.context.ExperimentResult.Info())
            }
    }
  4. 用户代码调整实验参数,只要有 RecommendContext 对象,都能通过 context.ExperimentResult 获取到。

            count := r.recallCount
            if context.ExperimentResult != nil {
                    count = context.ExperimentResult.GetLayerParams("").GetInt("recall.base.count", count)
            }
            fmt.Println("test count", count)

    GetLayerParams 获取某一层上的实验参数,可以通过Get、GetInt、GetFloat、GetInt64获取参数,第一个参数是参数名称,第二个参数是默认值,如果没有找到的情况下,返回默认值。

集成 A/B 参数功能

类似上文的实验参数路径,PAI-Rec引擎服务运行时,可以通过自定义的参数配置来改变引擎行为。这样无需重启服务就可以动态改变服务状态。

在左侧导航栏中单击系统配置 > 参数管理,选择当前开发环境(如日常)和推荐场景(如HomePage),然后单击创建参数按钮添加自定义参数。例如,创建参数名称为 custom_param、参数值为 custom 的参数。

// 获取到具体的场景名称
scene := context.GetParameter("scene").(string)
// 根据场景获取参数列表,然后用具体的 Get* function 获取具体的参数值
count := abtest.GetParams(scene).GetInt("count", 100)
fmt.Println("recall count:", count)