You need to enable JavaScript to run this app.
导航
Python SDK
最近更新时间:2024.07.31 12:01:37首次发布时间:2023.06.09 16:02:39

1. 安装SDK

1.1 下载SDK

当前sdk版本:Linux v2.2.2,Mac v2.2.1
Linux:

datatester_python_sdk-2.2.2.tar.gz
1.74MB

sha256sum:
035117ebe98a07e78cda80c12893c0f2c236870008c4c3604afc14b2c84701e6

Mac:

datatester_python_sdk-2.2.1.tar.gz
1.56MB

1.2 pip

支持的范围: Linux + python 3.7

pip install datatester_python_sdk-2.2.2-py3-none-any.whl

2. 代码示例

2.1 初始化Client

私有化客户需要指定meta_host和track_host为部署时配置的域名。同时指定is_onpremise为True

from client import client

# 初始化ABTest分流客户端,请注意修改token参数
# meta_host和track_host请修改为部署时配置的域名
ab_client = client.AbClient(
    "token"
    meta_host="",
    track_host="",
    is_onpremise=True
)
"""
参数:
    token: 获取方式详见接口描述-AbClient
    meta_host: 私有化部署时配置的域名
    track_host: 私有化部署时配置的域名
    is_onpremise: 私有化环境需要显示的配置为True
    user_info_handler: 缺省值,用户信息对象,进组不出组需要实现该handler
    max_workers: 缺省值,事件上报线程数,默认为4
"""

2.2 请求分流并获取结果

from client import client

# 具体参数可以查看2.1 初始化Client
ab_client = client.AbClient("token")  

# 定义分流时请求中携带的参数
attributes = {    
    "state": "Nanjing",
    "likes_donuts": True,
}

# 推荐接口
# 根据variant key 获取分流后的实验配置
variable = ab_client.activate(
        "{variant_key}", 
        "{decision_id}", 
        "{track_id}", 
        "{default_value}", 
        attributes
        )
"""
参数:
    variant_key: 变体的key    
    decision_id: 本地分流用户标识,不用于事件上报,请替换为客户的真实用户标识    
    track_id: 事件上报用户标识,用于事件上报,请替换为客户的真实用户标识
    default_value: 当分流未命中时返回该值,根据业务需要使用,可传None
    attributes: 用户属性,仅用于分流,不随埋点上报,可参考https://www.volcengine.com/docs/6287/65826
"""       
# 各类型参数使用示例
# number
# 对照组 = 123 实验组 = 456
if variable == 123:
    pass
elif variable == 456:
    pass
else:
    pass 
# 对照组 = 111.23 实验组 = 444.56
if variable == 111.23:
    pass
elif variable == 444.56:
    pass
else:
    pass 

# string
# 对照组="aaa" 实验组="bbb"
if variable == "aaa":
    pass
elif variable == "bbb":
    pass
else:
    pass 

# bool
# 对照组=true 实验组=false
if isinstance(variable, bool) and variable:
    pass
else:
    pass

# json
# 对照组={"key":"value_a"} 实验组={"key":"value_b"}
if not isinstance(variable, dict):
    return
if variable.get("key", None) == "value_a":
    pass
elif variable.get("key", None) == "value_b":
    pass
else:
    pass

3. 接口描述

3.1 Abclient初始化方法

描述:初始化ABTest分流类

def __init__(self, token=None, meta_host=None, track_host=None, is_onpremise=False, 
            user_info_handler=None,max_workers=4):
    """
    参数:
        token: 表明您的Tester应用。出于安全考虑,此处使用的token=appKey,而非appId。
        meta_host: 设置获取meta信息的地址,火山云SaaS/私有化用户注意修改
        track_host: 设置事件上报地址,火山云SaaS/私有化用户注意修改     
        is_onpremise: 缺省值,sdk是否为私有化版本        
        user_info_handler: 缺省值,用户信息对象,进组不出组需要实现该handler
        max_workers: 缺省值,事件上报线程数,默认为4
    """

说明

1、请尽早初始化AbClient,以免影响您的分流服务和埋点上报服务。
2、每个应用有且仅有一个分流类AbClient,请确保它在所有线程中的唯一性。

在开始集成前,首先需要在集团中接入一个项目及应用,进行SDK集成前,您需要获取对应应用的appid、appkey等信息。
私有化场景下您可以在「全局设置」->「系统设置」->「集团设置」-> 「项目列表」中查看项目详情,可查看其中的appid、appkey等信息,详情请参见集团设置
图片

3.2 user_info_handler

描述:进组不出组用户分组信息存储

使用方式:

  1. 初始化AbClient时不指定user_info_handler,则默认使用空实现,不启用“进组不出组”功能。
  2. 实现如下UserInfoHandler类,自行实现持久化存储;初始化AbClient时通过user_info_handler参数传入UserInfoHandler对象。
