> 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** является AI-нативной, открытой в исходном коде векторной базой данных, разработанной для семантического поиска, гибридного поиска и приложений RAG (Retrieval-Augmented Generation). Она хранит как объекты, так и их векторные эмбеддинги и поддерживает встроенную интеграцию ML-моделей.
{% endhint %}

## Обзор

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

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

***

## Ключевые возможности

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

***

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

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

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

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

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

1. Перейдите на [clore.ai](https://clore.ai) → **Маркетплейс**
2. Для чистого векторного поиска: CPU-инстансы с **≥ 16 ГБ ОЗУ**
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 endpoint

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

### Проверка состояния (Health Check)

```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": "Introduction to RAG", "content": "RAG combines retrieval with generation..."},
    {"title": "Vector Databases Explained", "content": "Vector databases store high-dimensional embeddings..."},
    {"title": "Weaviate Best Practices", "content": "For production Weaviate deployments, consider..."},
    {"title": "GPU Cloud Computing", "content": "Clore.ai provides decentralized GPU access..."},
]

# Пакетный импорт с векторами
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 автo-векторизует через OpenAI
        )
```

***

## Запросы

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

```python
# Найти статьи, семантически похожие на запрос
results = collection.query.near_text(
    query="how to store embeddings efficiently",
    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 retrieval augmented generation",
    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="vector database indexing",
    limit=5,
    return_properties=["title"],
)
```

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

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

# Комбинируйте векторный поиск с фильтром метаданных
results = collection.query.near_text(
    query="machine learning training",
    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: ["artificial intelligence"]}
            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="how to build a RAG system",
    limit=3,
    grouped_task="Summarize these articles and explain the key steps to build a RAG system.",
    grouped_properties=["title", "content"],
)

print("RAG Answer:")
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": "Alice's private document", "filename": "doc1.pdf"})

# Запрос в пределах арендатора
results = collection.with_tenant("user_alice").query.near_text(
    query="private document",
    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 Cloud Access",
            "description": "Decentralized GPU marketplace",
            "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 держит векторный индекс в оперативной памяти для быстрого поиска. Для 1M векторов размерности 768: \~6 ГБ ОЗУ. Планируйте соответственно при выборе размера инстанса в Clore.ai.
{% endhint %}

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

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

***

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

1. **Используйте пакетные импорты** — в 10–50 раз быстрее, чем одиночные вставки
2. **Выберите правильную модель эмбеддингов** — `all-MiniLM-L6-v2` (384 измерения) быстрый; `text-embedding-3-large` (3072 измерения) обеспечивает лучшее качество, но использует в 8 раз больше ОЗУ
3. **Параметр alpha для гибридного поиска** — настройте `alpha` для вашего случая: 0.25 для запросов с упором на ключевые слова, 0.75 для семантических запросов
4. **Параметры HNSW** — `ef` и `efConstruction` контролируют компромисс между полнотой поиска и скоростью
5. **Изоляция арендаторов** — используйте multi-tenancy для 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 предоставляет вам векторную базу данных промышленного уровня с GPU-ускоренной векторизацией — идеально подходит для создания масштабируемых RAG-систем и приложений семантического поиска.*

***

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

| Сценарий использования                   | Рекомендуемый GPU | Примерная стоимость на Clore.ai |
| ---------------------------------------- | ----------------- | ------------------------------- |
| Разработка/Тестирование                  | RTX 3090 (24GB)   | \~$0.12/gpu/hr                  |
| Производственный векторный поиск         | RTX 3090 (24GB)   | \~$0.12/gpu/hr                  |
| Высокопропускная способность эмбеддингов | RTX 4090 (24GB)   | \~$0.70/gpu/hr                  |

> 💡 Все примеры в этом руководстве можно развернуть на [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.
