MongoDB Vector Database
Use MongoDB as a vector database for your Knowledge Base.
Setup
Follow the instructions in the MongoDB Setup Guide to get connection string
Install MongoDB packages
1uv pip install "pymongo[srv]"Example
1from kern.agent import Agent2from kern.knowledge.knowledge import Knowledge3from kern.vectordb.mongodb import MongoVectorDb45# MongoDB Atlas connection string6"""7Example connection strings:8"mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"9"mongodb://localhost/?directConnection=true"10"""11mdb_connection_string = ""1213knowledge_base = Knowledge(14 vector_db=MongoVectorDb(15 collection_name="recipes",16 db_url=mdb_connection_string,17 wait_until_index_ready_in_seconds=60,18 wait_after_insert_in_seconds=30019 ),20) # adjust wait_after_insert_in_seconds and wait_until_index_ready_in_seconds to your needs2122if __name__ == "__main__":23 knowledge_base.insert(24 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"25 )2627 agent = Agent(knowledge=knowledge_base)28 agent.print_response("How to make Thai curry?", markdown=True)Async Support ⚡
MongoDB also supports asynchronous operations, enabling concurrency and leading to better performance.
1import asyncio23from kern.agent import Agent4from kern.knowledge.knowledge import Knowledge5from kern.vectordb.mongodb import MongoVectorDb67# MongoDB Atlas connection string8"""9Example connection strings:10"mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"11"mongodb://localhost:27017/kern?authSource=admin"12"""13mdb_connection_string = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority"1415knowledge_base = Knowledge(16 vector_db=MongoVectorDb(17 collection_name="recipes",18 db_url=mdb_connection_string,19 ),20)2122# Create and use the agent23agent = Agent(knowledge=knowledge_base)2425if __name__ == "__main__":26 # Load knowledge base asynchronously27 asyncio.run(knowledge_base.ainsert(28 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"29 )30 )3132 # Create and use the agent asynchronously33 asyncio.run(agent.aprint_response("How to make Thai curry?", markdown=True))Tip
Use aload() and aprint_response() methods with asyncio.run() for non-blocking operations in high-throughput applications.
MongoDB Params
| Parameter | Type | Description | Default |
|---|---|---|---|
collection_name | str | Name of the MongoDB collection | Required |
name | Optional[str] | Name of the vector database | None |
description | Optional[str] | Description of the vector database | None |
id | Optional[str] | Unique identifier for the vector database | Auto-generated |
db_url | Optional[str] | MongoDB connection string | "mongodb://localhost:27017/" |
database | str | Database name | "kern" |
embedder | Optional[Embedder] | Embedder instance for generating embeddings | OpenAIEmbedder() |
distance_metric | str | Distance metric for similarity | Distance.cosine |
overwrite | bool | Overwrite existing collection and index if True | False |
wait_until_index_ready_in_seconds | Optional[float] | Time in seconds to wait until the index is ready | 3 |
wait_after_insert_in_seconds | Optional[float] | Time in seconds to wait after inserting documents | 3 |
max_pool_size | int | Maximum number of connections in the connection pool | 100 |
retry_writes | bool | Whether to retry write operations | True |
client | Optional[MongoClient] | An existing MongoClient instance | None |
search_index_name | Optional[str] | Name of the search index | "vector_index_1" |
cosmos_compatibility | Optional[bool] | Whether to use Azure Cosmos DB MongoDB vCore compatibility mode | False |
search_type | SearchType | The search type to use when searching for documents | SearchType.vector |
hybrid_vector_weight | float | Default weight for vector search results in hybrid search | 0.5 |
hybrid_keyword_weight | float | Default weight for keyword search results in hybrid search | 0.5 |
hybrid_rank_constant | int | Default rank constant (k) for Reciprocal Rank Fusion in hybrid search | 60 |