← Todos los articulos

Pipeline de Puntuación de Señales: Triaje Determinístico de Conocimiento

La mayoría de la gestión del conocimiento se basa en intuición. Guarda una nota porque “parece importante.” Seis meses después tiene 7.000 notas y ninguna idea de cuáles importan. Construí un pipeline de puntuación determinístico que me lo indica.

El sistema tiene 733 líneas de Python. Puntúa cada señal entrante en cuatro dimensiones ponderadas, calcula una puntuación compuesta y enruta la señal a una de 12 carpetas de dominio, una bandeja de entrada para revisión manual, o al vacío. Sin etiquetado manual. Sin “revisar después” que nunca ocurre. El algoritmo decide.

TL;DR

Una puntuación compuesta ponderada (relevancia 35%, accionabilidad 30%, profundidad 20%, autoridad 15%) produce una calificación de 0,0 a 1,0 para cada señal. El enrutamiento usa tres umbrales: >= 0,55 escribe automáticamente en una carpeta de dominio, >= 0,30 pone en cola para revisión manual, < 0,30 omite silenciosamente. Más de 7.700 notas procesadas en 14 meses, con Development (2.837) y Design (1.709) dominando la distribución. La falla más interesante: la dimensión de profundidad mide la riqueza de metadatos, no la calidad del contenido, por lo que un tweet bien etiquetado sobre una foto de flores obtiene 0,85.


El problema con la intuición

Uso Obsidian como base de conocimiento. Las señales llegan desde feeds RSS, marcadores de Twitter, estrellas de GitHub, newsletters y captura manual. Antes del pipeline, cada señal iba a una única carpeta de bandeja de entrada. Una bandeja de más de 400 notas sin procesar se acumuló en dos meses.

El consejo estándar (“revise semanalmente, etiquete sobre la marcha, use un sistema de carpetas”) asume que la revisión ocurre. No ocurre. Las bandejas de entrada se vuelven de solo escritura: los elementos entran pero nunca salen. El conocimiento que capturó es funcionalmente idéntico al conocimiento que nunca capturó. Clay Shirky enmarcó el problema con precisión: “No es sobrecarga de información. Es un fallo de filtrado.”8

Necesitaba un sistema que pudiera evaluar más de 7.700 notas más rápido de lo que puedo leerlas, usando criterios que defino una vez y aplico uniformemente. No un motor de recomendaciones. Un algoritmo de puntuación.


La puntuación compuesta

La fórmula de puntuación es una combinación lineal ponderada de cuatro dimensiones, un enfoque estándar en el análisis de decisión multicriterio (MCDA):9

composite = (
    relevance     * 0.35 +
    actionability * 0.30 +
    depth         * 0.20 +
    authority     * 0.15
)

Cada dimensión produce un valor flotante entre 0,0 y 1,0. La fórmula redondea el compuesto a tres decimales. Los pesos reflejan un orden de prioridad deliberado: lo que me importa (relevancia) supera a lo que puedo usar (accionabilidad), que supera a qué tan ricos son los metadatos (profundidad), que supera a qué tan confiable es la fuente (autoridad).1


Las cuatro dimensiones

Relevancia (35%): Coincidencia de intereses

La relevancia usa un diccionario de palabras clave curado manualmente con más de 40 entradas, cada una puntuada desde 0,15 (nft) hasta 1,0 (claude code, swiftui). La puntuación combina la mejor coincidencia con el promedio de todas las coincidencias:

# 60% best match, 40% average of all matches
return min(1.0, best_score * 0.6 + avg_score * 0.4)

Los elementos sin coincidencias obtienen una línea base de 0,25, no 0,0. El sistema penaliza un tema desconocido menos severamente que uno irrelevante. La línea base es el parámetro que se ajusta con más frecuencia: demasiado alta y el contenido irrelevante inunda la bandeja de entrada, demasiado baja y los intereses genuinamente nuevos se filtran antes de que pueda verlos.2

Accionabilidad (30%): Potencial de aprendizaje

La accionabilidad busca coincidencias contra 22 palabras clave orientadas a la acción: tutorial, guide, how-to, build, github.com. Las URL reciben tratamiento especial:

if "github.com" in url:
    hits += 2  # Repositories are inherently actionable
if "/docs" in url or "/tutorial" in url:
    hits += 1

