Todos os produtos
Search
Central de documentação

:Configuração de recursos

Última atualização: Jun 28, 2026

O objeto FeatureConfs controla quais recursos de usuário e item a etapa de classificação fina carrega e como esses recursos são transformados antes da pontuação. Ele mapeia nomes de cenários para configurações de carregamento de recursos, permitindo que diferentes cenários utilizem conjuntos de recursos distintos.

{
  "FeatureConfs": {
    "<scene_name>": { ... }
  }
}

Conceitos principais

Termo

Descrição

FeatureConfs

Mapa de nível superior. A chave é o nome do cenário; o valor é um objeto de configuração de carregamento de recursos.

FeatureLoadConfs

Lista de tarefas de carregamento de recursos dentro de um cenário. Cada tarefa extrai recursos de uma única fonte de dados.

FeatureDaoConf

Configuração de acesso a dados para uma única tarefa de carregamento — especifica o tipo de fonte de dados, a conexão e a seleção de campos.

FeatureKey

Chave de consulta. Formato: <side>:<field>. Por exemplo, user:uid consulta o campo uid no lado do usuário; item:id consulta o campo id no lado do item.

FeatureStore

Local de armazenamento dos recursos recuperados. Valores válidos: user ou item.

AsynLoadFeature

Quando definido como true, todas as tarefas em FeatureLoadConfs executam simultaneamente, reduzindo o tempo total de carregamento.

Escolha uma fonte de dados

É possível carregar recursos do Hologres, PAI-FeatureStore, Tablestore (OTS) e Redis. A tabela abaixo resume as principais diferenças.

Capacidade

Hologres

PAI-FeatureStore

Tablestore (OTS)

Redis

Valor de AdapterType

hologres

featurestore

tablestore

redis

Seleção de campos (UserSelectFields / ItemSelectFields)

Sim

Sim (com visualização de recurso)

Sim

Sim (apenas formato HASH)

Cache local (CacheSize / CacheTime)

Sim

Sim

Sim

Sim

Seleção de visualização de recurso

Não

Sim

Não

Não

Opções de formato de dados

string (CSV / JSON) ou hash

Hologres

Cada entrada em FeatureLoadConfs carrega dados de uma tabela do Hologres. Configure entradas separadas para recursos de usuário e de item.

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "hologres",
            "HologresName": "holo-pai",
            "FeatureKey": "user:uid",
            "UserFeatureKeyName": "user_id",
            "HologresTableName": "recom_user_features_processed_holo_online",
            "UserSelectFields": "rids_count,sex,alladdfriendnum,allpayrosenum",
            "FeatureStore": "user"
          },
          "Features": []
        },
        {
          "FeatureDaoConf": {
            "AdapterType": "hologres",
            "HologresName": "holo-pai",
            "ItemFeatureKeyName": "item_id",
            "FeatureKey": "item:id",
            "HologresTableName": "recom_user_features_processed_holo_online",
            "ItemSelectFields": "rids_count as rids2_count,sex as guestsex,alladdfriendnum as alladdfriendnum2",
            "FeatureStore": "item"
          },
          "Features": []
        }
      ]
    }
  }
}

Parâmetros de FeatureLoadConfs/FeatureDaoConf

Parâmetro

Tipo

Obrigatório

Descrição

AdapterType

string

Sim

Defina como hologres.

HologresName

string

Sim

Nome da instância do Hologres conforme definido em HologresConfs. Por exemplo, holo_info.

FeatureKey

string

Sim

Chave de consulta. Por exemplo, user:uid consulta o campo uid no lado do usuário; item:id consulta o campo id no lado do item.

UserFeatureKeyName

string

Sim

Campo de chave primária da tabela de recursos de usuário.

ItemFeatureKeyName

string

Sim

Campo de chave primária da tabela de recursos de item.

HologresTableName

string

Sim

Nome da tabela de recursos no Hologres.

UserSelectFields

string

Não

Recursos de usuário a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

ItemSelectFields

string

