Mesa de contenidos Overview System Architecture Components Home Mixer Thunder Phoenix Candidate Pipeline How It Works Pipeline Stages Scoring and Ranking Filtering Key Design Decisions Vista general El algoritmo de For You feed recupera, clasifica y filtra los mensajes de dos fuentes: In-Network (Thunder): Publicaciones de cuentas que sigues Out-of-Network (Phoenix Retrieval): Posts descubiertos de un corpus global Ambas fuentes se combinan y se clasifican juntas utilizando , un modelo de transformador basado en Grok que predice probabilidades de compromiso para cada post. La puntuación final es una combinación ponderada de estos compromisos predecibles. Phoenix El transformador basado en Grok hace todo el levantamiento pesado comprendiendo su historial de compromiso (lo que le gustó, respondió, compartió, etc.) y usando eso para determinar qué contenido es relevante para usted. 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 │ └─────────────────────────────────────────────────────────────────────────────────────────────┘ Componentes Home Mixer Location: home-mixer/ La capa de orquestación que reúne el For You feed. marco con las siguientes 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 hidratantes Fetch contexto de usuario (historial de compromiso, lista de seguimiento) fuentes Los candidatos de Thunder y Phoenix Hidráulicos Enriquecer a los candidatos con datos adicionales Los filtros Eliminar candidatos no elegibles Los Scorers Predecir el compromiso y calcular las puntuaciones finales Selector Ordenar por puntuación y seleccionar el top K Filtros de post-selección Visibilidad final y controles de dedup Efectos secundarios Cache solicitud de información para el uso futuro El servidor expone un punto final gRPC ( ) que devuelve publicaciones clasificadas para un usuario dado. ScoredPostsService El Thunder Location: thunder/ Una tienda de correo en memoria y un tubo de ingestión en tiempo real que rastrea los mensajes recientes de todos los usuarios. Consume post crear/eliminar eventos de Kafka Mantenimiento de almacenes por usuario para publicaciones originales, respuestas / repostas y publicaciones de vídeo Sirve a los candidatos de correo "en la red" de las cuentas que sigue el usuario solicitante Retira automáticamente los mensajes más antiguos que el período de retención Thunder permite búsquedas submilisegundas de contenido en la red sin tocar una base de datos externa. Phoenix Location: phoenix/ El componente ML con dos funciones principales: Retrieval (Modelo de dos torres) Encuentra publicaciones relevantes fuera de la red: User Tower: codifica las características de los usuarios y el historial de vínculos en una incorporación Candidate Tower: codifica todas las publicaciones en embeddings Búsqueda de similitudes: Obtiene los mensajes de top-K a través de la similitud del producto Transformador con aislamiento de candidato (Transformer with Candidate Isolation) Predice las probabilidades de participación para cada candidato: Toma el contexto del usuario (historial de compromiso) y las publicaciones de candidatos como entrada Utiliza máscaras de atención especial para que los candidatos no puedan asistir unos a otros La salida de probabilidades para cada tipo de acción (como, respuesta, repost, clic, etc.) este Documentación detallada de la arquitectura. phoenix/README.md Candidatos a la Pipeline Location: candidate-pipeline/ Un marco reutilizable para la construcción de tuberías 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 desde una fuente de datos Hydrator Enriquecer a los candidatos con características adicionales Filter Eliminar los candidatos que no deberían mostrarse Scorer Cálculo de puntuaciones para el ranking Selector Seleccionar y clasificar a los principales candidatos SideEffect Ejercer efectos secundarios asíncronos (cache, logging) El marco ejecuta fuentes y hidratantes en paralelo donde sea posible, con manejo de errores configurables y registro. Cómo funciona Etapas del gasoducto Query Hydration: recupera el historial y los metadatos de los compromisos recientes del usuario (por ejemplo, la siguiente 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 y seleccionar a los mejores candidatos K Procesamiento post-selección: validación final de los candidatos a ser atendidos Clasificación y Ranking El modelo de transformador basado en Phoenix Grok predice 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) El Combina estos puntos en un resultado final: Weighted Scorer Final Score = Σ (weight_i × P(action_i)) Las acciones positivas (como, repost, share) tienen pesos positivos.Las acciones negativas (block, mute, report) tienen pesos negativos, empujando hacia abajo el contenido que el usuario probablemente no le gustaría. Filtración Los filtros funcionan en dos etapas: 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 publicaciones que no pudieron hidratar metadatos de núcleo AgeFilter Eliminar mensajes mayores que el umbral SelfpostFilter Eliminar los propios mensajes de los usuarios RepostDeduplicationFilter Reposts del mismo contenido IneligibleSubscriptionFilter Eliminar contenido de paywall no puede ser accedido por el usuario PreviouslySeenPostsFilter Eliminar mensajes Usuario ya ha visto PreviouslyServedPostsFilter Eliminar mensajes que ya han sido enviados en sesión MutedKeywordFilter Eliminar los mensajes con las palabras clave mutadas del usuario AuthorSocialgraphFilter Eliminar publicaciones 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 Eliminar los mensajes que están borrados / spam / violencia / arriba, etc. DedupConversationFilter Deduplicar múltiples ramas del mismo hilo de conversación Decisiones clave de diseño No hay características de ingeniería manual El sistema depende totalmente del transformador basado en Grok para aprender la relevancia de las secuencias de participación del usuario. No hay ingeniería manual de características para la relevancia del contenido. Esto reduce significativamente la complejidad en nuestras rutas de datos y infraestructura de servicio. Aislamiento de candidatos en el ranking Durante la inferencia de transformadores, los candidatos no pueden atenderse los unos a los otros —sólo al contexto del usuario. Esto asegura que la puntuación de una publicación no depende de qué otras publicaciones están en el lote, haciendo que las puntuaciones sean consistentes y cacheables. Incorporaciones basadas en hash Tanto la búsqueda como el ranking utilizan múltiples funciones de hash para incorporar la búsqueda Predicción de acción múltiple En lugar de predecir una única puntuación de "relevancia", el modelo predice las probabilidades de muchas acciones. Arquitectura de Pipeline Composable El crate proporciona un marco flexible para la construcción de tuberías de recomendación con: candidate-pipeline Separación de la ejecución y monitoreo de la pipeline de la lógica empresarial Ejecución paralela de etapas independientes y manejo gracioso de errores Fácil adición de nuevas fuentes, hidrataciones, filtros y marcadores Nota: La implementación del transformador es portada de la versión de código abierto Grok-1 por xAI, adaptada para casos de uso de sistema de recomendación. La implementación del transformador se lleva a cabo desde la por xAI, adaptado para casos de uso de sistema de recomendación. Note: Grok-1 open source release Grok-1 lanzamiento de código abierto Este proyecto está licenciado bajo la Licencia Apache 2.0. Este proyecto está autorizado bajo la . Licencia Apache 2.0