Tabel van inhoud Overview System Architecture Components Home Mixer Thunder Phoenix Candidate Pipeline How It Works Pipeline Stages Scoring and Ranking Filtering Key Design Decisions Overzicht De For You feed-algoritme herhaalt, rangschikt en filtert berichten uit twee bronnen: In-Network (Thunder): berichten van accounts die je volgt Out-of-Network (Phoenix Retrieval): Posts ontdekt uit een wereldwijd corpus Beide bronnen worden gecombineerd en samen gerangschikt met behulp van , een Grok-gebaseerd transformatormodel dat de kansen voor betrokkenheid voor elke post voorspelt. Phoenix De Grok-gebaseerde transformator doet alle zware lifting door het begrijpen van uw engagement geschiedenis (wat je leuk vond, gereageerd, gedeeld, etc.) en gebruik dat om te bepalen welke inhoud relevant is voor u. Systeemarchitectuur ┌─────────────────────────────────────────────────────────────────────────────────────────────┐ │ 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 │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ Componenten Home Mixer Location: home-mixer/ De orchestratielaag die de For You feed assembleert. het kader met de volgende fasen: 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 Wilt u hydrateren Fetch gebruikerscontext (engagement geschiedenis, volgende lijst) bronnen Reacties op Thunder en Phoenix hydrateren Kandidaten verrijken met aanvullende gegevens Filters Onbevoegde kandidaten verwijderen Scorers Betrokkenheid voorspellen en eindpunten berekenen Selectie Sort per score en selecteer top K Post-selectie filters Definitieve zichtbaarheid en dedup controles Bijwerkingen Cache verzoek info voor toekomstig gebruik De server blootstelt een gRPC-endpoint ( ) die gerangschikt berichten voor een bepaalde gebruiker retourneert. ScoredPostsService Thunder Location: thunder/ Een in-memory postwinkel en real-time ingestie pijplijn die recente berichten van alle gebruikers volgt. Consumes post creëer/verwijder gebeurtenissen uit Kafka Behoudt opslagruimten per gebruiker voor originele berichten, antwoorden/reposts en video-berichten Bedient "in-network" postkandidaten van accounts die de verzoekende gebruiker volgt Automatisch verwijderen van berichten die ouder zijn dan de bewaartermijn Thunder maakt sub-milliseconde zoekopdrachten mogelijk voor in-netwerk-inhoud zonder een externe database te raken. Phoenix Location: phoenix/ De ML-component met twee hoofdfuncties: Retrieval (twee toren model) Zoek relevante posts buiten het netwerk: User Tower: codeert gebruikersfuncties en engagementgeschiedenis in een embedding Candidate Tower: codeert alle berichten in embeddings Soortgelijkheidsonderzoek: ontvangt top-K-berichten via productgelijkheid Transformers met kandidaatisolatie (Transformer with Candidate Isolation) Voorspelt de kans op betrokkenheid voor elke kandidaat: Neem gebruikerscontext (engagementgeschiedenis) en kandidaat-berichten als input Gebruik speciale aandacht maskeren zodat de kandidaten niet bij elkaar De uitgangswaarschijnlijkheden voor elk type actie (zoals reactie, repost, klik, enz.) Zie Voor gedetailleerde architecturale documentatie. phoenix/README.md kandidaat pijpleiding Location: candidate-pipeline/ Een herbruikbaar kader voor het bouwen van aanbevelingspijpleidingen. Definieert kenmerken voor: 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 Kandidaten ophalen vanuit een gegevensbron Hydrator Kandidaten verrijken met extra functies Filter Kandidaten verwijderen die niet moeten worden weergegeven Scorer Berekening van scores voor ranking Selector Sorteer en selecteer topkandidaten SideEffect Voer asynchrone bijwerkingen uit (cache, loggen) Het framework voert bronnen en hydratatoren waar mogelijk parallel uit, met configurerbare foutbehandeling en logging. Hoe het werkt Pipeline stappen Query Hydration: Verzamel de recente engagementgeschiedenis en metagegevens van de gebruiker (bijv. volgende lijst) : 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 Selectie: Sort per score en selecteer de top K kandidaten Post-selectie verwerking: definitieve validatie van postkandidaten te dienen Scoren en rangschikken Het Phoenix Grok-gebaseerde transformatormodel voorspelt waarschijnlijkheden voor meerdere betrokkenheidstypen: 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) De Combineer dit in een eindresultaat: Weighted Scorer Final Score = Σ (weight_i × P(action_i)) Positieve acties (zoals, repost, share) hebben positieve gewichten. negatieve acties (block, mute, report) hebben negatieve gewichten, waardoor inhoud die de gebruiker waarschijnlijk niet leuk zou vinden, wordt geduwd. Filteren Filters lopen in twee fasen: 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 Verwijder dubbele post-ID's CoreDataHydrationFilter Posts verwijderen die kernmetadata niet hydrateren AgeFilter Posts ouder dan de drempel verwijderen SelfpostFilter Gebruikers eigen berichten verwijderen RepostDeduplicationFilter Reposts van dezelfde inhoud IneligibleSubscriptionFilter Paywalled content verwijderen Gebruiker kan geen toegang krijgen PreviouslySeenPostsFilter Verwijder berichten gebruiker heeft al gezien PreviouslyServedPostsFilter Posts verwijderen die al in de sessie zijn gediend MutedKeywordFilter Verwijderen van berichten met gebruikersmute trefwoorden AuthorSocialgraphFilter Posts verwijderen van geblokkeerde / gemuteerde auteurs 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 Verwijder berichten die zijn verwijderd / spam / geweld / boven etc. DedupConversationFilter Dedupliceren van meerdere takken van dezelfde gespreksdraad Belangrijke ontwerpbeslissingen Geen hand-engineered functies Het systeem vertrouwt volledig op de Grok-gebaseerde transformator om relevantie te leren van user engagement-sequenties. geen handmatige functie-engineering voor content-relevantie. Kandidatenisolatie in de ranglijst Tijdens transformator inferentie, kunnen kandidaten niet afstemmen op elkaar - alleen op de gebruikerscontext. Dit zorgt ervoor dat de score voor een post niet afhankelijk is van welke andere berichten in de batch, waardoor de scores consistent en cacheerbaar. Hash-gebaseerde embeddings Zowel het zoeken als het rangschikken gebruiken meerdere hashfuncties voor het invoegen van zoekopdrachten Multi-actie voorspelling In plaats van een enkele "relevance" -score te voorspellen, voorspelt het model de kansen voor vele acties. Composable Pipeline Architectuur De crate biedt een flexibel kader voor het bouwen van aanbevelingspijpleidingen met: candidate-pipeline Afscheiding van pipeline-uitvoering en monitoring van bedrijfslogica Parallele uitvoering van onafhankelijke stappen en gracieuze foutbehandeling Gemakkelijke toevoeging van nieuwe bronnen, hydrataties, filters en scorers Opmerking: De transformerimplementatie is geport van de Grok-1 open source release door xAI, aangepast voor aanbevelingssysteemgebruiksgevallen. De transformator is afkomstig van de door xAI, aangepast voor aanbevelingssysteemgebruiksgevallen. Note: Grok-1 open source release Grok-1 open source vrijgegeven Dit project is gelicentieerd onder de Apache License 2.0. Dit project is gelicentieerd onder de Apache License 2.0.