L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

chromadb

chromadb

Assists with storing, searching, and managing vector embeddings using ChromaDB. Use when building RAG pipelines, semantic search engines, or recommendation systems. Trigger words: chromadb, chroma, vector database, embeddings, semantic search, similarity search, vector store, rag.

Independent GitHub snapshot · Automated classification · Original documentation governs

Tterminalskills / skillsApache-2.0

Documentation de la Skill

GitHub

name: chromadb description: >- Assists with storing, searching, and managing vector embeddings using ChromaDB. Use when building RAG pipelines, semantic search engines, or recommendation systems. Trigger words: chromadb, chroma, vector database, embeddings, semantic search, similarity search, vector store, rag. license: Apache-2.0 compatibility: "Python 3.9+ (chromadb 1.5) or Node.js via the chromadb npm package (3.x)" metadata: author: terminal-skills version: "1.2.0" repository: https://github.com/chroma-core/chroma category: data-ai tags: ["chromadb", "vector-database", "embeddings", "rag", "semantic-search"]

ChromaDB

Overview

ChromaDB is an open-source vector database for storing, searching, and managing embeddings. It provides a simple API for document ingestion, semantic similarity search, and metadata filtering, supporting both Python and JavaScript/TypeScript clients with embedded, server, and cloud deployment options.

Instructions

  • Install with pip install chromadb (checked against 1.5.9, October 2026) or npm install chromadb for JavaScript.
  • Initialize with get_or_create_collection for idempotent setup. Use PersistentClient(path="./chroma_data") for local work, HttpClient(host="localhost", port=8000) against a server (chroma run --path ./chroma_data, or the chromadb/chroma Docker image, which keeps data in /data), and CloudClient for Chroma Cloud. list_collections() returns Collection objects since 1.0.
  • Adding documents: batch add()/upsert() calls below client.get_max_batch_size() (5,461 in the 1.5 line, so 5,000 per call is safe), always store source metadata (filename, URL, page) for citations, and use upsert() for re-ingestion.
  • Embeddings: with no embedding_function, Chroma downloads a small ONNX copy of all-MiniLM-L6-v2 on first use (about 80 MB) and runs it locally. Pass an OpenAI, Cohere or other embedding function for production, or pass your own embeddings= vectors and set embedding_function=None. Query with the same function you ingested with: it is stored with the collection configuration.
  • Querying: collection.query(query_texts=[...], n_results=5, where={...}, where_document={"$contains": "refund"}). Results are lists of lists, one per query. Metadata operators: $eq, $ne, $gt, $gte, $lt, $lte, $in, $nin, combined with $and/$or. Use get() to fetch by ids or filter without similarity.
  • Distance and index tuning go in configuration={"hnsw": {"space": "cosine", "ef_construction": 200, "max_neighbors": 16, "ef_search": 100}} at creation (space is l2 by default; cosine and ip also exist). The old metadata={"hnsw:space": ...} style is replaced by configuration. The space cannot be changed after creation.
  • Returned distances are distances, lower is closer; for cosine, similarity is 1 - distance.

A minimal local server and client check:

chroma run --path ./chroma_data --host 127.0.0.1 --port 8000
import chromadb
client = chromadb.HttpClient(host="127.0.0.1", port=8000)
print(client.heartbeat())   # nanosecond timestamp when the server is up

Examples

Example 1: Build a document Q&A pipeline

User request: "Set up a RAG pipeline with ChromaDB for answering questions about our docs"

import chromadb
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

client = chromadb.PersistentClient(path="./chroma_data")
docs = client.get_or_create_collection(
    "product-docs",
    embedding_function=OpenAIEmbeddingFunction(model_name="text-embedding-3-small"),  # reads OPENAI_API_KEY
    configuration={"hnsw": {"space": "cosine"}},
)
docs.upsert(
    ids=["billing-p1-c0", "billing-p1-c1"],
    documents=["Invoices are issued on the 1st of each month.", "Refunds take 5 business days."],
    metadatas=[{"source": "billing.pdf", "page": 1}, {"source": "billing.pdf", "page": 1}],
)
hits = docs.query(query_texts=["How long do refunds take?"], n_results=3)
print(hits["documents"][0][0], hits["metadatas"][0][0])

Pass the retrieved chunks and their source/page to the LLM as context and cite them.

Example 2: Filtered semantic search

User request: "Implement product search that combines text similarity with category filters"

products = client.get_or_create_collection("products")
res = products.query(
    query_texts=["noise cancelling headphones"],
    n_results=5,
    where={"$and": [{"category": "electronics"}, {"price": {"$gte": 50}}, {"price": {"$lte": 300}}]},
)
for pid, dist in zip(res["ids"][0], res["distances"][0]):
    print(pid, round(dist, 3))

The output is up to five product ids with distances, smallest first, all inside the category and price range.

Guidelines

  • Use get_or_create_collection so restarts are safe; it ignores a changed configuration for an existing collection.
  • Collection names must be 3-512 characters from [a-zA-Z0-9._-], starting and ending with a letter or digit; a name like x raises InvalidArgumentError.
  • Keep ids stable (for example file-page-chunk) so upsert() replaces instead of duplicating.
  • Store source metadata for every chunk; metadata values must be strings, numbers or booleans, not nested objects.
  • Pick n_results from the LLM context budget: 5-10 for most RAG pipelines.
  • Use cosine for text embeddings from OpenAI or Cohere models; the default l2 ranks unnormalized vectors differently.
  • Built-in server authentication was removed in 1.0: put the server behind a reverse proxy with auth, or use Chroma Cloud. Never expose port 8000 to the internet.
  • Chroma suits prototypes through mid-size collections on one node; for very large or multi-writer workloads evaluate a dedicated vector service.
Skills enregistrées