chat/completions по вашему ключу.
Важны ровно две вещи:
base_url = "https://speshu.ai/api/v1" и API-ключ из профиля. Weaviate работает с OpenAI-совместимыми эндпоинтами, поэтому отдельного провайдера настраивать не нужно — достаточно сменить адрес и ключ. В примерах ниже генерация идёт через официальный OpenAI-клиент, у которого есть поле base_url; модуль generative_config в самом Weaviate разобран в разделе Генерация штатным модулем Weaviate.Установка
weaviate-client — официальный Python-клиент. Сервер Weaviate при этом поднимается отдельно: локально через Docker, либо берётся как управляемый инстанс.
connect_to_local(). Для облака — weaviate.connect_to_weaviate_cloud(cluster_url=..., auth_credentials=Auth.api_key(...)), для произвольного адреса — weaviate.connect_to_custom(http_host=..., http_port=..., grpc_port=..., auth_credentials=...).
Конфигурация
Два независимых клиента: Weaviate работает с вашими векторами, OpenAI-клиент — только с генерацией.Python
404 model_not_found.
cURL
Python
id в вашем конфиге такую ошибку не поймает.
Индексация
wc.Configure.Vectors.self_provided() объявляет, что векторы считаете вы, а не встроенный vectorizer Weaviate.
Python
Создание коллекции, если она уже есть, падает. Для повторного прогона скрипта проверка
collections.exists() выше обязательна — без неё скрипт не переживёт второй запуск.Поиск и ответ
Python
usage.cost.total_cost — единственное поле, по которому считается расход, в рублях. Подробности — в разделе Учёт средств.
Вариант без эмбеддингов
Если эмбеддингов у вас нет, Weaviate всё равно полезен: он становится хранилищем готовых векторов или источником для фильтруемого RAG, где отбор идёт по свойствам, а не по близости.Python
Качество такого отбора целиком определяется тем, насколько хорош ваш
source или любой другой тег. Это осознанный компромисс: без эмбеддингов поиск становится фильтрацией, а не семантикой.Генерация штатным модулем Weaviate
Weaviate умеет вызывать генеративную модель сам, из коробки — без отдельного OpenAI-клиента. Это работает начиная с версий Weaviate 1.25+ (weaviate-client 4.7+), поле называется generative_config; в более старых релизах его нет, и пример не сработает.
Python
Продвинутые возможности
Weaviate ничего не добавляет к формату запроса — SpeShu.AI отвечает на обычные вызовы. Всё остальное разбирается в канонических гайдах:- Потоковая передача —
stream: trueвspeshu.chat.completions.create(...), ответ печатается по частям, кадр сusageприходит последним: Потоковая передача. - Вызов функций — объявляете
tools, выполняете вызовы, возвращаете результат сообщениями с рольюtool: Вызов функций. - Структурированный вывод —
response_formatс JSON Schema, если модель это поддерживает: Структурированный вывод. - Генерация изображений — отдельный API, результат приходит по опросу задачи: Создание медиа-задачи.
query.hybrid) в Weaviate требует отдельно настроенной BM25-конфигурации коллекции и не связан с генерацией — это часть настройки хранилища, а не SpeShu.AI.
Частые проблемы
404 на попытке вызвать эмбеддинги через SpeShu.AI
404 на попытке вызвать эмбеддинги через SpeShu.AI
Эндпоинта
/api/v1/embeddings в API нет. Проверьте, что у OpenAI-клиента, который считает векторы, в base_url стоит адрес эмбеддинг-провайдера, а не https://speshu.ai/api/v1. Клиент для генерации должен указывать на SpeShu.AI.401 invalid_api_key при вставке документов
401 invalid_api_key при вставке документов
Ключ не отправлен или отправлен не туда. Строка подключения Weaviate — это адрес gRPC-сервера (
grpc://localhost:50051), а не HTTP-эндпоинт; ключ в неё не вставляется. Проверьте ключ отдельно, запросом баланса: curl -s https://speshu.ai/api/v1/balance -H "Authorization: Bearer $SPESHU_API_KEY".404 model_not_found на генерации
404 model_not_found на генерации
Идентификатор модели устарел. Возьмите его заново из
GET /api/v1/models и подставьте как есть — без префикса и без обрезки. Формат ответа — в Каталоге моделей.Коллекция не создаётся при повторном запуске
Коллекция не создаётся при повторном запуске
collections.create() на существующем имени падает. Оберните создание в if not client.collections.exists(NAME) либо удаляйте коллекцию перед пересозданием — как в примере выше. Внимание: delete уничтожает все объекты коллекции.Поиск возвращает пустой результат на непустой коллекции
Поиск возвращает пустой результат на непустой коллекции
Проверьте три вещи: вставка действительно прошла (у
insert есть возвращаемый UUID), вектор при вставке не None, а размерность векторов совпадает с настройкой коллекции. Отдельно: near_vector ищет только по векторам, а не по тексту — свойства сами по себе не находятся.Ответ модели не опирается на найденный контекст
Ответ модели не опирается на найденный контекст
Либо в
context попал пустой результат поиска, либо длина запроса перевалила за context_length модели и контекст обрезался. Актуальную длину окна смотрите в поле context_length каталога. Формат ошибок — в разделе Ошибки.Что дальше
Запрос чату
Роли, блоки контента, параметры генерации
Потоковая передача
SSE,
[DONE] и кадр со списаниемВызов функций
Полный цикл вызова инструмента
Модели и цены
Как выбрать модель и посчитать бюджет
