Almacenamiento de objetos con MinIO
Los archivos originales se guardan en almacenamiento de objetos antes de indexarlos. La implementación local está en RAG.Core/Services/S3ObjectStorage.cs.
Las claves de objetos empiezan con el ID del documento
var objectKey = $"{documentId:N}/{fileName}";
await storage.UploadAsync(objectKey, stream, contentType, cancellationToken);Los archivos originales se guardan en almacenamiento de objetos antes de indexarlos. La implementación local está en RAG.Core/Services/S3ObjectStorage.cs.
MinIO se usa porque es compatible con S3 y fácil de ejecutar localmente en Docker. La misma abstracción podría soportar después:
- AWS S3;
- Azure Blob Storage;
- Google Cloud Storage;
- almacenamiento local en filesystem.
La clave del objeto usa el ID del documento:
{documentId}/{originalFileName}
Esto evita colisiones de nombres de archivo y facilita rastrear un objeto guardado hasta su fila de metadatos.
Conservar archivos originales importa porque los chunks vectoriales son datos derivados. Si más tarde cambian el chunking, la extracción, los embeddings o el análisis, el worker puede reprocesar el documento original.
La abstracción de almacenamiento ahora incluye DeleteAsync además de operaciones de carga y lectura. Eso permite que la eliminación de documentos limpie el objeto original junto con metadatos y puntos vectoriales, que es el soporte mínimo de ciclo de vida que necesita un sistema RAG real de documentos.