LlamaIndex Integration with Qdrant

Llama Index acts as an interface between your external data and Large Language Models. So you can bring your private data and augment LLMs with it. LlamaIndex simplifies data ingestion and indexing, integrating Qdrant as a vector index.

Pre-requisites

Installing LlamaIndex and Qdrant-Client

  • To install llama-index

pip install llama-index llama-index-vector-stores-qdrant
  • For installing Qdrant-Client

pip install qdrant-client

Importing Libraries

  • First, we need to import some libraries provided by LlamaIndex to help us in converting text into chunks and then embeddings and putting them into the Qdrant Vector Database.

import qdrant_client
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.core import StorageContext
from llama_index.vector_stores.qdrant import QdrantVectorStore
from llama_index.embeddings.fastembed import FastEmbedEmbedding
from llama_index.core import Settings

Specifing embedding model

  • Then, we need to specify in the llama index setting which model we will be using for generating our vector embeddings from text. We will be using the BAAI/bge-base-en-v1.5 model for this example.

Settings.embed_model = FastEmbedEmbedding(model_name="BAAI/bge-base-en-v1.5")
Settings.llm = None

Reading the File

  • Then, we need to read the contents of the file we need to embedd. We can read multiple files stored in the directory by using the SimpleDirectoryReader class of llama_index.

text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

Embedding and Inserting into Qdrant

  • Now, we need to convert these chunks of text into vector embeddings and insert it into qdrant. For converting chunks into vector embeddings we will be using a HuggingFace Model as it is compatible with the LangChain library. You also need to specify your API-Key and URL for accessing the qdrant cluster in the code below.

documents = SimpleDirectoryReader("<<FILE_NAME>>").load_data()

Initializing the Qdrant Client

  • Llama Index requires providing an instance of QdrantClient, so it can interact with Qdrant server.

Note

You can get your Qdrant URL and API-Key from the Overview tab in Vector Database on TIR. See Qdrant Details subsection for more information.

host = "<<YOUR_QDRANT_ENDPOINT_URL>>"
# HTTP Port = 6333
# gRPC Port = 6334
port = "<<YOUR_PORT>>"
api_key = "<<YOUR_QDRANT_API_KEY>>"
client = qdrant_client.QdrantClient(host=host, port=port, api_key=api_key)

Inserting into the Vector Database

  • Once everything is initialized we can put the chunks of our data into our vector database. The process of chunking, embedding and inserting into Qdrant is done by LlamaIndex itself.

vector_store = QdrantVectorStore(client=client, collection_name="<<YOUR_COLLECTION_NAME>>")
storage_context = StorageContext.from_defaults(vector_store=vector_store)
index = VectorStoreIndex.from_documents(
    documents,
    storage_context=storage_context,
)

Now, you have all your vector embeddings chunked and inserted into the qdrant vector-database.

What’s Next?

This was a quick start guide to get you started with the Qdrant Integration with LangChain.