Não

Recursos de item a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

FeatureStore

string

Sim

Local de armazenamento dos recursos recuperados. Valores válidos: user ou item.

CacheSize

integer

Não

Número de entradas de recursos para armazenar em cache localmente. Padrão: 0 (sem cache).

CacheTime

integer

Não

Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando CacheSize for maior que 0. Padrão: 3600.

PAI-FeatureStore

Para instruções de configuração, consulte Visão geral do FeatureStore.

Carregar todos os recursos de uma entidade

A configuração a seguir recupera todos os recursos da entidade user do modelo rank_v1:

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "featurestore",
            "FeatureStoreName": "pairec-fs",
            "FeatureKey": "user:uid",
            "FeatureStoreModelName": "rank_v1",
            "FeatureStoreEntityName": "user",
            "FeatureStore": "user"
          }
        }
      ]
    }
  }
}

Para carregar recursos de item, defina FeatureKey como item:id, FeatureStoreEntityName como item e FeatureStore como item.

Parâmetros de FeatureLoadConfs/FeatureDaoConf

Parâmetro

Tipo

Obrigatório

Descrição

AdapterType

string

Sim

Defina como featurestore.

FeatureStoreName

string

Sim

Nome da instância do FeatureStore conforme definido em FeatureStoreConfs. Por exemplo, pairec-fs.

FeatureKey

string

Sim

Chave de consulta. Por exemplo, user:uid ou item:id.

FeatureStoreModelName

string

Sim

Nome do recurso do modelo no PAI-FeatureStore.

FeatureStoreEntityName

string

Sim

Nome da entidade no PAI-FeatureStore.

FeatureStore

string

Sim

Local de armazenamento dos recursos recuperados. Valores válidos: user ou item.

CacheSize

integer

Não

Número de entradas de recursos para armazenar em cache localmente. Padrão: 0 (sem cache).

CacheTime

integer

Não

Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando CacheSize for maior que 0. Padrão: 3600.

Carregar recursos de uma visualização de recurso específica

Para recuperar recursos de uma visualização de recurso nomeada em vez de uma entidade inteira, utilize FeatureStoreViewName. O exemplo a seguir recupera todos os recursos de usuário da visualização user_table_preprocess_all_feature_v1 e um subconjunto de recursos de item da visualização item_table_preprocess_all_feature_v1:

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "featurestore",
            "FeatureStoreName": "pairec-fs",
            "FeatureKey": "user:uid",
            "FeatureStoreViewName": "user_table_preprocess_all_feature_v1",
            "UserSelectFields": "*",
            "FeatureStore": "user"
          }
        },
        {
          "FeatureDaoConf": {
            "AdapterType": "featurestore",
            "FeatureStoreName": "pairec-fs",
            "FeatureKey": "item:id",
            "FeatureStoreViewName": "item_table_preprocess_all_feature_v1",
            "ItemSelectFields": "author,duration,category",
            "FeatureStore": "item"
          }
        }
      ]
    }
  }
}

Parâmetro

Tipo

Obrigatório

Descrição

FeatureStoreViewName

string

Sim

Nome da visualização de recurso.

UserSelectFields

string

Não

Recursos de usuário a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

ItemSelectFields

string

Não

Recursos de item a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

Tablestore (OTS)

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "tablestore",
            "TableStoreName": "tablestore_info",
            "FeatureKey": "user:uid",
            "UserFeatureKeyName": "uid",
            "TableStoreTableName": "",
            "UserSelectFields": "*",
            "FeatureStore": "user"
          },
          "Features": []
        },
        {
          "FeatureDaoConf": {
            "AdapterType": "tablestore",
            "TableStoreName": "tablestore_info",
            "FeatureKey": "item:id",
            "ItemFeatureKeyName": "item_id",
            "TableStoreTableName": "",
            "ItemSelectFields": "*",
            "FeatureStore": "item"
          },
          "Features": []
        }
      ]
    }
  }
}

