Разработка RAG с векторной базой данных ChromaDB
ChromaDB — открытая векторная база данных, ориентированная на простоту использования. Не требует внешних зависимостей для локального запуска, поддерживает in-memory и persistent режимы. ChromaDB — стандартный выбор для прототипирования RAG-систем и небольших production-деплоев (до нескольких миллионов документов).
Запуск и подключение
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("Какой срок действия договора?")
Сроки
- Прототип RAG с ChromaDB: 2–5 дней
- Production-версия с мониторингом: 2–3 недели







