Skip to main content
Loading navigation
Back to prompt library

Implementing Qdrant for Long-Term Memory

Linked challenge: Build Proactive Personalized Assistant with AutoGen & Gemini 2.5 Pro

Prompt source

implementation38 lines6 sectionsNo variables1 code block
Design a mechanism for the `ContextAnalyst` agent to store and retrieve user preferences, historical interactions, and important facts in a Qdrant vector database. The agent should use embeddings (e.g., from Gemini's embedding models) to store these memories and retrieve relevant ones based on the current user query. Provide a Python class or functions demonstrating this integration.

```python
# Example Qdrant integration sketch
from qdrant_client import QdrantClient, models
# from your_embedding_model_library import get_embedding # e.g., from Gemini

class UserMemory:
    def __init__(self, collection_name="user_memories"):
        self.client = QdrantClient("localhost", port=6333) # Or your Qdrant instance
        self.collection_name = collection_name
        self.client.recreate_collection(
            collection_name=self.collection_name,
            vectors_config=models.VectorParams(size=768, distance=models.Distance.COSINE), # Adjust size for Gemini embeddings
        )

    def store_memory(self, user_id: str, text: str, metadata: dict = None):
        # vector = get_embedding(text) # Replace with actual embedding call
        vector = [0.1] * 768 # Placeholder
        self.client.upsert(
            collection_name=self.collection_name,
            points=[
                models.PointStruct(
                    id=str(uuid.uuid4()), 
                    vector=vector, 
                    payload={"user_id": user_id, "text": text, **(metadata or {})}
                )
            ]
        )

    def retrieve_memory(self, user_id: str, query_text: str, top_k: int = 3):
        # query_vector = get_embedding(query_text) # Replace with actual embedding call
        query_vector = [0.2] * 768 # Placeholder
        search_result = self.client.search(
            collection_name=self.collection_name,
            query_vector=query_vector,
            query_filter=models.Filter(must=[models.FieldCondition(key="user_id", match=models.MatchValue(value=user_id))]),
            limit=top_k
        )
        return [point.payload['text'] for point in search_result]

# The ContextAnalyst agent would then use this class.
```