> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/rag-i-vektornye-bazy-dannykh/weaviate.md).

# Weaviate

{% hint style="info" %}
**Weaviate** — это векторная база данных с ИИ-нативной архитектурой и открытым исходным кодом, предназначенная для семантического поиска, гибридного поиска и приложений RAG (Retrieval-Augmented Generation). Она хранит как объекты, так и их векторные представления и поддерживает встроенную интеграцию ML-моделей.
{% endhint %}

## Обзор

Weaviate выходит за рамки традиционных векторных баз данных, нативно интегрируя ML-модели для автоматической векторизации при импорте и во время запроса. Она поддерживает несколько типов данных (текст, изображения, видео, аудио), встроенный гибридный поиск, сочетающий BM25 и векторную схожесть, а также многопользовательские развертывания. Weaviate готова к продакшену, cloud-native и спроектирована так, чтобы масштабироваться от прототипов до миллиардов векторов.

| Параметр         | Значение                                                  |
| ---------------- | --------------------------------------------------------- |
| **Категория**    | Инфраструктура векторной БД / RAG                         |
| **Разработчик**  | Weaviate B.V.                                             |
| **Лицензия**     | BSD 3-Clause                                              |
| **GitHub**       | [weaviate/weaviate](https://github.com/weaviate/weaviate) |
| **Звезды**       | 12 тыс.+                                                  |
| **Docker-образ** | `cr.weaviate.io/semitechnologies/weaviate`                |
| **Порты**        | 22 (SSH), 8080 (HTTP API / GraphQL)                       |

***

## Ключевые особенности

* **Гибридный поиск по векторам + ключевым словам** — объединяйте полнотекстовый BM25 с векторной схожестью в одном запросе
* **Встроенные векторизаторы** — автоматически векторизуйте данные при импорте с помощью OpenAI, Cohere, HuggingFace или локальных моделей
* **Мультимодальный** — храните и ищите текст, изображения, видео и аудио в одной базе данных
* **API GraphQL** — выразительный язык запросов для сложных семантических запросов
* **REST API** — полные CRUD-операции и управление схемой
* **Мультиарендность** — изоляция данных по арендаторам на общей инфраструктуре
* **Индексация HNSW** — быстрый приближенный поиск ближайших соседей
* **Фильтрованный поиск** — сочетайте векторный поиск с традиционными фильтрами метаданных
* **Генеративный поиск** — встроенный RAG с интеграцией LLM
* **Горизонтальное масштабирование** — шардирование и репликация по нескольким узлам
* **Система модулей** — подключайте векторизаторы, считыватели, генераторы

***

## Настройка Clore.ai

### Шаг 1 — Выберите оборудование

| Сценарий использования                      | Рекомендуется | ОЗУ    | Хранилище |
| ------------------------------------------- | ------------- | ------ | --------- |
| Разработка / прототипирование               | CPU-инстанс   | 8 ГБ   | 20 ГБ     |
| Небольшой продакшен (< 1 млн векторов)      | CPU-инстанс   | 16 ГБ  | 50 ГБ     |
| Масштабное использование (10 млн+ векторов) | GPU-инстанс   | 32 ГБ+ | 200 ГБ+   |
| Векторизация с ускорением на GPU            | RTX 4090      | 24 ГБ  | 100 ГБ    |

{% hint style="info" %}
Сама Weaviate работает на CPU. Используйте GPU-инстансы на Clore.ai, когда вам нужен **локальный embedding-модель** инференс (например, `text2vec-transformers` с локальной моделью) для быстрой векторизации во время импорта.
{% endhint %}

### Шаг 2 — Арендуйте сервер на Clore.ai

1. Перейдите на [маркетплейсе clore.ai](https://clore.ai) → **Маркетплейс**
2. Для чистого векторного поиска: CPU-инстансы с **≥ 16 ГБ RAM**
3. Для эмбеддингов с ускорением на GPU: **RTX 3090 или 4090**
4. Откройте порты: **22** и **8080**
5. Убедитесь, что **≥ 50 ГБ диска** для хранения векторов

### Шаг 3 — Разверните с Docker

**Минимальное развертывание (без векторизатора):**

```bash
docker run -d \
    --name weaviate \
    -p 8080:8080 \
    -p 50051:50051 \
    -v /opt/weaviate/data:/var/lib/weaviate \
    -e QUERY_DEFAULTS_LIMIT=20 \
    -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
    -e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
    -e DEFAULT_VECTORIZER_MODULE=none \
    -e ENABLE_MODULES="" \
    -e CLUSTER_HOSTNAME=node1 \
    cr.weaviate.io/semitechnologies/weaviate:latest
```

**С векторизатором OpenAI:**

```bash
docker run -d \
    --name weaviate \
    -p 8080:8080 \
    -v /opt/weaviate/data:/var/lib/weaviate \
    -e QUERY_DEFAULTS_LIMIT=20 \
    -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
    -e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
    -e DEFAULT_VECTORIZER_MODULE=text2vec-openai \
    -e ENABLE_MODULES=text2vec-openai,generative-openai \
    -e OPENAI_APIKEY=<your-openai-key> \
    -e CLUSTER_HOSTNAME=node1 \
    cr.weaviate.io/semitechnologies/weaviate:latest
```

**С локальным векторизатором HuggingFace (с ускорением на GPU):**

```yaml
# docker-compose.yml
version: '3.4'

services:
  weaviate:
    image: cr.weaviate.io/semitechnologies/weaviate:latest
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "50051:50051"
    volumes:
      - /opt/weaviate/data:/var/lib/weaviate
    environment:
      QUERY_DEFAULTS_LIMIT: 20
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: text2vec-transformers
      ENABLE_MODULES: 'text2vec-transformers,generative-openai'
      TRANSFORMERS_INFERENCE_API: 'http://t2v-transformers:8080'
      CLUSTER_HOSTNAME: 'node1'

  t2v-transformers:
    image: cr.weaviate.io/semitechnologies/transformers-inference:sentence-transformers-multi-qa-MiniLM-L6-cos-v1
    environment:
      ENABLE_CUDA: '1'
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
```

Запуск:

```bash
mkdir -p /opt/weaviate/data
docker-compose up -d
```

***

## Доступ к API

### HTTP/REST API

```
http://<server-ip>:8080
```

### Конечная точка GraphQL

```
http://<server-ip>:8080/v1/graphql
```

### Проверка работоспособности

```bash
curl http://<server-ip>:8080/v1/.well-known/ready
# Возвращает: {}  (HTTP 200 = работоспособен)
```

### Через SSH

```bash
ssh root@<server-ip> -p 22
```

***

## Python-клиент

### Установка

```bash
pip install weaviate-client
```

### Подключение

```python
import weaviate
import weaviate.classes as wvc

# Подключитесь к вашему экземпляру Clore.ai
client = weaviate.connect_to_custom(
    http_host="<server-ip>",
    http_port=8080,
    http_secure=False,
    grpc_host="<server-ip>",
    grpc_port=50051,
    grpc_secure=False,
)

print(client.is_ready())  # True, если работоспособен
```

***

## Схема и коллекции

### Создание коллекции

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

client = weaviate.connect_to_custom(
    http_host="<server-ip>", http_port=8080,
    grpc_host="<server-ip>", grpc_port=50051,
    http_secure=False, grpc_secure=False,
)

# Создайте коллекцию (в v3 это называлось "class")
client.collections.create(
    name="Article",
    vectorizer_config=Configure.Vectorizer.none(),  # Мы будем предоставлять собственные векторы
    # Или: Configure.Vectorizer.text2vec_openai() для автоматической векторизации
    properties=[
        Property(name="title", data_type=DataType.TEXT),
        Property(name="content", data_type=DataType.TEXT),
        Property(name="author", data_type=DataType.TEXT),
        Property(name="published_date", data_type=DataType.DATE),
        Property(name="tags", data_type=DataType.TEXT_ARRAY),
        Property(name="view_count", data_type=DataType.INT),
    ],
)
print("Коллекция 'Article' создана")
```

***

## Импорт данных

### Пакетный импорт с предварительно вычисленными векторами

```python
import weaviate
import numpy as np
from sentence_transformers import SentenceTransformer

client = weaviate.connect_to_custom(
    http_host="<server-ip>", http_port=8080,
    grpc_host="<server-ip>", grpc_port=50051,
    http_secure=False, grpc_secure=False,
)

# Загрузите модель эмбеддингов
encoder = SentenceTransformer("all-MiniLM-L6-v2")

# Пример статей
articles = [
    {"title": "Введение в RAG", "content": "RAG сочетает поиск с генерацией..."},
    {"title": "Объяснение векторных баз данных", "content": "Векторные базы данных хранят высокоразмерные эмбеддинги..."},
    {"title": "Лучшие практики Weaviate", "content": "Для продакшен-развертываний Weaviate рассмотрите..."},
    {"title": "Облачные вычисления с GPU", "content": "Clore.ai предоставляет децентрализованный доступ к GPU..."},
]

# Пакетный импорт с векторами
collection = client.collections.get("Article")

with collection.batch.dynamic() as batch:
    for article in articles:
        # Вычислите вектор
        vector = encoder.encode(article["content"]).tolist()

        batch.add_object(
            properties={
                "title": article["title"],
                "content": article["content"],
            },
            vector=vector,
        )

print(f"Импортировано {len(articles)} статей")
```

### Автоматическая векторизация с OpenAI (при импорте)

```python
# Когда коллекция использует векторизатор text2vec-openai,
# просто вставляйте данные — вектор не нужен
collection = client.collections.get("ArticleOpenAI")

with collection.batch.dynamic() as batch:
    for article in articles:
        batch.add_object(
            properties={
                "title": article["title"],
                "content": article["content"],
            }
            # Без вектора = Weaviate автоматически векторизует через OpenAI
        )
```

***

## Запросы

### Семантический (векторный) поиск

```python
# Найти статьи, семантически похожие на запрос
results = collection.query.near_text(
    query="как эффективно хранить эмбеддинги",
    limit=5,
    return_properties=["title", "content"],
    return_metadata=wvc.query.MetadataQuery(distance=True),
)

for obj in results.objects:
    print(f"Заголовок: {obj.properties['title']}")
    print(f"Расстояние: {obj.metadata.distance:.4f}")
    print()
```

### Гибридный поиск (вектор + BM25)

```python
# Сочетайте семантический поиск и поиск по ключевым словам
results = collection.query.hybrid(
    query="RAG, генерация с дополненным поиском",
    alpha=0.5,  # 0.0 = только BM25, 1.0 = только вектор, 0.5 = сбалансировано
    limit=5,
    return_properties=["title", "content"],
    return_metadata=wvc.query.MetadataQuery(score=True),
)

for obj in results.objects:
    print(f"Заголовок: {obj.properties['title']}")
    print(f"Гибридный балл: {obj.metadata.score:.4f}")
```

### Поиск по ключевым словам (BM25)

```python
results = collection.query.bm25(
    query="индексация векторной базы данных",
    limit=5,
    return_properties=["title"],
)
```

### Фильтрованный поиск

```python
from weaviate.classes.query import Filter

# Сочетайте векторный поиск с фильтром по метаданным
results = collection.query.near_text(
    query="обучение модели машинного обучения",
    limit=10,
    filters=Filter.by_property("view_count").greater_than(1000),
    return_properties=["title", "view_count"],
)
```

### Запрос GraphQL

```python
import requests

query = """
{
    Get {
        Article(
            nearText: {concepts: ["искусственный интеллект"]}
            limit: 5
        ) {
            title
            content
            _additional {
                distance
                id
            }
        }
    }
}
"""

response = requests.post(
    "http://<server-ip>:8080/v1/graphql",
    json={"query": query},
)
data = response.json()
for article in data["data"]["Get"]["Article"]:
    print(article["title"])
```

***

## Генеративный поиск (RAG)

```python
from weaviate.classes.generate import GenerateOptions

# Настройте коллекцию с генеративным модулем (OpenAI)
# Требуется ENABLE_MODULES=generative-openai

results = collection.generate.near_text(
    query="как построить систему RAG",
    limit=3,
    grouped_task="Суммируйте эти статьи и объясните ключевые шаги построения системы RAG.",
    grouped_properties=["title", "content"],
)

print("Ответ RAG:")
print(results.generated)
print("\nИсходные статьи:")
for obj in results.objects:
    print(f"  - {obj.properties['title']}")
```

***

## Мультиарендность

```python
from weaviate.classes.config import Configure

# Создайте коллекцию с поддержкой мультиарендности
client.collections.create(
    name="UserDocuments",
    multi_tenancy_config=Configure.multi_tenancy(enabled=True),
    properties=[
        Property(name="content", data_type=DataType.TEXT),
        Property(name="filename", data_type=DataType.TEXT),
    ],
)

# Создайте арендаторов
collection = client.collections.get("UserDocuments")
collection.tenants.create([
    wvc.config.Tenant(name="user_alice"),
    wvc.config.Tenant(name="user_bob"),
])

# Вставьте данные для конкретного арендатора
tenant_collection = collection.with_tenant("user_alice")
tenant_collection.data.insert({"content": "Частный документ Алисы", "filename": "doc1.pdf"})

# Запрос внутри арендатора
results = collection.with_tenant("user_alice").query.near_text(
    query="частный документ",
    limit=5,
)
```

***

## Примеры REST API

```bash
# Создайте класс схемы
curl -X POST http://<server-ip>:8080/v1/schema \
    -H "Content-Type: application/json" \\
    -d '{
        "class": "Product",
        "vectorizer": "none",
        "properties": [
            {"name": "name", "dataType": ["text"]},
            {"name": "description", "dataType": ["text"]},
            {"name": "price", "dataType": ["number"]}
        ]
    }'

# Добавьте объект с вектором
curl -X POST http://<server-ip>:8080/v1/objects \
    -H "Content-Type: application/json" \\
    -d '{
        "class": "Product",
        "properties": {
            "name": "Доступ к GPU в облаке",
            "description": "Децентрализованный рынок GPU",
            "price": 0.5
        },
        "vector": [0.1, 0.2, 0.3, ...]
    }'