class UserInfoHandler:
    def query(decision_id):
        """
        参数:
            decision_id: 本地分流用户标识
        返回值:
            用户进组信息, 同create_or_update 的入参abInfo
        """
        
    def create_or_update(decision_id, abInfo):
        """
        参数:
            decision_id: 本地分流用户标识
            abInfo: 字符串类型,用户进组信息
        返回值:
            类型boolean,是否成功更新
        """

3.3 activate

描述:获取特定key的分流结果,并上报曝光事件

def activate(self, variant_key, decision_id, track_id, default_value, attributes):
    """
    参数:
        variant_key: 变体的key
        decision_id: 本地分流用户标识
        track_id: 事件上报用户标识
        default_value: 变体默认值
        attributes: 用户属性
    
    返回值:
        该函数返回命中版本的参数值,未命中时返回默认值
    """

说明

1、含有“with_impression”字样的接口均会自动上报曝光事件。
2、事件上报接口请务必填写track_id字段,否则会导致上报失效。

返回值示例:

参数类型为string,返回值为str "a"
参数类型为number,返回值为int  123(也可能是float 444.56)
参数类型为boolean,返回值为bool True
参数类型为json,返回值为dict {'key': 1}

3.4 get_experiment_variant_name

描述:获取用户命中的特定实验的版本名称

def get_experiment_variant_name(self, experiment_id, decision_id, attributes):
    """
    参数:
        experiment_id: 指定分流的实验ID
        decision_id: 本地分流用户标识
        attributes: 用户属性
    
    返回值:
        该函数返回用户命中的特定实验的版本名称,
        如果用户不在实验中或者实验没有启动就返回None。
    """

返回值示例:

返回值为string "对照版本" / "实验版本1"

3.5 get_experiment_configs

描述:获取用户命中的特定实验的变体详情

def get_experiment_configs(self, experiment_id, decision_id, attributes):
    """
    参数:
        experiment_id: 指定分流的实验ID
        decision_id: 本地分流用户标识
        attributes: 用户属性
    
    返回值:
        该函数返回用户命中的某个实验的变体详情,通常仅能命中一个变体,
        如果用户不在实验中或者实验没有启动就返回空的dict {}。
    """

返回值示例:

// dict
{'age': {'val': 12, 'vid': '160528'}, 'configure': {'val': {'settings': 1}, 'vid': '160528'}, 'fromCN': {'val': True, 'vid': '160528'}, 'name': {'val': 'asd', 'vid': '160528'}}

3.6 get_all_experiment_configs

描述:获取用户命中的所有实验的变体详情

def get_all_experiment_configs(self, decision_id, attributes):
    """ 
    参数:
        decision_id: 本地分流用户标识
        attributes: 用户属性
    
    Returns:
        该函数返回用户命中的某个实验的变体详情,通常命多个变体,
        如果用户不在实验中或者实验没有启动就返回空的dict {}。
    """

返回值示例:

与get_experiment_configs返回结构相同

{'go': {'val': 'v1', 'vid': '83580'}, 'age': {'val': 12, 'vid': '160528'}, 'configure': {'val': {'settings': 1}, 'vid': '160528'}, 'fromCN': {'val': True, 'vid': '160528'}, 'name': {'val': 'asd', 'vid': '160528'}}

3.7 get_feature_configs

描述:获取用户命中的特定feature的变体详情

def get_feature_configs(self, feature_id, decision_id, attributes):
    """ 
    参数:
        feature_id: feature的ID
        decision_id: 本地分流用户标识
        attributes: 用户属性
    
    返回值:
        该函数返回用户命中某个feature的变体详情,通常仅能命中一个变体,
        如果用户不在feature中,或者feature不可用,就返回None。
    """

返回值示例:

{'servergo': {'val': False, 'vid': '20100615'}}

3.8 get_all_feature_configs

描述:获取用户命中的所有feature的变体详情

def get_all_feature_configs(self, decision_id, attributes):
    """ 
    参数:
        decision_id: 本地分流用户标识
        attributes: 用户属性

    返回值:
        该函数返回用户命中某个feature的变体详情,通常命中多个变体,
        如果用户不在feature中,或者feature不可用,就返回None。
    """

返回值示例:

与get_feature_configs返回结构相同

{'servergo': {'val': False, 'vid': '20100615'}, 'python_key': {'val': 'bbb', 'vid': '20108187'}}

3.9 get_experiment_variant_name_with_impression

同接口:"get_experiment_variant_name"(同时上报曝光事件,需要传入track_id)

3.10 get_experiment_configs_with_impression

同接口:"get_experiment_configs"(同时上报曝光事件,需要传入track_id)

3.11 get_feature_configs_with_impression

同接口:"get_feature_configs"(同时上报曝光事件,需要传入track_id)