Parâmetros de FeatureLoadConfs/FeatureDaoConf

Parâmetro

Tipo

Obrigatório

Descrição

AdapterType

string

Sim

Defina como tablestore.

TableStoreName

string

Sim

Nome da instância do Tablestore conforme definido em TableStoreConfs. Por exemplo, tablestore_info.

FeatureKey

string

Sim

Chave de consulta. Por exemplo, user:uid ou item:pair_id.

UserFeatureKeyName

string

Não

Campo de chave primária da tabela de recursos de usuário.

ItemFeatureKeyName

string

Não

Campo de chave primária da tabela de recursos de item.

TableStoreTableName

string

Sim

Nome da tabela de recursos no Tablestore.

UserSelectFields

string

Não

Recursos de usuário a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

ItemSelectFields

string

Não

Recursos de item a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2.

FeatureStore

string

Sim

Local de armazenamento dos recursos recuperados. Valores válidos: user ou item.

CacheSize

integer

Não

Número de entradas de recursos para armazenar em cache localmente. Padrão: 0 (sem cache).

CacheTime

integer

Não

Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando CacheSize for maior que 0. Padrão: 3600.

Redis

O Redis suporta dois formatos de armazenamento: chave-valor (KV) e HASH.

  • KV format: O valor pode ser CSV (com delimitador configurável) ou JSON.

  • Formato HASH: Recupera todos os campos ou campos selecionados por nome usando UserSelectFields ou ItemSelectFields.

Formato KV

Neste exemplo, os recursos de usuário são armazenados como CSV e os recursos de item como JSON. O parâmetro RedisValueDelimeter especifica o separador CSV.

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "redis",
            "RedisName": "user_redis",
            "RedisPrefix": "UF_V2_",
            "FeatureKey": "user:uid",
            "FeatureStore": "user",
            "RedisDataType": "string",
            "RedisFieldType": "csv",
            "RedisValueDelimeter": ","
          },
          "Features": []
        },
        {
          "FeatureDaoConf": {
            "AdapterType": "redis",
            "RedisName": "item_redis",
            "RedisPrefix": "IF_V2_FM_",
            "FeatureKey": "item:id",
            "FeatureStore": "item",
            "RedisDataType": "string",
            "RedisFieldType": "json"
          },
          "Features": []
        }
      ]
    }
  }
}

Formato HASH

{
  "FeatureConfs": {
    "scene_name": {
      "AsynLoadFeature": true,
      "FeatureLoadConfs": [
        {
          "FeatureDaoConf": {
            "AdapterType": "redis",
            "RedisName": "user_redis",
            "RedisPrefix": "UF_V2_",
            "FeatureKey": "user:uid",
            "FeatureStore": "user",
            "RedisDataType": "hash",
            "UserSelectFields": "*"
          },
          "Features": []
        },
        {
          "FeatureDaoConf": {
            "AdapterType": "redis",
            "RedisName": "item_redis",
            "RedisPrefix": "IF_V2_FM_",
            "FeatureKey": "item:id",
            "FeatureStore": "item",
            "RedisDataType": "hash",
            "ItemSelectFields": "city,author,duration"
          },
          "Features": []
        }
      ]
    }
  }
}

Parâmetros de FeatureLoadConfs/FeatureDaoConf

Parâmetro

Tipo

Obrigatório

Descrição

AdapterType

string

Sim

Defina como redis.

RedisName

string

Sim

Nome da instância do Redis conforme definido em RedisConfs. Por exemplo, redis_info.

RedisPrefix

string

Sim

Prefixo da chave.

FeatureKey

string

Sim

Chave de consulta. Por exemplo, user:uid ou item:pair_id.

FeatureStore

string

Sim

Local de armazenamento dos recursos recuperados. Valores válidos: user ou item.

RedisDataType

string

Sim

Formato de armazenamento de dados. Valores válidos: string ou hash.

RedisFieldType

string

Não

Formato do campo quando RedisDataType é string. Valores válidos: csv ou json.

RedisValueDelimeter

