Táboa de contidos Overview System Architecture Components Home Mixer Thunder Phoenix Candidate Pipeline How It Works Pipeline Stages Scoring and Ranking Filtering Key Design Decisions visión xeral O algoritmo de For You feed recupera, clasifica e filtra publicacións de dúas fontes: In-Network (Thunder): Publicacións de contas que segue Out-of-Network (Phoenix Retrieval): Posts descubertos dun corpus global Ambas fontes son combinadas e clasificadas xuntas usando , un modelo de transformador baseado en Grok que predí as probabilidades de compromiso para cada post. A puntuación final é unha combinación ponderada destes compromisos previstos. Phoenix O transformador baseado en Grok fai todo o levantamento pesado comprendendo o seu historial de compromiso (o que lle gustou, respondeu, compartiu, etc.) e usando iso para determinar que contido é relevante para vostede. Arquitectura do sistema ┌─────────────────────────────────────────────────────────────────────────────────────────────┐ │ FOR YOU FEED REQUEST │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────────────────────┐ │ HOME MIXER │ │ (Orchestration Layer) │ ├─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ QUERY HYDRATION │ │ │ │ ┌──────────────────────────┐ ┌──────────────────────────────────────────────┐ │ │ │ │ │ User Action Sequence │ │ User Features │ │ │ │ │ │ (engagement history) │ │ (following list, preferences, etc.) │ │ │ │ │ └──────────────────────────┘ └──────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ CANDIDATE SOURCES │ │ │ │ ┌─────────────────────────────┐ ┌────────────────────────────────┐ │ │ │ │ │ THUNDER │ │ PHOENIX RETRIEVAL │ │ │ │ │ │ (In-Network Posts) │ │ (Out-of-Network Posts) │ │ │ │ │ │ │ │ │ │ │ │ │ │ Posts from accounts │ │ ML-based similarity search │ │ │ │ │ │ you follow │ │ across global corpus │ │ │ │ │ └─────────────────────────────┘ └────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ HYDRATION │ │ │ │ Fetch additional data: core post metadata, author info, media entities, etc. │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ FILTERING │ │ │ │ Remove: duplicates, old posts, self-posts, blocked authors, muted keywords, etc. │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ SCORING │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ Phoenix Scorer │ Grok-based Transformer predicts: │ │ │ │ │ (ML Predictions) │ P(like), P(reply), P(repost), P(click)... │ │ │ │ └──────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ Weighted Scorer │ Weighted Score = Σ (weight × P(action)) │ │ │ │ │ (Combine predictions) │ │ │ │ │ └──────────────────────────┘ │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ ┌──────────────────────────┐ │ │ │ │ │ Author Diversity │ Attenuate repeated author scores │ │ │ │ │ Scorer │ to ensure feed diversity │ │ │ │ └──────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ SELECTION │ │ │ │ Sort by final score, select top K candidates │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────────────────────────────────┐ │ │ │ FILTERING (Post-Selection) │ │ │ │ Visibility filtering (deleted/spam/violence/gore etc) │ │ │ └─────────────────────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────────────────────────────────────┐ │ RANKED FEED RESPONSE │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ Compoñentes Home Mixer Location: home-mixer/ A capa de orquestración que reúne o For You feed. marco coas seguintes etapas: CandidatePipeline Stage Description Query Hydrators Fetch user context (engagement history, following list) Sources Retrieve candidates from Thunder and Phoenix Hydrators Enrich candidates with additional data Filters Remove ineligible candidates Scorers Predict engagement and compute final scores Selector Sort by score and select top K Post-Selection Filters Final visibility and dedup checks Side Effects Cache request info for future use Queremos unha hidratación Fetch contexto de usuario (historial de compromiso, lista de seguimento) Fontes Descargar cancións de Thunder e Phoenix Hidráulicos Enriquecer os candidatos con datos adicionais Filtro Eliminar candidatos non elixibles Escoróns Predicir o compromiso e calcular as puntuacións finais Seleccións Ordenar por puntuación e seleccionar o top K Filtros de post-selección Visibilidade final e comprobacións de dedup Efectos secundarios Cache de solicitude de información para uso futuro O servidor expón un punto final gRPC ( ) que devolve publicacións clasificadas para un determinado usuario. ScoredPostsService Tremendo Location: thunder/ Unha tenda de correo en memoria e un tubo de inxestión en tempo real que rastrexa as mensaxes recentes de todos os usuarios. Consumes post crear / borrar eventos de Kafka Mantén almacéns por usuario para publicacións orixinais, respostas/repostas e publicacións de vídeo Servir candidatos de correo "en rede" a partir de contas que segue o usuario solicitante Retirar automaticamente publicacións máis antigas que o período de retención Thunder permite buscas submilisegundas de contido na rede sen bater nunha base de datos externa. Phoenix Location: phoenix/ O compoñente ML con dúas funcións principais: Retrieval (modelo de dúas torres) Atopar publicacións relevantes fóra de rede: User Tower: codifica as características do usuario e o historial de compromiso nunha incorporación Candidate Tower: Codifica todas as publicacións en embeddings Busca de semellanzas: recibe publicacións de top-K a través de semellanzas de produtos Transformador con illamento de candidato (Transformer with candidate isolation) Prevén as probabilidades de participación para cada candidato: Toma o contexto do usuario (historial de compromiso) e as publicacións de candidatos como entrada Utiliza unha mascarada de atención especial para que os candidatos non se atopen entre si Outputs probabilidades para cada tipo de acción (como, resposta, repost, clic, etc.) que Documentación arquitectónica detallada. phoenix/README.md Candidato á Pipeline Location: candidate-pipeline/ Un marco reutilizable para a construción de gasodutos de recomendación. Define características para: Trait Purpose Source Fetch candidates from a data source Hydrator Enrich candidates with additional features Filter Remove candidates that shouldn't be shown Scorer Compute scores for ranking Selector Sort and select top candidates SideEffect Run async side effects (caching, logging) Source Buscar candidatos a partir dunha fonte de datos Hydrator Enriquecer os candidatos con características adicionais Filter Eliminar os candidatos que non deberían aparecer Scorer Cálculo de puntuacións para o ranking Selector Seleccionar e seleccionar os mellores candidatos SideEffect Executar efectos secundarios asínc (cache, rexistro) O marco executa fontes e hidratantes en paralelo onde sexa posible, con manexo e rexistro de erros configurables. como funciona Etapas do gasoduto Query Hydration: recolle o historial e os metadatos dos últimos compromisos do usuario (por exemplo, a seguinte lista) : Retrieve candidates from: Candidate Sourcing : Recent posts from followed accounts (in-network) Thunder : ML-discovered posts from the global corpus (out-of-network) Phoenix Retrieval : Enrich candidates with: Candidate Hydration Core post data (text, media, etc.) Author information (username, verification status) Video duration (for video posts) Subscription status : Remove posts that are: Pre-Scoring Filters Duplicates Too old From the viewer themselves From blocked/muted accounts Containing muted keywords Previously seen or recently served Ineligible subscription content : Apply multiple scorers sequentially: Scoring : Get ML predictions from the Phoenix transformer model Phoenix Scorer : Combine predictions into a final relevance score Weighted Scorer : Attenuate repeated author scores for diversity Author Diversity Scorer : Adjust scores for out-of-network content OON Scorer Selección: Ordenar por puntuación e seleccionar os mellores candidatos K Procesamento post-selección: validación final dos postos a ser atendidos Clasificación e Ranking O modelo de transformador baseado en Phoenix Grok predí as probabilidades para varios tipos de compromiso: Predictions: ├── P(favorite) ├── P(reply) ├── P(repost) ├── P(quote) ├── P(click) ├── P(profile_click) ├── P(video_view) ├── P(photo_expand) ├── P(share) ├── P(dwell) ├── P(follow_author) ├── P(not_interested) ├── P(block_author) ├── P(mute_author) └── P(report) A súa Combina estes puntos nun resultado final: Weighted Scorer Final Score = Σ (weight_i × P(action_i)) As accións positivas (como repost, share) teñen pesos positivos.As accións negativas (block, mute, report) teñen pesos negativos, empuxando o contido que o usuario probablemente non lle gustaría. Filtracións Os filtros funcionan en dúas fases: Pre-Scoring Filters: Filter Purpose DropDuplicatesFilter Remove duplicate post IDs CoreDataHydrationFilter Remove posts that failed to hydrate core metadata AgeFilter Remove posts older than threshold SelfpostFilter Remove user's own posts RepostDeduplicationFilter Dedupe reposts of same content IneligibleSubscriptionFilter Remove paywalled content user can't access PreviouslySeenPostsFilter Remove posts user has already seen PreviouslyServedPostsFilter Remove posts already served in session MutedKeywordFilter Remove posts with user's muted keywords AuthorSocialgraphFilter Remove posts from blocked/muted authors DropDuplicatesFilter Eliminar duplicados de ID de correo CoreDataHydrationFilter Eliminar publicacións que non puideron hidratar os metadatos do núcleo AgeFilter Eliminar publicacións máis antigas que o limiar SelfpostFilter Eliminar as propias publicacións do usuario RepostDeduplicationFilter Reposts de igual contido IneligibleSubscriptionFilter Remove paywalled content Usuario non pode acceder PreviouslySeenPostsFilter Remove posts usuario xa viu PreviouslyServedPostsFilter Eliminar publicacións xa servidas en sesión MutedKeywordFilter Eliminar publicacións con palabras clave mutadas do usuario AuthorSocialgraphFilter Eliminar publicacións de autores bloqueados/mutados Post-Selection Filters: Filter Purpose VFFilter Remove posts that are deleted/spam/violence/gore etc. DedupConversationFilter Deduplicate multiple branches of the same conversation thread VFFilter Remove posts that are deleted/spam/violence/up etc. DedupConversationFilter Deduplicar varias ramas do mesmo fío de conversación Principais decisións de deseño 1. sen características de enxeñaría manual O sistema depende integramente do transformador baseado en Grok para aprender a relevancia das secuencias de participación do usuario. Non hai enxeñaría manual de recursos para a relevancia do contido. Isto reduce significativamente a complexidade nas nosas canles de datos e infraestruturas de servizo. Isolamento do candidato na clasificación Durante a inferencia do transformador, os candidatos non poden atenderse uns aos outros -só ao contexto do usuario. Isto asegura que a puntuación para unha publicación non depende de que outras publicacións están no lote, facendo as puntuacións consistentes e cacheables. Incorporación baseada en hash Tanto a recuperación como a clasificación usan múltiples funcións de hash para incorporar buscas Predición multi-acción En lugar de predicir unha única puntuación de "relevancia", o modelo predí as probabilidades de moitas accións. Arquitectura de gasodutos compostos A súa crate proporciona un marco flexible para a construción de oleodutos de recomendación con: candidate-pipeline Separación da execución e monitorización da condución da lóxica empresarial Execución paralela de etapas independentes e xestión de erros graciosa Fácil adición de novas fontes, hidratacións, filtros e marcadores Nota: A implementación do transformador é portada da versión de código aberto Grok-1 por xAI, adaptada para casos de uso de sistema de recomendación. Nota: A implementación do transformador é portada da versión de código aberto Grok-1 por xAI, adaptada para casos de uso de sistema de recomendación. Grok-1 lanzamento de código aberto Este proxecto está licenciado baixo a licenza Apache 2.0. Este proxecto está licenciado baixo a licenza Apache 2.0.