Milvus Vector Database
Use Milvus as a vector database for your Knowledge Base.
Setup
1uv pip install pymilvusInitialize Milvus
Set the uri and token for your Milvus server.
- If you only need a local vector database for small scale data or prototyping, setting the uri as 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 data, say more than a million vectors, you can set up a more performant Milvus server on Docker or Kubernetes.
In this setup, please use the server address and port as your uri, e.g.
http://localhost:19530. If you enable the authentication feature on Milvus, useyour_username:your_passwordas the token, otherwise don't set the token. - If you 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.
Example
1from kern.agent import Agent2from kern.knowledge.knowledge import Knowledge3from kern.vectordb.milvus import Milvus45vector_db = Milvus(6 collection="recipes",7 uri="./milvus.db",8)9# Create knowledge base10knowledge_base = Knowledge(11 vector_db=vector_db,12)1314# Create and use the agent15agent = Agent(knowledge=knowledge_base)1617if __name__ == "__main__":18 knowledge_base.insert(19 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"20 )2122 agent.print_response("How to make Tom Kha Gai", markdown=True)23 agent.print_response("What was my last question?", stream=True)Async Support ⚡
Milvus also supports asynchronous operations, enabling concurrency and leading to better performance.
1# install pymilvus - `pip install pymilvus`2import asyncio34from kern.agent import Agent5from kern.knowledge.knowledge import Knowledge6from kern.vectordb.milvus import Milvus78# Initialize Milvus with local file9vector_db = Milvus(10 collection="recipes",11 uri="tmp/milvus.db", # For local file-based storage12)1314# Create knowledge base15knowledge_base = Knowledge(16 vector_db=vector_db,17)1819# Create agent with knowledge base20agent = Agent(knowledge=knowledge_base)2122if __name__ == "__main__":23 # Load knowledge base asynchronously24 asyncio.run(knowledge_base.ainsert(25 url="https://kern-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf"26 )27 )2829 # Query the agent asynchronously30 asyncio.run(agent.aprint_response("How to make Tom Kha Gai", markdown=True))Tip
Use aload() and aprint_response() methods with asyncio.run() for non-blocking operations in high-throughput applications.
Milvus Params
| Parameter | Type | Description | Default |
|---|---|---|---|
collection | str | Name of the Milvus collection | Required |
embedder | Optional[Embedder] | Embedder to use for embedding documents | OpenAIEmbedder() |
distance | Distance | Distance metric to use for vector similarity | Distance.cosine |
uri | str | URI of the Milvus server or path to local file | "http://localhost:19530" |
token | Optional[str] | Token for authentication with the Milvus server | None |
Advanced options can be passed as additional keyword arguments to the MilvusClient constructor.