Tous les produits
Search
Centre de documentation

Platform For AI:SDK FeatureStore pour Go

Dernière mise à jour :Aug 20, 2026

Le SDK FeatureStore pour Go permet de récupérer des données de caractéristiques (features) à partir de magasins de données en ligne lors de l'inférence de modèles, y compris les caractéristiques hors ligne, en temps réel et séquentielles.

Prérequis

Avant de commencer, vérifiez que vous disposez des éléments suivants :

  • Un projet FeatureStore, des entités de caractéristiques, des vues de caractéristiques et des caractéristiques de modèle créés, avec une synchronisation des données entre les magasins en ligne et hors ligne. Consultez la rubrique Configurer les projets FeatureStore.

  • Un AccessKey ID et un AccessKey Secret. Consultez la rubrique Créer une paire de clés d'accès.

  • Une application s'exécutant au sein d'un VPC (Virtual Private Cloud). Le client FeatureStore se connecte aux magasins de données en ligne via un VPC ; par exemple, Hologres n'est accessible que via un VPC spécifique.

Stockez votre AccessKey ID et votre AccessKey Secret en tant que variables d'environnement plutôt que de les coder en dur dans votre code. Consultez la rubrique Configurer les variables d'environnement.

Installer le SDK

go get github.com/aliyun/aliyun-pai-featurestore-go-sdk/v2

Prise en main

Étape 1 : Initialiser le client FeatureStore

API

func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)
Paramètre Description
regionId La région où réside l'instance
accessKeyId L'AccessKey ID utilisé pour accéder aux services de stockage
accessKeySecret L'AccessKey Secret utilisé pour accéder aux services de stockage
projectName Le nom du projet FeatureStore créé dans la console Platform for AI (PAI)

Exemple

accessId := os.Getenv("AccessId")
accessKey := os.Getenv("AccessKey")

client, err := featurestore.NewFeatureStoreClient("cn-beijing", accessId, accessKey, "project_name")

Étape 2 : Récupérer les données de caractéristiques à partir d'une vue de caractéristiques

Utilisez GetOnlineFeatures pour extraire les caractéristiques d'une vue de caractéristiques par identifiant de jointure (clé primaire).

API

GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)
Paramètre Description
joinIds Les identifiants de jointure (clés primaires) des caractéristiques à récupérer
features Les noms des caractéristiques à récupérer. Utilisez []string{"*"} pour récupérer toutes les caractéristiques de la vue de caractéristiques
alias Alias pour les caractéristiques récupérées. Ne s'applique pas aux vues de caractéristiques séquentielles

Exemple

// Get project by name
project, err := client.GetProject("project_name")
if err != nil {
    // t.Fatal(err)
}

// Get feature view by name
user_feature_view := project.GetFeatureView("feature_view_name")
if user_feature_view == nil {
    // t.Fatal("feature view not exist")
}

// Retrieve features for two keys
features, err := user_feature_view.GetOnlineFeatures([]interface{}{"key1", "key2"}, []string{"*"}, nil)

Réponse : vue de caractéristiques hors ligne ou en temps réel

Chaque élément de la réponse correspond à un identifiant de jointure. Les champs sans données dans le magasin de données en ligne renvoient une chaîne vide.

[
    {
        "city": "Hefei",
        "follow_cnt": 1,
        "gender": "male",
        "user_id": "100043186"
    },
    {
        "city": "",
        "follow_cnt": 5,
        "gender": "male",
        "user_id": "100060369"
    }
]

Réponse : vue de caractéristiques séquentielles

Les caractéristiques séquentielles sont renvoyées sous forme de chaînes délimitées par des points-virgules. Chaque champ de suffixe (__event, __event_time, __item_id, __playtime, __ts) contient les valeurs d'attribut correspondantes dans le même ordre que la séquence de caractéristiques.

L'exemple suivant utilise cette configuration de caractéristiques séquentielles :

Champ de caractéristique séquentielle hors ligne Nom de l'événement Longueur de la séquence Nom de la caractéristique séquentielle en ligne
click_seq_50_seq click 50 click_seq_50_seq
expr_seq_100_seq expr 100 expr_seq_100
[
  {
    "click_seq_50_seq": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__event": "click;click;click;click",
    "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
    "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
    "click_seq_50_seq__ts": "389018;389018;398793;398793",
    "expr_seq_100": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
    "expr_seq_100__event": "expr;expr;expr;expr;expr;expr;expr;expr;expr;expr",
    "expr_seq_100__event_time": "1699128398;1699128398;1699128398;1699128398;1699128398;1699128398;1699118623;1699118623;1699118623;1699118623",
    "expr_seq_100__item_id": "207474427;216751275;228787053;247136848;270584471;299485479;220852269;242884721;245999124;265863707",
    "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00;0.00",
    "expr_seq_100__ts": "389018;389018;389018;389018;389018;389018;398793;398793;398793;398793",
    "user_id": "186569075"
  },
  {
    "click_seq_50_seq": "201741544;236327912;293320498",
    "click_seq_50_seq__event": "click;click;click",
    "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
    "click_seq_50_seq__item_id": "201741544;236327912;293320498",
    "click_seq_50_seq__playtime": "97.41;70.32;135.21",
    "click_seq_50_seq__ts": "339171;339171;339171",
    "expr_seq_100": "201741544;224940066;236327912;240253906;247562151;293320498",
    "expr_seq_100__event": "expr;expr;expr;expr;expr;expr",
    "expr_seq_100__event_time": "1699178245;1699178245;1699178245;1699178245;1699178245;1699178245",
    "expr_seq_100__item_id": "201741544;224940066;236327912;240253906;247562151;293320498",
    "expr_seq_100__playtime": "0.00;0.00;0.00;0.00;0.00;0.00",
    "expr_seq_100__ts": "339171;339171;339171;339171;339171;339171",
    "user_id": "186569870"
  }
]

