docs: Use local inference rapid-rag-optimization-with-qdrant-and-quotient.md (#1601)

* docs: Use local inference rapid-rag-optimization-with-qdrant-and-quotient.md

Signed-off-by: Anush008 <anushshetty90@gmail.com>

* Update qdrant-landing/content/articles/rapid-rag-optimization-with-qdrant-and-quotient.md

---------

Signed-off-by: Anush008 <anushshetty90@gmail.com>
Co-authored-by: George <george.panchuk@qdrant.tech>
This commit is contained in:
Anush
2025-05-15 19:33:44 +05:30
committed by GitHub
co-authored by George
parent 9aab01a353
commit 9577b88aac
@@ -65,19 +65,10 @@ We will then assess our RAG application’s ability to answer questions about Qd
To prepare our knowledge store we will use Qdrant, which can be leveraged in 3 different ways as below : To prepare our knowledge store we will use Qdrant, which can be leveraged in 3 different ways as below :
```python ```python
##Uncomment to initialise qdrant client in memory
#client = qdrant_client.QdrantClient(
# location=":memory:",
#)
##Uncomment below to connect to Qdrant Cloud
client = qdrant_client.QdrantClient( client = qdrant_client.QdrantClient(
os.environ.get("QDRANT_URL"), os.environ.get("QDRANT_URL"),
api_key=os.environ.get("QDRANT_API_KEY"), api_key=os.environ.get("QDRANT_API_KEY"),
) )
## Uncomment below to connect to local Qdrant
#client = qdrant_client.QdrantClient("http://localhost:6333")
``` ```
We will be using [Qdrant Cloud](https://cloud.qdrant.io/login) so it is a good idea to provide the `QDRANT_URL` and `QDRANT_API_KEY` as environment variables for easier access. We will be using [Qdrant Cloud](https://cloud.qdrant.io/login) so it is a good idea to provide the `QDRANT_URL` and `QDRANT_API_KEY` as environment variables for easier access.
@@ -90,26 +81,7 @@ COLLECTION_NAME = "qdrant-docs-quotient"
In this case , we may need to create different collections based on the experiments we conduct. In this case , we may need to create different collections based on the experiments we conduct.
To help us provide seamless embedding creations throughout the experiment, we will use Qdrant’s native embedding provider [Fastembed](https://qdrant.github.io/fastembed/) which supports [many different models](https://qdrant.github.io/fastembed/examples/Supported_Models/) including dense as well as sparse vector models. To help us provide seamless embedding creations throughout the experiment, we will use Qdrant’s own embeddings library [Fastembed](https://qdrant.github.io/fastembed/) which supports [many different models](https://qdrant.github.io/fastembed/examples/Supported_Models/) including dense as well as sparse vector models.
We can initialize and switch the embedding model of our choice as below :
```python
## Declaring the intended Embedding Model with Fastembed
from fastembed.embedding import TextEmbedding
## General Fastembed specific operations
##Initilising embedding model
## Using Default Model - BAAI/bge-small-en-v1.5
embedding_model = TextEmbedding()
## For custom model supported by Fastembed
#embedding_model = TextEmbedding(model_name="BAAI/bge-small-en", max_length=512)
#embedding_model = TextEmbedding(model_name="sentence-transformers/all-MiniLM-L6-v2", max_length=384)
## Verify the chosen Embedding model
embedding_model.model_name
```
Before implementing RAG, we need to prepare and index our data in Qdrant. Before implementing RAG, we need to prepare and index our data in Qdrant.
@@ -134,7 +106,7 @@ len(langchain_docs)
#240 #240
``` ```
You can preview documents in the dataset as below : You can preview documents in the dataset as below :
```python ```python
## Here's an example of what a document in our dataset looks like ## Here's an example of what a document in our dataset looks like
@@ -168,6 +140,10 @@ Following the ingestion of data in Qdrant, we proceed to retrieve pertinent docu
Next we define methods to take care of logistics with respect to adding documents to Qdrant Next we define methods to take care of logistics with respect to adding documents to Qdrant
```python ```python
import uuid
from qdrant_client import models
def add_documents(client, collection_name, chunk_size, chunk_overlap, embedding_model_name): def add_documents(client, collection_name, chunk_size, chunk_overlap, embedding_model_name):
""" """
This function adds documents to the desired Qdrant collection given the specified RAG parameters. This function adds documents to the desired Qdrant collection given the specified RAG parameters.
@@ -201,9 +177,23 @@ def add_documents(client, collection_name, chunk_size, chunk_overlap, embedding_
print("content: ", len(docs_contents)) print("content: ", len(docs_contents))
print("metadata: ", len(docs_metadatas)) print("metadata: ", len(docs_metadatas))
## Adding documents to Qdrant using desired embedding model if not client.collection_exists(collection_name):
client.set_model(embedding_model_name=embedding_model_name) client.create_collection(
client.add(collection_name=collection_name, metadata=docs_metadatas, documents=docs_contents) collection_name=collection_name,
vectors_config=models.VectorParams(size=384, distance=models.Distance.COSINE),
)
client.upsert(
collection_name=collection_name,
points=[
models.PointStruct(
id=uuid.uuid4().hex,
vector=models.Document(text=content, model=embedding_model_name),
payload={"metadata": metadata, "document": content},
)
for metadata, content in zip(docs_metadatas, docs_contents)
],
)
``` ```
and retrieving documents from Qdrant during our RAG Pipeline assessment. and retrieving documents from Qdrant during our RAG Pipeline assessment.
@@ -214,12 +204,13 @@ def get_documents(collection_name, query, num_documents=3):
This function retrieves the desired number of documents from the Qdrant collection given a query. This function retrieves the desired number of documents from the Qdrant collection given a query.
It returns a list of the retrieved documents. It returns a list of the retrieved documents.
""" """
search_results = client.query( search_results = client.query_points(
collection_name=collection_name, collection_name=collection_name,
query_text=query, query=models.Document(text=query, model=embedding_model_name),
limit=num_documents, limit=num_documents,
) ).points
results = [r.metadata["document"] for r in search_results]
results = [r.payload["document"] for r in search_results]
return results return results
``` ```