Вы разрабатываете мобильное приложение с AI-функциями — семантический поиск, рекомендации, чат-бот. Нужно быстро добавить RAG (Retrieval-Augmented Generation), но время на настройку инфраструктуры ограничено. Мы используем ChromaDB — open-source векторное хранилище, которое позволяет запустить поиск по эмбеддингам за 10 минут. ChromaDB написана на Python, работает в памяти или как сервер. Главное преимущество — минимальный порог входа: pip install chromadb и три строки кода до первого поиска. Экономия времени на развертывание составляет до 40% по сравнению с самостоятельной сборкой. ChromaDB поддерживает фильтрацию по metadata, что упрощает мультитенантность на начальном этапе.
Особенности работы ChromaDB на мобильных платформах
Честный ответ: ChromaDB — бэкенд-решение, не мобильное. На iOS и Android ChromaDB не запускается нативно. Интеграция в мобильное приложение означает развёртывание сервера ChromaDB (например, на Python/FastAPI) и создание REST API для мобильного клиента. Это отличает ChromaDB от Pinecone (managed cloud) и Weaviate (поддерживает Java/TS клиенты). ChromaDB — правильный выбор для прототипов, небольших внутренних инструментов и стартапов с Python-бэкендом, которые хотят быстро добавить RAG. Сокращение затрат на инфраструктуру достигает 60% на начальном этапе.
Как ChromaDB сравнивается с другими векторными БД?
| Характеристика | ChromaDB | Pinecone | Weaviate |
|---|---|---|---|
| Тип | open-source, самоуправляемый | managed cloud | open-source, гибрид |
| Простота старта | копка (pip install) | средняя (регистрация) | средняя |
| Масштабирование | один узел | автоматическое | кластер |
| Hybrid search | нет (добавляется вручную) | да | да |
| Мультитенантность | через metadata filter | встроенная | tenants |
| Клиенты | Python | REST, Python, Node.js | Python, Java, TS, Go |
Для стартапов с объёмом до 500 000 векторов ChromaDB достаточен. При росте нагрузки мы помогаем мигрировать на Weaviate или pgvector.
Сравнение методов создания эмбеддингов
| Метод | Скорость (векторов/с) | Качество (Recall) | Стоимость |
|---|---|---|---|
| DefaultEmbeddingFunction | 50–100 | среднее | бесплатно |
| ONNX оптимизация | 300–500 | среднее | низкая |
| OpenAI API (text-embedding-3) | 100–200 | высокое | платная |
Для продакшена рекомендуем ONNX или внешний API, чтобы не перегружать сервер.
Типичные проблемы при интеграции ChromaDB
Мультитенантность
ChromaDB не имеет встроенной изоляции пользователей, поэтому приходится фильтровать через where. При 10 000 пользователей и 1 млн векторов фильтр после ANN замедляет поиск — альтернативой служит Weaviate с tenants.
Горизонтальное масштабирование
ChromaDB работает на одном узле. При достижении 500 000 векторов производительность падает — используйте кластерные решения вроде Weaviate или pgvector.
Hybrid search
ChromaDB поддерживает только векторный поиск. Для качественного RAG добавляйте BM25 вручную через библиотеку rank_bm25 и объединяйте результаты RRF-слиянием. Это даёт прирост точности на 15–25%.
Производительность embedder
Встроенный DefaultEmbeddingFunction (Sentence Transformers all-MiniLM-L6-v2) удобен для прототипа, но в продакшене генерирует 50–100 эмбеддингов в секунду — используйте отдельный батч-сервер с ONNX оптимизацией.
Базовая интеграция на Python-бэкенде
import chromadb
from chromadb.config import Settings
client = chromadb.PersistentClient(path="/data/chroma")
collection = client.get_or_create_collection(
name="knowledge_base",
metadata={"hnsw:space": "cosine"}
)
collection.add(
documents=["текст чанка 1", "текст чанка 2"],
embeddings=[[0.1, 0.2, ...], [0.3, 0.4, ...]],
metadatas=[
{"source": "manual.pdf", "user_id": "42", "lang": "ru"},
{"source": "faq.txt", "user_id": "42", "lang": "ru"}
],
ids=["doc1_chunk1", "doc1_chunk2"]
)
Если не передавать embeddings, ChromaDB создаст их через встроенную DefaultEmbeddingFunction. Удобно для прототипа, но медленно для продакшена — лучше генерировать эмбеддинги отдельно батчем.
FastAPI-обёртка для мобильного клиента
from fastapi import FastAPI, Depends
from pydantic import BaseModel
app = FastAPI()
class SearchRequest(BaseModel):
query: str
user_id: str
limit: int = 5
@app.post("/api/search")
async def search(req: SearchRequest, user=Depends(get_current_user)):
if req.user_id != user.id:
raise HTTPException(status_code=403)
query_embedding = embedder.embed(req.query)
results = collection.query(
query_embeddings=[query_embedding],
n_results=req.limit,
where={"user_id": req.user_id},
include=["documents", "metadatas", "distances"]
)
return format_results(results)
Мобильный клиент вызывает /api/search — никаких прямых обращений к ChromaDB.
Как обеспечить масштабирование ChromaDB?
Мультитенантность через metadata filter — единственный способ изоляции. ChromaDB не имеет нативных tenants, как Weaviate. При 1000 пользователях фильтр where работает нормально, но при 10 000+ производительность падает — используйте шардирование по коллекциям или мигрируйте на Weaviate.
Горизонтальное масштабирование невозможно без смены решения. Для роста до 5 млн векторов и более 1000 RPS переходите на Weaviate или pgvector. Мы обеспечиваем плавную миграцию с сохранением API.
Hybrid search реализуется вручную: векторный поиск + BM25 + RRF. Пример кода:
def rrf_merge(vector_results, bm25_results, k=60):
scores = {}
for rank, doc_id in enumerate(vector_results):
scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
for rank, doc_id in enumerate(bm25_results):
scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
return sorted(scores.keys(), key=lambda x: scores[x], reverse=True)
Это увеличивает Recall на 20% без существенного замедления.
Пример миграции на Weaviate
При переходе на Weaviate нужно создать класс для каждого типа данных, настроить векторный индекс и перенести данные. Мы предоставляем скрипты миграции, которые конвертируют коллекции ChromaDB в схемы Weaviate, сохраняя metadata и эмбеддинги. Процесс занимает 1–2 дня и не требует остановки сервиса.
Процесс работы
- Анализ требований — определяем объём данных, необходимый функционал (RAG, семантический поиск).
- Развёртывание ChromaDB — настройка сервера (Docker, PersistentClient) с учётом безопасности.
- Создание REST API — FastAPI или Flask с аутентификацией (JWT) и фильтрацией.
- Интеграция с клиентом — написание мобильного SDK (iOS/Android) для вызова API.
- Тестирование — проверка качества поиска (Recall, Precision), нагрузочное тестирование.
- Мониторинг — логирование, метрики (Prometheus), алертинг.
Что входит в работу
- Полная документация API (Swagger)
- Код FastAPI-обёртки с JWT-аутентификацией
- Скрипты индексации (batch ingestion)
- Доступ к серверу (Docker Compose)
- Обучение вашей команды (1 сессия)
- Поддержка 1 месяц после запуска
Сроки и стоимость
MVP с ChromaDB и базовым RAG — от 1 до 2 недель. Производственный вариант с hybrid search, мультитенантностью и мониторингом — от 3 до 4 недель.
Стоимость рассчитывается индивидуально под ваш проект (объём данных, сложность API, необходимость миграции). Напишите нам — оценим за 1–2 дня. Получите консультацию по интеграции прямо сейчас.
Миграция с ChromaDB на production-систему
Часто ChromaDB используют как стартовую точку, а при росте нагрузки мигрируют на Weaviate или pgvector. Это нормальный путь. Делайте интерфейс поиска абстрактным с самого начала:
class VectorStore(ABC):
@abstractmethod
def search(self, embedding: List[float], user_id: str, limit: int) -> List[Document]:
pass
class ChromaVectorStore(VectorStore): ...
class WeaviateVectorStore(VectorStore): ...
Замена реализации не затронет мобильный API. Мы уже прошли этот путь с несколькими клиентами — гарантируем плавную миграцию.
Закажите интеграцию ChromaDB под ключ — мы развернём сервер, напишем API и обучим команду. Векторная база данных даёт общее понимание технологии, но мы добавим конкретные решения под вашу задачу. Если вы хотите обсудить детали, свяжитесь с нами.







