Rag With Milvus And Haystack
Retrieval-Augmented Generation (RAG) with Milvus and Haystack
This guide demonstrates how to build a Retrieval-Augmented Generation (RAG) system using Haystack and Milvus.
The RAG system combines a retrieval system with a generative model to generate new text based on a given prompt. The system first retrieves relevant documents from a corpus using Milvus, and then uses a generative model to generate new text based on the retrieved documents.
Haystack is the open source Python framework by deepset for building custom apps with large language models (LLMs). Milvus is the world's most advanced open-source vector database, built to power embedding similarity search and AI applications.
Prerequisites
Before running this notebook, make sure you have the following dependencies installed:
If you are using Google Colab, to enable dependencies just installed, you may need to restart the runtime (click on the "Runtime" menu at the top of the screen, and select "Restart session" from the dropdown menu).
We will use the models from OpenAI. You should prepare the api key OPENAI_API_KEY as an environment variable.
Prepare the data
We use an online content about Leonardo Da Vinci as a store of private knowledge for our RAG pipeline, which is a good data source for a simple RAG pipeline.
Download it and save it as a local text file.
Create the indexing Pipeline
Create an indexing pipeline that converts the text into documents, splits them into sentences, and embeds them. The documents are then written to the Milvus document store.
For the connection_args:
- Setting the
urias a local file, e.g../milvus.db, is the most convenient method, as it automatically utilizes Milvus Lite to store all data in this file.- If you have large scale of data, you can set up a more performant Milvus server on docker or kubernetes. In this setup, please use the server uri, e.g.
http://localhost:19530, as youruri.- If you want to use Zilliz Cloud, the fully managed cloud service for Milvus, adjust the
uriandtoken, which correspond to the Public Endpoint and Api key in Zilliz Cloud.
Converting markdown files to Documents: 100%|█| 1/ Calculating embeddings: 100%|█| 9/9 [00:05<00:00, E20240516 10:40:32.945937 5309095 milvus_local.cpp:189] [SERVER][GetCollection][] Collecton HaystackCollection not existed E20240516 10:40:32.946677 5309095 milvus_local.cpp:189] [SERVER][GetCollection][] Collecton HaystackCollection not existed E20240516 10:40:32.946704 5309095 milvus_local.cpp:189] [SERVER][GetCollection][] Collecton HaystackCollection not existed E20240516 10:40:32.946725 5309095 milvus_local.cpp:189] [SERVER][GetCollection][] Collecton HaystackCollection not existed
Number of documents: 277
Create the retrieval pipeline
Create a retrieval pipeline that retrieves documents from the Milvus document store using a vector similarity search engine.
). The composition of this oil-painting seems to have been built up on the second cartoon, which he had made some eight years earlier, and which was apparently taken to France in 1516 and ultimately lost. ---------- This "Baptism of Christ," which is now in the Accademia in Florence and is in a bad state of preservation, appears to have been a comparatively early work by Verrocchio, and to have been painted in 1480-1482, when Leonardo would be about thirty years of age. To about this period belongs the superb drawing of the "Warrior," now in the Malcolm Collection in the British Museum. ---------- " Although he completed the cartoon, the only part of the composition which he eventually executed in colour was an incident in the foreground which dealt with the "Battle of the Standard." One of the many supposed copies of a study of this mural painting now hangs on the south-east staircase in the Victoria and Albert Museum. ----------
Create the RAG pipeline
Create a RAG pipeline that combines the MilvusEmbeddingRetriever and the OpenAIGenerator to answer the question using the retrieved documents.
RAG answer: The painting "Warrior" is currently stored in the Malcolm Collection in the British Museum.
For more information about how to use milvus-haystack, please refer to the milvus-haystack Readme.