Étape 3 : Récupérer les données de caractéristiques à partir des caractéristiques de modèle

Chaque caractéristique de modèle peut être associée à plusieurs entités de caractéristiques. Utilisez GetOnlineFeatures pour récupérer toutes les caractéristiques d'entité en une seule fois, ou GetOnlineFeaturesWithEntity pour récupérer les caractéristiques d'une entité spécifique.

API

// Retrieve features for all entities
GetOnlineFeatures(joinIds map[string][]interface{}) ([]map[string]interface{}, error)

// Retrieve features for a specific entity
GetOnlineFeaturesWithEntity(joinIds map[string][]interface{}, featureEntityName string) ([]map[string]interface{}, error)
Paramètre Description
joinIds Une carte des noms d'identifiants de jointure vers leurs valeurs. Spécifiez tous les identifiants de jointure configurés pour la caractéristique de modèle
featureEntityName Le nom de l'entité de caractéristiques dont les caractéristiques doivent être récupérées

Exemple

Une caractéristique de modèle peut être associée à plusieurs entités de caractéristiques. L'exemple suivant spécifie deux identifiants de jointure — user_id et item_id — correspondant à la configuration de la caractéristique de modèle.

// Get project by name
project, err := client.GetProject("fs_test_ots")
if err != nil {
    // t.Fatal(err)
}

// Get model feature by name
model_feature := project.GetModelFeature("rank")
if model_feature == nil {
    // t.Fatal("model feature not exist")
}

// Retrieve features for all configured join IDs
features, err := model_feature.GetOnlineFeatures(map[string][]interface{}{"user_id": {"100000676", "100004208"}, "item_id": {"238038872", "264025480"}})

Pour récupérer les caractéristiques d'une entité spécifique uniquement :

features, err := model_feature.GetOnlineFeaturesWithEntity(map[string][]interface{}{"user_id": {"100000676", "100004208"}}, "user")

Réponse : caractéristiques de modèle sans caractéristiques séquentielles

[
    {
        "age": 26,
        "city": "Shenyang",
        "gender": "male",
        "user_id": "100000676"
    },
    {
        "age": 23,
        "city": "Xi'an",
        "gender": "male",
        "user_id": "100004208"
    }
]

Réponse : caractéristiques de modèle avec caractéristiques séquentielles

Lorsque vous enregistrez des caractéristiques de modèle, vous pouvez inclure des caractéristiques séquentielles hors ligne pour l'entraînement du modèle. Ces caractéristiques séquentielles sont synchronisées avec le magasin de données en ligne et renvoyées avec les caractéristiques standard.

L'entité séquentielle est généralement l'utilisateur. L'exemple suivant utilise cette configuration de caractéristiques séquentielles :

Champ de caractéristique séquentielle hors ligne Nom de l'événement Longueur de la séquence Nom de la caractéristique séquentielle en ligne
click_seq_50_seq click 50 click_seq_50_seq
[
  {
    "age": 51,
    "author": 147848300,
    "category": "7",
    "city": "",
    "click_count": 0,
    "click_seq_50_seq": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__event": "click;click;click;click",
    "click_seq_50_seq__event_time": "1699128398;1699128398;1699118623;1699118623",
    "click_seq_50_seq__item_id": "216751275;228787053;220852269;242884721",
    "click_seq_50_seq__playtime": "65.40;72.06;104.69;62.74",
    "click_seq_50_seq__ts": "391447;391447;401222;401222",
    "duration": 48,
    "follow_cnt": 2,
    "follower_cnt": 0,
    "gender": "female",
    "item_cnt": 0,
    "item_id": 299485479,
    "praise_count": 2,
    "pub_time": 1697885713,
    "register_time": 1696582012,
    "tags": "0",
    "title": "#Workout tracking",
    "user_id": "186569075"
  },
  {
    "age": 28,
    "author": 119734983,
    "category": "18",
    "city": "",
    "click_count": 0,
    "click_seq_50_seq": "201741544;236327912;293320498",
    "click_seq_50_seq__event": "click;click;click",
    "click_seq_50_seq__event_time": "1699178245;1699178245;1699178245",
    "click_seq_50_seq__item_id": "201741544;236327912;293320498",
    "click_seq_50_seq__playtime": "97.41;70.32;135.21",
    "click_seq_50_seq__ts": "341600;341600;341600",
    "duration": 15,
    "follow_cnt": 0,
    "follower_cnt": 2,
    "gender": "male",
    "item_cnt": 0,
    "item_id": 207474427,
    "praise_count": 79,
    "pub_time": 1697731285,
    "register_time": 1699135393,
    "tags": "1",
    "title": "#Idiom story",
    "user_id": "186569870"
  }
]