Homelab Segundo Cerebro
Una capa de memoria compilada que responde preguntas de infraestructura en 2-5K tokens, con citas
Resumen
Contexto, enfoque y resultado.
Problema
Quería un modelo local, en mi propia GPU, que respondiera preguntas sobre mi propia infraestructura: qué depende de qué, por qué algo está configurado de cierta manera, qué cambió recientemente. La recuperación simple sobre mi documentación costaba entre 30,000 y 50,000 tokens por pregunta y no tenía noción de tiempo: una decisión escrita en junio y una observación de esta mañana regresaban con la misma autoridad.
Mi rol
Diseñé y construí todo solo, en aproximadamente ocho semanas, como 220 pull requests fusionados.
Restricciones
- Debe ejecutarse completamente local. Una GPU de consumo de 24GB que frecuentemente está ocupada con otros trabajos.
- Nunca debe convertirse en otra fuente de verdad. Git y las observaciones en tiempo real siguen siendo las fuentes autoritativas; cualquier cosa derivada debe poder eliminarse y reconstruirse.
- Debe ser honesto. Un asistente de operaciones que inventa información es peor que no tener asistente, porque no puedes distinguir una respuesta superficial de una incorrecta.
Arquitectura
Una capa compilada sobre fuentes autoritativas: un almacén temporal de hechos que cierra hechos en vez de sobrescribirlos, un grafo de relaciones (940 nodos, 1,449 aristas), cápsulas de resumen con sello de generación y un índice vectorial, todo ensamblado en un paquete de contexto limitado por tokens.
La recuperación es escalonada y se detiene temprano: exacta, luego léxica BM25, luego cápsula, luego grafo, luego semántica. Los conflictos se resuelven por precedencia fija: tiempo de ejecución sobre hecho sobre cápsula, y un artefacto derivado cuya generación va retrasada respecto a su fuente se marca como obsoleto para que la ruta de consulta regrese a la evidencia original.
Encima están las capas de análisis: decaimiento (qué decisiones documentadas ya no son ciertas), validación de corrección contra fuentes en vivo con una línea base comprometida y una puerta de regresión en CI, reconciliación de desviaciones entre estado declarado y observado, detección de puntos ciegos, razonamiento causal y multi-hop, y un ciclo detecta-propone-aprueba-actúa con control, cuyo ejecutor se detiene en un pull request de borrador y nunca fusiona.
Durante todo el proceso, una regla: fundamentado o bloqueado. La selección y el ranking son deterministas y reproducibles offline. Un modelo de lenguaje puede redactar un resultado ya seleccionado y nunca puede agregar, eliminar o reclasificar uno.
Resultado
Aproximadamente un 99% de reducción en tokens por consulta, validado en modo sombra contra el enfoque anterior antes de la promoción. 31 herramientas de línea de comando, 93 herramientas de solo lectura expuestas sobre Model Context Protocol, y 293 pruebas solo sobre el subsistema de memoria dentro de una capa de operaciones en Python de 116,000 líneas que lleva 1,865 pruebas.
Qué haría diferente
Construí el almacén de hechos antes de construir lo que audita si los hechos siguen siendo ciertos. Esas dos cosas deben ir en el mismo release: una memoria sin auto-auditoría es solo un caché confiado. Y habría separado “qué observé” de “qué concluyo” en el contrato del detector desde el inicio; mezclarlos produjo una tanda de alertas bien citadas que eran el mismo bug.
Aprendizajes
Lo que me llevo.
La parte más difícil de un sistema de recuperación no es la recuperación en sí, sino representar lo que es cierto en este momento por separado de lo que alguien escribió alguna vez. Y negarse a responder resultó ser una función que uso a diario: las conclusiones bloqueadas se convierten en una lista de pendientes en lugar de una frase plausible que tengo que verificar.
Stack
Herramientas y plataformas.
Textos relacionados
Notas de este proyecto.
- The Alert That Named a Thing and Called It EvidenceFive high-severity alerts from my own monitoring. All five were the same defect: a record that names something being read as an observation of a property it never measured.
- A Write Loop That Never Merges AnythingMy homelab brain noticed problems and did nothing about them. Closing the loop meant four human gates and an executor whose defining feature is that it stops at a draft PR.
- Teaching a System to Say “I Don’t Know”The most useful thing my homelab brain does is refuse to answer. Grounded-or-blocked: every claim cites the fact that produced it, or it never reaches me.
- A Second Brain That Refuses to GuessAnswering an operational question was costing a local model a 30-50K token dump. I built a compiled memory layer that does it in 2-5K, and blocks itself when it cannot cite a source.
Conversemos
¿Quieres platicar de este tipo de trabajo?
Si estás contratando para trabajo backend, AWS, voz o integraciones similares —o simplemente quieres comparar notas de arquitectura— escríbeme directo.