You need to enable JavaScript to run this app.
导航
Python SDK
最近更新时间:2024.09.13 10:22:49首次发布时间:2023.04.20 14:37:18

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

2.1.1 SaaS-云原生

from client import client

# 初始化ABTest分流客户端,请注意修改token参数
ab_client = client.AbClient(
    "token",
    meta_host="https://tab.volces.com",
    track_host="https://gator.volces.com"
)    
"""
参数:
    token: 获取方式详见接口描述-AbClient
    meta_host: 获取meta信息的地址,需要显示的指定为https://tab.volces.com,私有化用户注意修改
    track_host: 事件上报地址,需要显示的指定为https://gator.volces.com,私有化用户注意修改
    is_onpremise: 缺省值,sdk是否为私有化版本
    user_info_handler: 缺省值,用户信息对象,进组不出组需要实现该handler
    max_workers: 缺省值,事件上报线程数,默认为4
"""

2.1.2 SaaS-非云原生(老客)

与SaaS-云原生使用方式,仅初始化client时不同。SaaS-非云原生的老客户,无需指定meta_host与track_host

from client import client

# 初始化ABTest分流客户端,请注意修改token参数
ab_client = client.AbClient("token")    
"""
参数:
    token: 获取方式详见接口描述-AbClient
    meta_host: 缺省值,获取meta信息的地址,默认值为SaaS-非云原生版本,私有化用户注意修改
    track_host: 缺省值,事件上报地址,默认值为SaaS-非云原生版本,私有化用户注意修改
    is_onpremise: 缺省值,sdk是否为私有化版本
    user_info_handler: 缺省值,用户信息对象,进组不出组需要实现该handler
    max_workers: 缺省值,事件上报线程数,默认为4
"""

2.1.3 私有化

与SaaS版本使用方式,仅初始化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,请确保它在所有线程中的唯一性。

在集团中接入一个应用后,您可以在集团相关页面查看应用的AppKey等信息,详情请参考:如何创建应用

  • SaaS-云原生
    图片
  • SaaS-非云原生
    图片

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)