string

Não

Separador CSV. Entra em vigor apenas quando RedisFieldType é csv.

UserSelectFields

string

Não

Recursos de usuário a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2. Entra em vigor apenas quando RedisDataType é hash.

ItemSelectFields

string

Não

Recursos de item a serem recuperados. Use * para todos, ou uma lista separada por vírgulas, como feature1,feature2. Entra em vigor apenas quando RedisDataType é hash.

CacheSize

integer

Não

Número de entradas de recursos para armazenar em cache localmente. Padrão: 0 (sem cache).

CacheTime

integer

Não

Tempo de expiração das entradas em cache, em segundos. Entra em vigor apenas quando CacheSize for maior que 0. Padrão: 3600.

Transformação de recursos

Após o carregamento dos recursos, é possível derivar novos recursos ou recombinar os existentes usando três tipos de transformação:

**FeatureType**

Descrição

new_feature

Gera um novo recurso do zero ou a partir de uma expressão.

raw_feature

Crie uma cópia renomeada de um recurso existente.

compose_feature

Combina vários recursos existentes em um único recurso composto.

As configurações de transformação de recursos são definidas diretamente em cada entrada FeatureLoadConf, juntamente com FeatureDaoConf.

new_feature

Utilize new_feature para gerar recursos inexistentes na fonte de dados — valores baseados em tempo, números aleatórios, constantes ou resultados de expressões.

Valores de tempo e aleatórios

{ "FeatureType": "new_feature", "FeatureName": "day_h", "Normalizer": "hour_in_day", "FeatureStore": "user" }
{ "FeatureType": "new_feature", "FeatureName": "week_day", "Normalizer": "weekday", "FeatureStore": "user" }
{ "FeatureType": "new_feature", "FeatureName": "rand_int_v", "Normalizer": "random", "FeatureStore": "user" }

Os normalizadores hour_in_day e weekday geram valores em tempo real com base na hora atual do sistema. O normalizador random gera um número inteiro no intervalo [0, 100).

Valor constante

O exemplo a seguir gera um recurso chamado alg com o valor estático ALRC:

{
  "FeatureType": "new_feature",
  "FeatureStore": "user",
  "Normalizer": "const_value",
  "FeatureValue": "ALRC",
  "FeatureName": "alg"
}

Expressão (recomendado)

Use Normalizer: "expr" para recursos baseados em expressão. Este método utiliza a biblioteca expr e oferece sintaxe mais flexível e melhor desempenho do que o método expression mais antigo.

Referencie recursos do lado do item com o prefixo item. e recursos do lado do usuário com o prefixo user.. Utilize currentTime para obter o timestamp Unix atual em segundos.

O exemplo a seguir gera um recurso booleano is_retarget (representado como 1 ou 0):

{
  "FeatureType": "new_feature",
  "FeatureStore": "item",
  "Normalizer": "expr",
  "Expression": "item.recall_name in ['retarget_u2i','realtime_retarget_click']",
  "FeatureName": "is_retarget"
}

Para combinar recursos do lado do usuário e do lado do item na mesma expressão:

{
  "FeatureType": "new_feature",
  "FeatureStore": "item",
  "Normalizer": "expr",
  "Expression": "user.user_index - item.index",
  "FeatureName": "index_delta"
}

Para consultar a sintaxe da expressão, consulte a definição da linguagem expr.

Expressão (legado)

O parâmetro Normalizer: "expression" utiliza a biblioteca govaluate. Utilize FeatureSource para especificar qual valor de recurso passar para a expressão. Se a expressão referenciar múltiplas propriedades do item, omita FeatureSource — todas as propriedades do item são passadas automaticamente.

{
  "FeatureType": "new_feature",
  "FeatureStore": "item",
  "FeatureSource": "item:recall_name",
  "Normalizer": "expression",
  "Expression": "recall_name in ('retarget_u2i','realtime_retarget_click')",
  "FeatureName": "is_retarget"
}

