Todos os produtos
Search
Central de documentação

Platform For AI:FeatureStore SDK for Go

Última atualização: Aug 20, 2026

O FeatureStore SDK for Go permite recuperar dados de features de armazenamentos de dados online durante a inferência do modelo, incluindo features offline, features em tempo real e features de sequência.

Pré-requisitos

Antes de começar, verifique se você possui:

  • Um projeto do FeatureStore, entidades de features, visualizações de features e features de modelo criados, com dados sincronizados entre os armazenamentos online e offline. Consulte Configure FeatureStore projects.

  • Um AccessKey ID e um AccessKey secret. Consulte Create an AccessKey pair.

  • Sua aplicação em execução dentro de uma Virtual Private Cloud (VPC). O cliente do FeatureStore conecta-se aos armazenamentos de dados online por meio de uma VPC. Por exemplo, o Hologres é acessível apenas por uma VPC específica.

Armazene seu AccessKey ID e AccessKey secret como variáveis de ambiente em vez de codificá-los diretamente no código. Consulte Configure environment variables.

Instale o SDK

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

Primeiros passos

Etapa 1: Inicialize o cliente do FeatureStore

API

func NewFeatureStoreClient(regionId, accessKeyId, accessKeySecret, projectName string, opts ...ClientOption) (*FeatureStoreClient, error)

Parâmetro

Descrição

regionId

A região onde a instância está localizada

accessKeyId

O AccessKey ID usado para acessar os serviços de armazenamento

accessKeySecret

O AccessKey secret usado para acessar os serviços de armazenamento

projectName

O nome do projeto do FeatureStore criado no console do Platform for AI (PAI)

Exemplo

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

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

Etapa 2: Recupere dados de features de uma visualização de features

Use GetOnlineFeatures para buscar features de uma visualização de features pelo join ID (chave primária).

API

GetOnlineFeatures(joinIds []interface{}, features []string, alias map[string]string) ([]map[string]interface{}, error)
Parâmetro Descrição
joinIds Os join IDs (chaves primárias) das features a recuperar
features Os nomes das features a recuperar. Use []string{"*"} para recuperar todas as features da visualização de features
alias Aliases para as features recuperadas. Não se aplica a visualizações de features de sequência

Exemplo

// 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)

Resposta: visualização de features offline ou em tempo real

Cada elemento na resposta corresponde a um join ID. Campos sem dados no armazenamento de dados online retornam uma string vazia.

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

Resposta: visualização de features de sequência

As features de sequência são retornadas como strings delimitadas por ponto e vírgula. Cada campo de sufixo (__event, __event_time, __item_id, __playtime, __ts) contém os valores de atributo correspondentes na mesma ordem da sequência de features.

O exemplo a seguir utiliza esta configuração de feature de sequência:

Campo de feature de sequência offline

Nome do evento

Comprimento da sequência

Nome da feature de sequência online

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"
  }
]

Etapa 3: Recupere dados de features de features de modelo

Cada feature de modelo pode associar-se a múltiplas entidades de features. Use GetOnlineFeatures para recuperar todas as features de entidades simultaneamente ou GetOnlineFeaturesWithEntity para recuperar features de uma entidade específica.

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)
Parâmetro Descrição
joinIds Um mapa de nomes de join IDs para seus valores. Especifique todos os join IDs configurados para a feature de modelo
featureEntityName O nome da entidade de feature cujas features devem ser recuperadas

Exemplo

Uma feature de modelo pode associar-se a várias entidades de features. O exemplo a seguir especifica dois join IDs — user_id e item_id — correspondentes à configuração da feature de modelo.

// 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"}})

Para recuperar features apenas de uma entidade específica:

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

Resposta: features de modelo sem features de sequência

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

Resposta: features de modelo com features de sequência

Ao registrar features de modelo, você pode incluir features de sequência offline para treinamento do modelo. Essas features de sequência sincronizam-se com o armazenamento de dados online e retornam juntamente com as features regulares.

A entidade de sequência geralmente é o usuário. O exemplo a seguir utiliza esta configuração de feature de sequência:

Campo de feature de sequência offline

Nome do evento

Comprimento da sequência

Nome da feature de sequência online

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"
  }
]