Разработка RAG с векторной базой данных Weaviate

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Разработка RAG с векторной базой данных Weaviate
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Разработка RAG с векторной базой данных Weaviate

Weaviate — открытая векторная база данных с GraphQL/REST API, модульной архитектурой и встроенной поддержкой нескольких форматов поиска (векторный, BM25, hybrid). Отличительные особенности: нативные модули интеграции с embedding-провайдерами (OpenAI, Cohere, HuggingFace), GraphQL для сложных запросов и rich schema для метаданных.

Установка и инициализация

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
)

Hybrid поиск:

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)
  • Hybrid search, alpha=0.65 (чуть больше вес dense)

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

Метрика Только dense Hybrid (α=0.65) Hybrid + rerank
Context Precision 0.71 0.82 0.89
Context Recall 0.74 0.81 0.84
Faithfulness 0.79 0.88 0.92

Hybrid search дал +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 недель