Розробка RAG з векторною базою даних Weaviate

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Розробка RAG з векторною базою даних Weaviate
Середній
від 1 тижня до 3 місяців
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Розробка RAG з векторною базою даних Weaviate

Weaviate — відкрита векторна база даних з GraphQL/REST API, модульною архітектурою та вбудованою підтримкою кількох форматів пошуку (векторний, BM25, гібридний). Відмінні особливості: нативні модулі інтеграції з embedding-провайдерами (OpenAI, Cohere, HuggingFace), GraphQL для складних запитів та багата схема для метаданих.

Встановлення та ініціалізація

import weaviate
import weaviate.classes as wvc
from weaviate.classes.config import Configure, Property, DataType

# Підключення до локального Weaviate
client = weaviate.connect_to_local(
    host="localhost",
    port=8080,
    grpc_port=50051,
)

# Або до Weaviate Cloud
client = weaviate.connect_to_wcs(
    cluster_url="https://your-cluster.weaviate.network",
    auth_credentials=weaviate.auth.AuthApiKey("..."),
)

Створення схеми колекції

client.collections.create(
    name="KnowledgeBase",
    vectorizer_config=Configure.Vectorizer.text2vec_openai(
        model="text-embedding-3-large",
        dimensions=3072,
    ),
    generative_config=Configure.Generative.openai(model="gpt-4o"),
    properties=[
        Property(name="content", data_type=DataType.TEXT),
        Property(name="source", data_type=DataType.TEXT),
        Property(name="doc_type", data_type=DataType.TEXT),
        Property(name="page_number", data_type=DataType.INT),
        Property(name="date", data_type=DataType.DATE),
        Property(name="department", data_type=DataType.TEXT),
    ],
)

Weaviate автоматично векторизує текст через вказаний модуль — не потрібно вручну викликати embedding API під час індексації.

Індексація документів

collection = client.collections.get("KnowledgeBase")

# Батчева завантаження
with collection.batch.dynamic() as batch:
    for chunk in document_chunks:
        batch.add_object(
            properties={
                "content": chunk.page_content,
                "source": chunk.metadata["source"],
                "doc_type": chunk.metadata.get("doc_type", "general"),
                "page_number": chunk.metadata.get("page", 0),
                "department": chunk.metadata.get("department", ""),
            }
        )

Типи пошуку у Weaviate

Векторний пошук (near_text):

results = collection.query.near_text(
    query="процедура узгодження договору",
    limit=5,
    return_metadata=wvc.query.MetadataQuery(score=True, distance=True),
    filters=wvc.query.Filter.by_property("doc_type").equal("contract"),
)

BM25 пошук:

results = collection.query.bm25(
    query="узгодження договору оренди",
    limit=5,
    query_properties=["content"],  # Поля для BM25
)

Гібридний пошук:

results = collection.query.hybrid(
    query="процедура узгодження",
    alpha=0.75,   # 0=BM25, 1=vector
    limit=5,
    fusion_type=wvc.query.HybridFusion.RELATIVE_SCORE,  # або RANKED
)

Генеративний пошук (RAG через Weaviate)

Weaviate може виконувати RAG безпосередньо через Generative модуль:

# Вбудована RAG — retrieval + generation в одному запиті
response = collection.generate.near_text(
    query="Який порядок узгодження закупки?",
    limit=3,
    single_prompt="На основі наступного документа відповідь на запитання: {content}\n\nЗапитання: Який порядок узгодження закупки?",
    grouped_task="Підсумуй ключові кроки процедури узгодження закупки на основі наданих документів.",
)

print(response.generated)  # Відповідь LLM

Практичний кейс: RAG для юридичної фірми

Завдання: помічник для юристів з українського законодавства — пошук у НПА, судовій практиці, внутрішніх методиках.

Обсяг: 28 000 документів (~4.2M чанків при розмірі 300 токенів).

Конфігурація Weaviate:

  • Self-hosted на k8s (3 реплики)
  • text2vec-openai (text-embedding-3-large, dimension=3072)
  • Гібридний пошук, alpha=0.65 (трохи більше вага dense)

Результати RAGAS:

Метрика Лише dense Гібридний (α=0.65) Гібридний + rerank
Context Precision 0.71 0.82 0.89
Context Recall 0.74 0.81 0.84
Faithfulness 0.79 0.88 0.92

Гібридний пошук дав +12% до precision порівняно з чистим dense, особливо для запитів з точними термінами (номери статей, специфічні юридичні конструкції, які embedding моделі погано розрізняють).

Мультитенантність у Weaviate

Для SaaS-продуктів або ізоляції даних між клієнтами:

# Створення колекції з multitenancy
client.collections.create(
    name="ClientDocs",
    multi_tenancy_config=Configure.multi_tenancy(enabled=True),
    ...
)

# Створення tenant
collection = client.collections.get("ClientDocs")
collection.tenants.create([wvc.tenants.Tenant(name="client_001")])

# Запит у контексті конкретного tenant
tenant_collection = collection.with_tenant("client_001")
results = tenant_collection.query.hybrid(query="...", limit=5)

Строки

  • Налаштування Weaviate + схема: 2–3 дні
  • Ingestion pipeline: 3–7 днів
  • RAG-пайплайн з оцінкою: 1–2 тижні
  • Мультитенантність та production: 1–2 тижні
  • Всього: 2–5 тижнів