# Векторный поиск
curl http://<server-ip>:8080/v1/objects?class=Product&limit=5

# Проверка состояния
curl http://<server-ip>:8080/v1/.well-known/ready
```

***

## Устранение неполадок

{% hint style="warning" %}
**Weaviate не запускается** — Проверьте место на диске (`df -h`). Weaviate требуется доступное для записи пространство в пути данных. Также убедитесь, что порт 8080 открыт в настройках Clore.ai.
{% endhint %}

{% hint style="warning" %}
**Медленный импорт** — Включите пакетный импорт (`collection.batch.dynamic()` или `fixed_size()`). Избегайте импорта по одному объекту для больших наборов данных. Оптимальный размер пакета — 100–500.
{% endhint %}

{% hint style="info" %}
**Высокое потребление памяти** — Weaviate хранит векторный индекс в RAM для быстрого поиска. Для 1 млн векторов размерности 768: около 6 ГБ RAM. Планируйте это при выборе размера инстанса Clore.ai.
{% endhint %}

{% hint style="info" %}
**Не удается подключиться через Python-клиент** — Убедитесь, что открыты порт 8080 (HTTP) и порт 50051 (gRPC). Python-клиент v4 по умолчанию использует gRPC.
{% endhint %}

| Проблема                  | Исправьте                                                                          |
| ------------------------- | ---------------------------------------------------------------------------------- |
| `Соединение отклонено`    | Дождитесь запуска (\~30 сек), проверьте `docker ps`, проверьте порты               |
| `Схема уже существует`    | Сначала удалите коллекцию: `client.collections.delete("Name")`                     |
| `Не хватает памяти`       | Увеличьте RAM или уменьшите размерность векторов                                   |
| Медленный векторный поиск | Добавьте индекс HNSW или проверьте размер набора данных относительно доступной RAM |

***

## Советы по производительности

1. **Используйте пакетный импорт** — в 10–50 раз быстрее, чем одиночные вставки
2. **Выберите подходящую модель эмбеддингов** — `all-MiniLM-L6-v2` (384 измерения) — быстро; `text-embedding-3-large` (3072 измерения) — наилучшее качество, но использует в 8 раз больше RAM
3. **Параметр alpha гибридного поиска** — настройте `alpha` под ваш сценарий: 0.25 для запросов с упором на ключевые слова, 0.75 для семантических запросов
4. **Параметры HNSW** — `ef` и `efConstruction` управляет компромиссом между полнотой и скоростью
5. **Изоляция арендаторов** — используйте мультиарендность для SaaS-приложений; она масштабируется намного лучше, чем отдельные коллекции для каждого пользователя

***

## Связанные инструменты

* [Qdrant](/guides/guides_v2-ru/rag-i-vektornye-bazy-dannykh/qdrant.md) — векторная база данных на Rust с фильтрами по полезной нагрузке
* [ChromaDB](/guides/guides_v2-ru/rag-i-vektornye-bazy-dannykh/chromadb.md) — легковесная база данных эмбеддингов
* [Milvus](/guides/guides_v2-ru/rag-i-vektornye-bazy-dannykh/milvus.md) — векторная база данных для больших масштабов

***

*Weaviate на Clore.ai дает вам векторную базу данных уровня production с векторизацией, ускоренной на GPU, — идеальное решение для построения масштабируемых систем RAG и приложений семантического поиска.*

***

## Рекомендации по GPU для Clore.ai

| Сценарий использования                                  | Рекомендуемый GPU | Оценочная стоимость на Clore.ai |
| ------------------------------------------------------- | ----------------- | ------------------------------- |
| Разработка/тестирование                                 | RTX 3090 (24 ГБ)  | $0.07–0.21/гпу/ч                |
| Продакшен-векторный поиск                               | RTX 3090 (24 ГБ)  | $0.07–0.21/гпу/ч                |
| Генерация эмбеддингов с высокой пропускной способностью | RTX 4090 (24 ГБ)  | $0.14–0.42/гпу/ч                |

> 💡 Все примеры в этом руководстве можно развернуть на [Clore.ai](https://clore.ai/marketplace) GPU-серверах. Просматривайте доступные GPU и арендуйте по часам — без обязательств, с полным root-доступом.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/rag-i-vektornye-bazy-dannykh/weaviate.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
