You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取W&B所有artifact collections及其artifact的所有别名

方案1:v0.13.10及以上版本最简实现(仅获取集合维度别名)

该版本SDK已原生支持ArtifactCollection实例的aliases属性,无需手动拼接属性,代码可以简化为:

import os
import wandb

ENTITY = os.environ.get("WANDB_ENTITY")
API_KEY = os.environ.get("WANDB_API_KEY")

def get_model_artifacts(key=None):
    wandb.login(key=key if key else API_KEY)
    api = wandb.Api(overrides={"entity": ENTITY})
    # 直接获取所有模型集合,原生自带aliases属性
    return list(api.artifact_type(type_name="models", project="train").collections())

调用返回的每个model对象直接调用model.aliases即可拿到对应别名。


方案2:兼容低版本+获取全版本所有别名(含历史版本)

如果需要获取集合下所有版本的别名(包括指向旧版本的别名),可以优化现有实现,避免直接访问私有属性_attrs,降低后续版本升级兼容性风险:

import os
import re
import wandb

ENTITY = os.environ.get("WANDB_ENTITY")
API_KEY = os.environ.get("WANDB_API_KEY")

def get_model_artifacts(key=None):
    wandb.login(key=key if key else API_KEY)
    api = wandb.Api(overrides={"entity": ENTITY})
    model_collections = list(api.artifact_type(type_name="models", project="train").collections())
    
    for model in model_collections:
        version_map = {}
        all_aliases = set()
        # 遍历所有版本,用公开的aliases属性即可
        for version in model.versions():
            ver_num = None
            ver_aliases = []
            for alias in version.aliases:
                if re.fullmatch(r"v\d+", alias):
                    ver_num = alias
                else:
                    ver_aliases.append(alias)
                    all_aliases.add(alias)
            if ver_num:
                version_map[ver_num] = ver_aliases
                all_aliases.add(ver_num)
        # 挂载属性到集合对象
        model.version_map = version_map
        model.all_aliases = list(all_aliases)
    
    return model_collections

这个实现的优势:

  • 不访问私有属性,兼容性更强
  • 自动去重重复别名
  • 同时保留版本和别名的映射关系,方便后续查询某个别名指向的具体版本

内容的提问来源于stack exchange,提问作者Alex L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:18:05