Para consultar a sintaxe da expressão, consulte o manual do govaluate.

raw_feature

O tipo raw_feature copia um recurso existente sob um novo nome. Defina RemoveFeatureSource como true para excluir o original após a cópia.

O exemplo a seguir renomeia o recurso age do usuário para age_v2:

{
  "FeatureType": "raw_feature",
  "FeatureStore": "user",
  "FeatureSource": "user:age",
  "RemoveFeatureSource": true,
  "FeatureName": "age_v2"
}

Utilize o prefixo user: para recursos do lado do usuário e o prefixo item: para recursos do lado do item em FeatureSource.

compose_feature

O tipo compose_feature une vários valores de recursos com um sublinhado (_) para criar um recurso composto.

O exemplo a seguir cria item_author unindo user:category e item:author. Se user:category for category1 e item:author for author1, o resultado será category1_author1:

{
  "FeatureType": "compose_feature",
  "FeatureStore": "item",
  "FeatureSource": "user:category,item:author",
  "FeatureName": "item_author"
}
O método expr para new_feature oferece uma alternativa mais flexível para construir recursos compostos.

Funções de expressão integradas

As funções a seguir estão disponíveis tanto nas expressões expression quanto nas expr.

Funções de string

Função

Assinatura

Descrição

Exemplo

getString

getString(a, b)

Retorna a se não estiver vazio; caso contrário, retorna b.

getString(user.city, "unknown")

trim

trim(str, cutset)

Remove todos os caracteres iniciais e finais presentes em cutset de str.

trim(" hello ", " ") retorna "hello"

trimPrefix

trimPrefix(str, cutset)

Remove os caracteres iniciais presentes em cutset de str.

trimPrefix("UF_uid", "UF_") retorna "uid"

replace

replace(str, old, new)

Substitui todas as ocorrências de old por new em str.

replace("a-b-c", "-", "_") retorna "a_b_c"

Funções matemáticas

Função

Assinatura

Descrição

Exemplo

round

round(number)

Arredonda para o número inteiro mais próximo.

round(123.5) retorna 124.0

round

round(number, places)

Trunca para o número especificado de casas decimais.

round(123.456, 2) retorna 123.45

hash32

hash32(str)

Calcula um hash de 32 bits usando murmur3.Sum32.

hash32(item.id)

log

log(number)

Logaritmo natural (base e).

log(2.718)

log10

log10(number)

Logaritmo comum (base 10).

log10(100) retorna 2.0

log2

log2(number)

Logaritmo binário (base 2).

log2(8) retorna 3.0

pow

pow(base, exponent)

Eleva base à potência de exponent.

pow(2, 10) retorna 1024.0

Funções geoespaciais

Função

Assinatura

Descrição

s2CellID

s2CellID(lat, lng)s2CellID(lat, lng, level)

Retorna o S2 Cell ID (int) para as coordenadas fornecidas. O parâmetro level controla a precisão (maior = célula menor). Nível padrão: 15.

s2CellNeighbors

s2CellNeighbors(lat, lng)s2CellNeighbors(lat, lng, level)

Retorna uma lista de S2 Cell IDs ([]int) para as coordenadas fornecidas e todas as 8 células adjacentes — 9 IDs no total.

geoHash

geoHash(lat, lng)geoHash(lat, lng, precision)

Codifica coordenadas como uma string Geohash. Precisão padrão: 6.

geoHashWithNeighbors

geoHashWithNeighbors(lat, lng)geoHashWithNeighbors(lat, lng, precision)

Retorna strings Geohash para as coordenadas fornecidas e todas as 8 áreas adjacentes — 9 strings no total.

haversine

haversine(lng1, lat1, lng2, lat2)

Calcula a distância esférica entre dois pontos usando a fórmula de Haversine. Retorna float64 em quilômetros.

sphereDistance

sphereDistance(lng1, lat1, lng2, lat2)

Calcula a distância esférica entre dois pontos usando a lei esférica dos cossenos. Retorna float64 em quilômetros.