Encontrar el equilibrio para un algoritmo de feed es difícil. Si optimizas por clics, terminas con clickbait. Si ordenas solo por fecha, las mejores discusiones desaparecen en horas.

El equipo de DEV Community lidiaba con este dilema hasta que encontraron una solución elegante: combinar señales comunitarias clásicas con Gemini Embeddings 2 de Google y pgvector en PostgreSQL.

“No necesitas un equipo de ML para tener un feed inteligente. Con PostgreSQL, pgvector y un modelo de embeddings, cualquier proyecto LATAM puede implementar esta arquitectura.”

1. Arquitectura flexible y auditable

En lugar de esparcir llamadas a la API por todo el código, construyeron wrappers alrededor de Ai::Base y Ai::Embedding:

Ai::Base.new(wrapper: self)

Cada llamada se registra automáticamente en AiAudit: modelo usado, latencia, tokens, payload. Esto hace que depurar costos sea trivial sin ensuciar la lógica de negocio.

Lección para LATAM: cuando integres APIs de IA, construí la capa de auditoría desde el día uno. No es un lujo — es lo que te permite escalar sin que los costos se disparen.

2. Feed personalizado con SQL + vectores

El feed de DEV usa FeedConfig, que compila SQL para rankear artículos. La novedad: ahora inyectan un interest_embedding directamente en la query:

(1 - (articles.semantic_embedding <=> :interest_embedding)) * :semantic_similarity_weight

La distancia coseno (<=>) se convierte en puntaje de similitud. Eso se mezcla con señales sociales y decaimiento temporal. El resultado: un post relevante sube, pero uno trending global también.

“La combinación de vectores semánticos + señales sociales es más accesible de lo que parece. Postgres con pgvector es open source y gratuito.”

3. ¿Qué es un embedding? (Versión rápida)

Convertís texto en una lista larga de números. Si dos artículos hablan de lo mismo, sus números son parecidos — aunque usen palabras distintas.

DEV migró a Gemini Embeddings 2: vectores de 3,072 dimensiones que aceptan texto, imágenes, audio y video en el mismo espacio vectorial. Hoy analizan posts. Mañana, podcasts y videos sin tocar la base de datos.

4. Detectando tendencias más allá de los tags

Un #ruby no distingue un “Hello World” de un debate sobre el nuevo parser. Para eso crearon TrendDetector:

  • Clustering con distancia coseno: si un post está a ≤0.15 de un cluster, se une
  • Etiquetado automático: cuando un cluster llega a 10+ artículos, Gemini API lo etiqueta
  • Cada 6 horas se ejecuta un Leader Clustering en Ruby puro

Código abierto: github.com/forem/forem

5. Comunidad primero

“Los embeddings amplifican lo que la comunidad ya hace. No reemplazan el criterio humano.”

La curación editorial y los votos de la comunidad siguen siendo la columna vertebral. Gemini Embeddings es la capa que hace que todo sea más inteligente — no la que toma el control.

¿Te gustaría implementar algo así en tu proyecto? En el Bootcamp de DojoFullStack enseñamos a construir sistemas con embeddings, PostgreSQL y APIs de IA desde cero. 🚀