Інтеграція ChromaDB для векторного сховища AI у мобільному додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Інтеграція ChromaDB для векторного сховища AI у мобільному додатку
Середній
~3-5 днів
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Інтеграція ChromaDB для векторного сховища AI в мобільних додатках

ChromaDB — легка open-source векторна база даних, написана переважно для Python-екосистеми. Запускається у пам'яті, вбудованої або як сервер. Головна перевага — мінімальний поріг входження: pip install chromadb і три рядки коду до першого пошуку.

Де ChromaDB доречний у мобільному контексті

Щира відповідь: ChromaDB — це рішення для бекенду, не для мобільного. На iOS та Android ChromaDB не запускається нативно. Інтеграція в мобільний додаток означає:

  • Сервер ChromaDB на вашому бекенді (Python/FastAPI) + REST API для мобільного клієнта
  • Python-скрипти для офлайн-індексації документів + експорт результатів

Це відрізняє ChromaDB від Pinecone (керована хмара) та Weaviate (підтримує Java/TS клієнти). ChromaDB — правильний вибір для прототипів, малих внутрішніх інструментів та стартапів з Python-бекендом, які хочуть швидко додати RAG.

Базова інтеграція на 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 (Sentence Transformers all-MiniLM-L6-v2). Зручно для прототипу, але повільно для продакшену — краще генерувати вбудовування окремо пакетом.

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)):
    # Перевіряємо, що user_id збігається з аутентифікованим користувачем
    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 не має нативної ізоляції по користувачам, як Weaviate tenants. Ізоляція тільки через where={"user_id": ...}. При великій кількості користувачів або документів це стає повільним — фільтр застосовується після ANN, не до.

Відсутність горизонтального масштабування. ChromaDB не розподілений. Один вузол. Для великих продуктів (10М+ векторів, високий RPS) це обмеження. Для стартапу до 500К документів — достатньо.

Без вбудованого гібридного пошуку. Тільки векторний пошук. Для якісного RAG доведеться додавати BM25 вручну (наприклад, через бібліотеку rank_bm25 Python) і робити RRF-слиття результатів.

# RRF (Reciprocal Rank Fusion) для гібридного пошуку
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)

Міграція з 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 → FastAPI-обгортка з аутентифікацією → ingestion скрипти → endpoint пошуку для мобільного клієнта → тестування якості → моніторинг.

MVP з ChromaDB та базовим RAG — 1–2 тижні. Виробничий варіант з гібридним пошуком та правильною ізоляцією користувачів — 3–4 тижні.