客户端支持¶
一般 A/B 服务会部署在 EAS 控制台上, client 需要的 Host, Token 可以从这里看到。
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));