RAG на ChromaDB: от прототипа до продакшена

Распространённая ситуация: модель отвечает не по контексту, а latency p99 превышает 5 секунд. Причины — неотфильтрованные эмбеддинги, перемешанные чанки и неподготовленная векторная база. Мы сталкивались с этим десятки раз и знаем, как настроить <cite>[RAG](https://en.wikipedia.org/wiki/Retrieval-au

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1284
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    980
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1240
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    696
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    982

Распространённая ситуация: модель отвечает не по контексту, а latency p99 превышает 5 секунд. Причины — неотфильтрованные эмбеддинги, перемешанные чанки и неподготовленная векторная база. Мы сталкивались с этим десятки раз и знаем, как настроить RAG на ChromaDB под ваши данные.

Почему ChromaDB — хороший старт для RAG?

ChromaDB — это embedded векторная база данных, которая не требует отдельного сервера для локальной разработки. Она поддерживает in-memory и persistent режимы, а также HTTP-режим для продакшена. Это позволяет быстро итерировать: написали код — запустили — проверили. Для прототипирования RAG-систем и небольших продакшен-деплоев (до нескольких миллионов документов) ChromaDB — стандартный выбор.

Какие проблемы мы решаем?

  • Галлюцинации LLM: RAG снижает их за счёт подачи релевантного контекста. Но если поиск возвращает не те чанки — галлюцинации остаются. Мы настраиваем embedding-модель, размер чанка и метрику сходства так, чтобы precision@k была >0.8. Это снижает latency с 5с до 50 мс и экономит до 70% вычислительных ресурсов.
  • Медленный поиск: при 100k+ чанков latency может превысить 1 секунду. Оптимизация HNSW-графа (ef_construction, ef_search) и шардирование по метаданным сокращают время до 50 мс.
  • Сложность масштабирования: ChromaDB легко масштабируется горизонтально через HTTP-сервер и репликацию. Мы покажем, как настроить кластер для миллионов запросов в день.

Как мы это делаем: стек и конфигурации

Используем проверенный стек: Python 3.11, ChromaDB 0.5.x, OpenAI text-embedding-3-small (1536-dim), GPT-4o-mini для генерации. Для сложных сценариев — LangChain или LlamaIndex. Дополнительно применяем fine-tuning эмбеддингов под доменную специфику и MLOps-практики для отслеживания экспериментов.

Запуск и подключение

import chromadb from chromadb.utils import embedding_functions # In-memory (для разработки и тестов) client = chromadb.EphemeralClient() # Persistent (файловое хранилище) client = chromadb.PersistentClient(path="./chroma_db") # HTTP-сервер (production) client = chromadb.HttpClient(host="localhost", port=8000) 

Создание коллекции и индексация

from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction embedding_fn = OpenAIEmbeddingFunction( api_key="...", model_name="text-embedding-3-small" ) collection = client.get_or_create_collection( name="knowledge_base", embedding_function=embedding_fn, metadata={"hnsw:space": "cosine"} # Метрика сходства ) # Добавление документов collection.add( documents=["Текст чанка 1", "Текст чанка 2", ...], metadatas=[ {"source": "contract.pdf", "page": 1, "doc_type": "contract"}, {"source": "faq.md", "page": 0, "doc_type": "faq"}, ], ids=["chunk_001", "chunk_002", ...] ) 

RAG-запрос

from openai import OpenAI openai_client = OpenAI() def rag_answer(question: str, n_results: int = 4) -> str: # Поиск релевантных чанков results = collection.query( query_texts=[question], n_results=n_results, where={"doc_type": {"$in": ["contract", "regulation"]}}, # Фильтр ) context = "\n\n".join(results["documents"][0]) # Генерация ответа response = openai_client.chat.completions.create( model="gpt-4o-mini", messages=[ {"role": "system", "content": "Отвечай только на основе контекста."}, {"role": "user", "content": f"Контекст:\n{context}\n\nВопрос: {question}"} ], temperature=0, ) return response.choices[0].message.content answer = rag_answer("Какой срок действия договора?") 

Что входит в работу?

Этап Результат
Анализ данных Инвентаризация документов, выбор стратегии чанкования (recursive split, semantic chunking)
Проектирование Архитектура RAG, выбор модели эмбеддингов, настройка HNSW-параметров
Реализация Интеграция ChromaDB, написание пайплайна индексации и запросов, unit-тесты
Тестирование A/B-тест против baseline, замер precision@k, recall@k, latency p99
Деплой Docker-контейнеризация, CI/CD, мониторинг (Prometheus + Grafana)
Пример конфигурации HNSW для высокой точности
collection = client.create_collection( name="high_accuracy", metadata={ "hnsw:space": "cosine", "hnsw:construction_ef": 200, "hnsw:search_ef": 100, "hnsw:M": 32 } ) 

Мы передаём документацию по архитектуре, доступ к репозиторию, инструкцию по эксплуатации и проводим обучение команды.

Почему ChromaDB лучше других embedded векторных баз?

Сравним ChromaDB с основными альтернативами для прототипирования:

Критерий ChromaDB FAISS Qdrant (embedded)
Установка pip install chromadb pip install faiss-cpu pip install qdrant-client
In-memory Да Да Нет (только persistent)
Persistent Да Нет (вручную) Да
Метаданные Да (фильтрация) Нет Да
HTTP-сервер Встроенный Нет Отдельный сервер

ChromaDB выигрывает за счёт встроенной поддержки метаданных и HTTP-режима из коробки. Для прототипа это снижает время до первого RAG-запроса до часов.

Как обеспечить точность ответов в RAG?

Ключ — качество индексации. Используем:

  • Размер чанка: 256–512 токенов для вопросно-ответных сценариев, 1024+ для суммаризации.
  • Перекрытие чанков: 10–20% для сохранения контекстной связности.
  • Фильтры: Чанки с метаданными (источник, тип документа) позволяют точечно ограничивать поиск.
  • Количество чанков в контексте: 3–5 обычно достаточно, но для сложных вопросов — до 10.

Процесс работы с нами

  1. Аналитика: Вы присылаете датасет документов — мы оцениваем объём, структуру, язык.
  2. Проектирование: Выбираем embedding-модель, метрику сходства, стратегию индексации.
  3. Реализация: Пишем пайплайн индексации и RAG-запрос. Используем ваш API-ключ к LLM.
  4. Тестирование: Сравниваем baseline (простой поиск) с финальной версией. Метрики — точность, полнота, время ответа.
  5. Деплой: Запускаем в вашем окружении (K8s, Docker, bare metal). Настраиваем мониторинг.

Сроки и стоимость

  • Прототип: 2–5 дней. Идеально для оценки feasibility.
  • Продакшен-версия: 2–3 недели. Включает мониторинг, CI/CD, нагрузочное тестирование.

Стоимость рассчитывается индивидуально под ваш объём данных и требования к latency. Оценим проект за 1 день. Экономия на инфраструктуре достигает 40% за счёт оптимизированного индексирования. Свяжитесь с нами — обсудим детали.

Наш опыт — 5+ лет в AI/ML, 20+ внедрённых RAG-проектов. Сертифицированные специалисты по OpenAI, Hugging Face, Kubernetes. Гарантируем качество: прописываем SLA по точности и latency. Закажите RAG с ChromaDB под ключ — получите работающую систему с нуля до продакшена.