Retrieval-Augmented Generation for Large Language Models: A Survey