La puntuación se basa en funciones escalonadas, no lineales: 0 coincidencias → 0,10, 1 coincidencia → 0,40, 2 coincidencias → 0,60, 3+ coincidencias → min(1.0, 0.70 + hits * 0.05). La función escalonada recompensa la presencia de señales de accionabilidad más que su cantidad. Un enlace a un tutorial vale más que la diferencia entre tres y cuatro palabras clave.3

Profundidad (20%): Riqueza de metadatos

La profundidad es puramente estructural. Mide la presencia y longitud de los campos, no la calidad del contenido:

Señal Puntuación
Tiene título +0,20
Tiene descripción +0,20
Descripción > 50 caracteres +0,15
Descripción > 150 caracteres +0,15
Tiene alguna etiqueta +0,15
Tiene 3+ etiquetas +0,10
Tiene URL +0,05
Máximo 1,00

La profundidad es la dimensión en la que menos confío. Un tweet sobre una foto de flores con una descripción completa y cuatro etiquetas obtiene profundidad 0,85. Metadatos ricos, contenido irrelevante. La profundidad es un indicador de que “la fuente proporcionó datos estructurados,” lo cual se correlaciona con la calidad pero no la garantiza.4

Autoridad (15%): Credibilidad de la fuente

La autoridad comienza con una línea base de 0,40 y se ajusta según el tipo de fuente:

if source in ("twitter", "x"):        score = 0.50
elif source in ("blog", "newsletter"): score = 0.60
elif source in ("github", "docs"):     score = 0.70

Una lista de dominios permitidos sobrescribe hacia arriba (nunca hacia abajo): github.com, anthropic.com, apple.com, arxiv.org, docs.python.org, y otros establecen la autoridad en al menos 0,75. La lista codifica un juicio de que estas fuentes merecen mayor confianza por defecto.


Enrutamiento por umbrales

Tres categorías de enrutamiento determinan lo que ocurre con cada señal puntuada:

THRESHOLD_AUTO_WRITE = 0.55   # → domain folder
THRESHOLD_INBOX      = 0.30   # → 00-Inbox (manual review)
# Below 0.30 → silently skipped

El pipeline escribe las señales con puntuación >= 0,55 directamente en una de 12 carpetas de dominio, inferidas a partir de la coincidencia de etiquetas y títulos. Las señales de rango medio (0,30-0,55) van a una bandeja de entrada para revisión manual. Cualquier cosa por debajo de 0,30 nunca llega al vault.

El rango 0,30-0,55 es la “zona ambigua” donde el sistema tiene menor confianza. Un flag opcional --llm-triage envía estas señales a Claude para evaluación, que puede ajustar la puntuación compuesta hasta ±0,20, potencialmente moviendo una señal por encima del umbral de escritura automática. Claude solo ve señales ambiguas, nunca las de puntuación alta o baja. Gastar tokens de API en señales que el evaluador determinístico ya resolvió sería un desperdicio.5

La inferencia de dominio usa un sistema de votación. Cada etiqueta se mapea a un dominio, cada palabra clave en el título agrega un voto. El dominio con más votos gana. Los empates se resuelven por orden del diccionario (efectivamente arbitrario). Dominio por defecto: “Inspiration.”


Los resultados

Después de más de 7.700 notas procesadas en 14 meses:

Dominio Notas % del total
Development 2.837 36,8%
Design 1.709 22,2%
Inspiration 565 7,3%
Claude-Code 414 5,4%
AI-Tools 414 5,4%
Productivity 346 4,5%
Ideas 296 3,8%
Science 231 3,0%
Health-Life 191 2,5%
Architecture 142 1,8%
Startups 26 0,3%
Tools 22 0,3%
Inbox 420 5,5%

La distribución refleja la realidad. Consumo más contenido de desarrollo y diseño que cualquier otra cosa. Los elementos de la bandeja de entrada (420) representan la zona ambigua: señales que el algoritmo no pudo enrutar automáticamente con confianza.6


Lo que el algoritmo hizo mal

La trampa de la profundidad

Un tweet de una foto de nemophila obtuvo composite 0.36, relevance 0.25, actionability 0.10, depth 0.85, authority 0.50. Se enrutó a la bandeja de entrada porque la profundidad (0,85) y la autoridad (0,50) compensaron una relevancia y accionabilidad cercanas a cero. Metadatos ricos, contenido irrelevante: una foto bonita de flores.

