客户端支持

一般 A/B 服务会部署在 EAS 控制台上, client 需要的 Host, Token 可以从这里看到。

ab_eas

golang 版本

host := "http://localhost:8080"
// 初始化 client, 必须指定 host 和 environment 字段
// environment 合法值为 daily, prepub, product
client, err := NewExperimentClient(host, common.Environment_Prepub_Desc, WithLogger(LoggerFunc(log.Printf)), WithErrorLogger(LoggerFunc(log.Fatalf)), WithToken(""))	

if err != nil {
		t.Fatal(err)
	}

// 具体匹配实验室,构造 ExperimentContext
	experimentContext := model.ExperimentContext{
		RequestId: "pvid",
		Uid:       "2115",
		FilterParams: map[string]interface{}{
			"sex": "male",
			"age": 35,
		},
	}
// 匹配时,传入场景名称和上下文 ExperimentContext
	experimentResult := client.MatchExperiment("home_feed", &experimentContext)

// 打印匹配的信息,可以做日志用
	fmt.Println(experimentResult.Info())
 // 获取匹配的实验ID
	fmt.Println(experimentResult.GetExpId())
// 获取实验参数
	fmt.Println(experimentResult.GetLayerParams("").GetString("a", "not exist"))
// 获取实验参数也可以使用另一种API, 无需关心参数在哪一个层上,只需要获取参数即可
	fmt.Println(experimentResult.GetExperimentParams().GetString("a", "not exist"))

python 版本

whl 包从这里下载。使用 pip 进行安装

pip install client_python-1.0.0-py3-none-any.whl

示例代码如下:

from pairec_experiment_client.experiments.ExperimentClient import ExperimentClient
from pairec_experiment_client.models.experiment import ExperimentContext
from pairec_experiment_client.experiments.logger import Logger

if __name__ == '__main__':
    host = "http://xxx.cn-beijing.pai-eas.aliyuncs.com/api/predict/xxx/v1"
    environment = "prepub"
    # eas 控制台的 token 
    token = "xxxx"
    logger = Logger()
    error_logger = Logger()
    # 初始化 client, 必须指定 host 和 environment 字段
    # environment 合法值为 daily, prepub, product
    exp = ExperimentClient(host, environment, token, logger, error_logger)
    # 每次请求进行匹配时,先构造上下文 
    experiment_context = ExperimentContext(
        request_id="pvid",
        uid="211789765",
        # filter_params 不是必须的,可以为空
        filter_params={
            "sex": "male",
            "age": 35,
            "uid": 1,
        }
    )
    # 获取匹配的实验结果,传入场景名称和匹配的上下文
    experimentResult = exp.match_experiment("homepage", experiment_context)
    print(experimentResult.info())
    # 打印实验ID
    print(experimentResult.get_exp_id())
    # 这里可以获取到实验参数,需要传入 layer 名称,如果实验只有一层的话,layer 名称可以为空
    print(experimentResult.get_layer_params("rank").get("features.scene.name", "not exist"))

java 版本

sdk jar 包从这里 下载。使用 maven 安装到本地

mvn install:install-file -Dfile=experiment-sdk-1.0-SNAPSHOT-jar-with-dependencies.jar -DgroupId=com.aliyun.pai.rec -DartifactId=experiment-sdk -Dversion=1.0-SNAPSHOT -Dpackaging=jar -DlocalRepositoryPath=${HOME}/.m2/repository/

maven 依赖引用

 <dependency>
            <groupId>com.aliyun.pai.rec</groupId>
            <artifactId>experiment-sdk</artifactId>
            <version>1.0-SNAPSHOT</version>
</dependency>

示例代码如下:

 ApiClient apiClient = new ApiClient();
// 这里配置 eas 控制台的服务地址,注意最后以 /v1 结尾
 apiClient.setBasePath("http://1730760139076263.cn-beijing.pai-eas.aliyuncs.com/api/predict/xxx/v1");
 // eas 控制台的 token 
 apiClient.setApiKey("xxx");

 // 设置默认的配置
 Configuration.setDefaultApiClient(apiClient);
  // 这里指定具体的环境
 Configuration.setEnvironment(Constants.Environment_Prepub_Desc);

// 生成 client 对象,可以多线程并发使用
 ExperimentClient experimentClient = new ExperimentClient();
// client 初始化,只需要调用一次即可
 experimentClient.init();

 // 每次请求进行匹配时,先构造上下文 
 ExperimentContext experimentContext = new ExperimentContext();
 experimentContext.setUid("211789765");
 experimentContext.setRequestId("pvid");

 // 获取匹配的实验结果,传入场景名称和匹配的上下文
 ExperimentResult experimentResult = experimentClient.matchExperiment("homepage",    experimentContext);

 // 打印匹配信息
 System.out.println(experimentResult.info());
 // 打印实验ID
 System.out.println(experimentResult.getExpId());

 // 这里可以获取到实验参数,需要传入 layer 名称,如果实验只有一层的话,layer 名称可以为空
 System.out.println(experimentResult.getLayerParams("rank").getString("features.scene.name", "not exist"));
System.out.println(experimentResult.getLayerParams("rank").getInt("intval", 0));

// 获取实验参数也可以使用另一种API, 无需关心参数在哪一个层上,只需要获取参数即可
 System.out.println(experimentResult.getExperimentParams().getString("features.scene.name", "not exist"));
System.out.println(experimentResult.getExperimentParams().getInt("intval", 0));