Taula de continguts Overview System Architecture Components Home Mixer Thunder Phoenix Candidate Pipeline How It Works Pipeline Stages Scoring and Ranking Filtering Key Design Decisions Visió general L'algorisme de l'alimentació per a tu recupera, classifica i filtra els missatges de dues fonts: In-Network (Thunder): Publicacions dels comptes que seguiu Out-of-Network (Phoenix Retrieval): Posts descoberts des d’un corpus global Ambdues fonts es combinen i classifiquen junts utilitzant , un model de transformador basat en Grok que prediu les probabilitats d'engagement per a cada post. La puntuació final és una combinació ponderada d'aquests compromisos predits. Phoenix El transformador basat en Grok fa tot el pesat aixecament entenent el vostre historial de compromís (el que us va agradar, va respondre, va compartir, etc.) i utilitzant això per determinar quin contingut és rellevant per a vostè. Arquitectura del 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 │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ Components Home Màrqueting Location: home-mixer/ La capa d'orquestració que reuneix el For You feed. Construcció amb les següents etapes: 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 Necessitat d'hidratadors Fetch context de l'usuari (historial de compromís, següent llista) Fonts Recull de candidats de Thunder i Phoenix Hidràulics Enriquir els candidats amb dades addicionals Filtres Eliminar els candidats no elegibles Escorxadors Predir el compromís i calcular les puntuacions finals Selecció Ordenar per puntuació i seleccionar el top K Filtres de post-selecció Visibilitat final i controls de dedup Efectes secundaris Cache de sol·licitud d'informació per a ús futur El servidor exposa un punt d'extracció gRPC ( ) que retorna missatges classificats per a un usuari donat. ScoredPostsService Thunder Location: thunder/ Una botiga de correus en memòria i un tub d'ingestió en temps real que rastreja els missatges recents de tots els usuaris. Consumeix creació/eliminació d'esdeveniments de Kafka Manteniment d'emmagatzematge per usuari per a missatges originals, respostes/reposts i missatges de vídeo Serveix candidats de correu "en xarxa" dels comptes que segueix l'usuari sol·licitant Tria automàticament els missatges més antics que el període de retenció Thunder permet cerques submillisegonals de contingut en xarxa sense tocar una base de dades externa. Phoenix Location: phoenix/ El component ML amb dues funcions principals: Retrieval (Model de dues torres) Troba els posts rellevants fora de la xarxa: Torre d'usuari: codifica les característiques de l'usuari i l'historial d'activitats en una incorporació Candidate Tower: codifica totes les entrades en embeddings Cerca de similitud: Troba els missatges de top-K a través de la similitud del producte Classificació (transformador amb aïllament candidat) Previsió de les probabilitats de participació per a cada candidat: Pren el context de l'usuari (historial de compromís) i els posts de candidats com a entrada Utilitza una màscara d'atenció especial perquè els candidats no puguin assistir els uns als altres Sortida de probabilitats per a cada tipus d'acció (com, resposta, repost, clic, etc.) Això Documentació arquitectònica detallada. phoenix/README.md Candidat a la canonada Location: candidate-pipeline/ Un marc reutilitzable per a la construcció de canonades de recomanació. 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 Recuperar candidats des d'una font de dades Hydrator Enriquir els candidats amb característiques addicionals Filter Eliminar els candidats que no haurien de ser mostrats Scorer Calcula les puntuacions per al rànquing Selector Classificació i selecció de candidats principals SideEffect Executar efectes secundaris assínctics (caixatge, logging) El marc executa fonts i hidrats en paral·lel on sigui possible, amb el maneig i el registre d'errors configurables. Com funciona Etapes del gasoducte Hidratació de consulta: recupera l'historial i les metadades dels compromisos recents de l'usuari (per exemple, la següent llista) : 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ó: Ordenar per puntuació i seleccionar els millors candidats K Processament post-selecció: validació final dels candidats a ser servits Classificació i Ranking El model de transformador basat en Phoenix Grok prediu probabilitats per a múltiples tipus d'engany: 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) El Combineu-les en un resultat final: Weighted Scorer Final Score = Σ (weight_i × P(action_i)) Les accions positives (com, repost, compartir) tenen pesos positius.Les accions negatives (block, mute, report) tenen pesos negatius, empènyer el contingut que l'usuari probablement no agradaria. Filtració Els filtres funcionen en dues etapes: 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 duplicats d'ID de correu CoreDataHydrationFilter Eliminar els missatges que no han hidrat les metadades del nucli AgeFilter Eliminar missatges més antics que el llindar SelfpostFilter Eliminar els propis missatges de l'usuari RepostDeduplicationFilter Reposts del mateix contingut IneligibleSubscriptionFilter Eliminar el contingut de paywall no pot accedir a l'usuari PreviouslySeenPostsFilter Eliminar missatges l'usuari ja ha vist PreviouslyServedPostsFilter Eliminar missatges ja servits en sessió MutedKeywordFilter Eliminar missatges amb paraules clau mutes de l'usuari AuthorSocialgraphFilter Eliminar missatges d'autors bloquejats/mutats 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/gore etc. DedupConversationFilter Deduplicació de múltiples branques del mateix fil de conversa Decisions clau de disseny No hi ha característiques d'enginyeria manual El sistema depèn totalment del transformador basat en Grok per aprendre la rellevància de les seqüències d'interacció de l'usuari. No hi ha enginyeria manual de característiques per a la rellevància del contingut. Això redueix significativament la complexitat en les nostres canonades de dades i la infraestructura de servei. Candidat aïllat en el rànquing Durant la inferència de transformadors, els candidats no poden atendre els uns als altres, només al context de l'usuari. Això garanteix que la puntuació d'un missatge no depengui de quins altres missatges estan en el lot, fent que les puntuacions siguin consistents i cacheables. Embeddings basats en hash Tant la recuperació com el rànquing utilitzen múltiples funcions de hash per incorporar la cerca Predicció multi-acció En lloc de preveure una única puntuació de "rellevància", el model preveu probabilitats per a moltes accions. Arquitectura de gasoducte compostable El crate proporciona un marc flexible per a la construcció de canonades de recomanació amb: candidate-pipeline Separació de l'execució i el monitoratge del pipeline de la lògica empresarial Execució paral·lela d'etapes independents i gestió gràfica d'errors Addició fàcil de noves fonts, hidratacions, filtres i escorcolls Nota: La implementació del transformador és portada de la versió de codi obert Grok-1 per xAI, adaptada per a casos d'ús del sistema de recomanació. Nota: La implementació del transformador és portada de la versió de codi obert Grok-1 per xAI, adaptada per a casos d'ús del sistema de recomanació. Grok-1 lliurament de codi obert Aquest projecte està subjecte a la llicència Apache 2.0. Aquest projecte està autoritzat sota la . Llicència Apache 2.0