El ejemplo ilustra la limitación fundamental de la puntuación por indicadores de metadatos. La profundidad mide “la fuente proporcionó datos estructurados,” no “el contenido es valioso.” Twitter proporciona descripciones completas y etiquetas para cada tweet. Un tweet bien etiquetado sobre el desayuno obtiene profundidad 0,85. La investigación en recuperación de información llama a la tensión subyacente el trade-off de precisión/exhaustividad: optimizar para exhaustividad (capturar todo lo relevante) inevitablemente admite falsos positivos.10

La corrección que consideré y rechacé: Reducir el peso de profundidad de 0,20 a 0,10 reduciría los falsos positivos del contenido irrelevante bien etiquetado, pero también penalizaría el contenido genuinamente profundo de fuentes con metadatos escasos. El peso actual es un compromiso.

El problema de la línea base de relevancia

Una línea base de 0,25 para relevancia sin coincidencias significa que cualquier señal bien estructurada de una fuente razonable puntúa al menos 0,30 y llega a la bandeja de entrada. La línea base crea un piso de falsos positivos: la bandeja acumula señales que están bien etiquetadas y provienen de fuentes razonables pero no tienen nada que ver con mis intereses.

La corrección real: La revisión periódica de la bandeja de entrada sigue siendo necesaria. El pipeline reduce la superficie de revisión de 7.700 elementos a 420 (una reducción de ~95%), pero no puede eliminar la revisión manual para la zona ambigua.


Notas de implementación

El pipeline se ejecuta como una herramienta CLI. La entrada es un arreglo JSON de señales (desde RSS, API de Twitter, o entrada manual). La salida son archivos markdown compatibles con Obsidian escritos en carpetas de dominio.

python triage.py --input signals.json --vault ~/obsidian-signals/
python triage.py --input signals.json --vault ~/obsidian-signals/ --llm-triage
python triage.py --input signals.json --min-score 0.60  # Stricter routing

El prefiltrado se ejecuta antes de la puntuación: deduplicación de URL contra las notas existentes del vault, filtrado de contenido vacío y una lista de bloqueo de fuentes de ruido. Las notas duplicadas y las fuentes de spam nunca llegan a la etapa de puntuación.

Las funciones de puntuación son puras: sin efectos secundarios, sin llamadas a API, sin acceso al sistema de archivos. Cada función recibe un diccionario de señal y devuelve un diccionario de puntuaciones. El enfoque puro las hace verificables de forma aislada y componibles con la etapa de triaje por LLM, que solo se ejecuta en el subconjunto ambiguo.7


Conclusiones clave

Para ingenieros que construyen sistemas de triaje:

  • La puntuación determinística supera la curación manual a escala. 7.700 notas en 14 meses. El triaje manual habría requerido más de 50 horas de revisión. El pipeline las procesó en minutos con una tasa de enrutamiento de ~95% (solo el 5,5% requirió revisión manual).

  • Los indicadores de metadatos tienen modos de fallo conocidos. La profundidad mide estructura, no calidad. La autoridad mide la fuente, no la precisión. Ambos indicadores funcionan a escala agregada pero producen falsos positivos predecibles a nivel de señal individual. Reconocer los modos de fallo es más honesto que afirmar que el algoritmo “funciona.”

Para profesionales de la gestión del conocimiento:

  • Las puntuaciones compuestas ponderadas exponen sus prioridades reales. Pesos de 35/30/20/15 no son arbitrarios. Codifican un juicio específico: la relevancia importa más que la accionabilidad, que importa más que la riqueza de metadatos, que importa más que la credibilidad de la fuente. Hacer los pesos explícitos y ajustables es la diferencia entre un sistema y un hábito.

  • La zona ambigua es irreducible. Las señales entre 0,30 y 0,55 son genuinamente ambiguas: el evaluador determinístico no puede resolverlas. El triaje por LLM ayuda pero no elimina la zona. La revisión manual del subconjunto ambiguo sigue siendo necesaria.


