This article introduces Chroma vector database installation, collection management, document adding, and similarity search operations. Shows how to integrate Chroma into AI agents as a long-term memory system and implement semantic search with metadata filtering.
Chroma is an open-source vector database designed for AI applications, supporting storage of embeddings and metadata for efficient similarity search. It can serve as an AI agent's long-term memory system, enabling agents to remember and retrieve relevant information across sessions.
pip install chromadb chromadb-server
Embedded Mode (default, for development):
import chromadb
client = chromadb.Client()
Persistent Mode (for production):
import chromadb
client = chromadb.PersistentClient(path="./chroma_data")
collection = client.get_or_create_collection(
name="knowledge_base",
metadata={"description": "Knowledge base collection"}
)
collection.add(
documents=[
"Python is a high-level programming language",
"JavaScript is mainly used for web development",
"Go language is known for concurrency performance"
],
ids=["doc1", "doc2", "doc3"],
metadatas=[
{"language": "programming", "level": "beginner"},
{"language": "web", "level": "beginner"},
{"language": "system", "level": "intermediate"}
]
)
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("all-MiniLM-L6-v2")
def embed_texts(texts):
return model.encode(texts).tolist()
collection.add(
documents=["Document content..."],
ids=["doc1"],
embedding_function=embed_texts
)
results = collection.query(
query_texts=["What programming language is suitable for beginners"],
n_results=3
)
print(results["documents"]) # Document content
print(results["distances"]) # Distance scores
results = collection.query(
query_texts=["Efficient programming language"],
n_results=5,
where={"language": "programming"}
)
import chromadb
from langchain_openai import OpenAIEmbeddings
client = chromadb.PersistentClient(path="./agent_memory")
memory_collection = client.get_or_create_collection("agent_memory")
embeddings = OpenAIEmbeddings()
def remember(topic: str, content: str):
"""Store important information to memory"""
vector = embeddings.embed_query(content)
memory_collection.add(
documents=[content],
embeddings=[vector],
ids=[f"mem_{topic}"]
)
return f"Remembered information about '{topic}'"
def recall(query: str):
"""Retrieve relevant information from memory"""
query_vector = embeddings.embed_query(query)
results = memory_collection.query(
query_embeddings=[query_vector],
n_results=3
)
if not results["documents"][0]:
return "No relevant information found"
return "\n".join(results["documents"][0])
Q1: What embedding model does Chroma use by default?
Q2: How to choose distance function?
Q3: How to handle large-scale data?
Auto-repair applied and deterministic inspection checks passed.
所有示例代码可正常导入和执行
代码示例符合 Chroma API 规范