Enmarqué esta publicación como un problema de ingeniería, no como un consejo de productividad. La puntuación compuesta se aplica a cualquier dominio donde los elementos necesiten enrutamiento determinístico: tickets de soporte, moderación de contenido, calificación de leads, detección de anomalías. Mis pesos y umbrales específicos codifican prioridades personales, pero la arquitectura es general. Para más información sobre cómo el conocimiento acumulado crea valor no lineal, consulte Interés Compuesto Mental. OODA Loop para Ingeniería de Prompts explora un patrón relacionado: la observación estructurada como alternativa a la intuición. Cada componente del pipeline (puntuación, enrutamiento, triaje) es independientemente útil y se potencia con los demás, siguiendo el patrón de ingeniería compuesta.



  1. No derivé la distribución de pesos matemáticamente. La ajusté durante seis meses de uso. Los pesos iniciales eran iguales (25/25/25/25). La relevancia aumentó a 35% después de observar que las señales de alta profundidad y baja relevancia (contenido irrelevante bien etiquetado) inundaban la bandeja de entrada. La accionabilidad aumentó a 30% después de observar que el contenido teórico con alta relevancia pero sin aplicación práctica se acumulaba sin uso. 

  2. La línea base de 0,25 para relevancia sin coincidencias es una decisión de diseño deliberada. Establecerla en 0,0 significaría que cualquier señal fuera de la lista curada de palabras clave puntúa máximo 0,65 (0 + acción + profundidad + autoridad sin contribución de relevancia), haciendo casi imposible que temas genuinamente nuevos alcancen el umbral de escritura automática. 

  3. Elegí la puntuación por función escalonada para la accionabilidad en lugar de la puntuación lineal porque la accionabilidad se acerca más a un booleano que a una variable continua. Un tutorial es accionable. Un artículo de noticias sobre un tutorial no lo es. La función escalonada captura esta naturaleza binaria mejor que un gradiente. 

  4. Originalmente nombré la dimensión de profundidad “calidad” y pretendía que midiera la riqueza del contenido. Después de observar que medía la riqueza de metadatos en su lugar, la renombré a “profundidad” para reflejar su comportamiento real. El cambio de nombre es honestidad deliberada sobre lo que la métrica captura. 

  5. El triaje por LLM usa Claude Code CLI (claude --print --model opus) con un prompt estructurado que solicita un ajuste de puntuación (-0,20 a +0,20) y una clasificación de dominio. Estimación de costo del autor: aproximadamente $0,02-0,04 por señal. Ejecutar el triaje por LLM en las 7.700 señales costaría $150-300. Ejecutarlo solo en las 420 señales ambiguas cuesta $8-17. 

  6. Datos de distribución por dominio del autor a febrero de 2026. Los conteos reflejan el enrutamiento acumulativo desde diciembre de 2024. La distribución ha sido estable desde el tercer mes, con Development y Design representando consistentemente el 55-60% de las señales enrutadas. 

  7. Elegí funciones de puntuación puras como una decisión arquitectónica deliberada. La alternativa (funciones de puntuación que verifican el sistema de archivos para duplicados o llaman a APIs para enriquecimiento) habría sido más precisa pero imposible de verificar sin mocking. El enfoque puro sacrifica algo de precisión por verificabilidad y componibilidad. 

  8. Clay Shirky, “It’s Not Information Overload. It’s Filter Failure,” Web 2.0 Expo keynote, 2008. youtube.com/watch?v=LabqeJEOQyI. El encuadre de Shirky se aplica directamente: una bandeja de entrada con más de 400 notas sin procesar no es una sobrecarga de información sino una ausencia de filtrado. Véase también Alvin Toffler, Future Shock, Random House, 1970, que acuñó “sobrecarga de información” como la dificultad de tomar decisiones cuando se está expuesto a demasiada información. 

  9. Las combinaciones lineales ponderadas son una técnica estándar en el análisis de decisión multicriterio (MCDA). El enfoque aquí es un Modelo de Suma Ponderada (WSM) simplificado, uno de los métodos MCDA más antiguos. Para el tratamiento canónico de la derivación de pesos para puntuación compuesta, véase Saaty, T.L., The Analytic Hierarchy Process, McGraw-Hill, 1980. Para el modelo aditivo más simple usado aquí, véase Fishburn, P.C., “Additive Utilities with Incomplete Product Set,” Journal of Mathematical Psychology, 4(1), pp. 104-110, 1967. 

  10. El trade-off de precisión/exhaustividad es un concepto fundamental en la recuperación de información. Aumentar la exhaustividad (capturar más elementos relevantes) necesariamente admite más elementos irrelevantes, reduciendo la precisión. La dimensión de profundidad optimiza para exhaustividad al recompensar cualquier señal bien estructurada, razón por la cual el contenido irrelevante pero bien etiquetado pasa el umbral. Véase Manning, C.D., Raghavan, P., & Schütze, H., Introduction to Information Retrieval, Cambridge University Press, 2008, Capítulo 8. nlp.stanford.edu/IR-book/