Гайд · TNWS AI
Как задать размерность embeddings через dimensions в Ollama API
Передаём dimensions в /api/embed, проверяем длину каждого вектора и блокируем запись в индекс с несовместимой схемой.
Задача и критерий готовности
Практическая задача — получить embeddings запрошенной размерности и до записи убедиться, что каждый vector совместим со схемой существующего индекса. Готовность подтверждается программным тестом, а не впечатлением от текста. Для каждого сценария ниже заданы вход, ожидаемый наблюдаемый признак и негативная проверка.
Контракт сверён 12 сентября 2026 года по официальной документации Ollama API. Цены, тарифы, региональная доступность и неподтверждённые лимиты не используются: они не нужны для выполнения задачи.
Подтверждённые факты
/api/embedпринимает необязательный параметр dimensions.- Ответ содержит массив embeddings, по одному вектору на каждый input.
- Клиент должен проверять фактическую длину каждого массива.
- Существующий vector index обычно ожидает одну фиксированную размерность для коллекции.
- Поддержка конкретного значения зависит от модели; неподдерживаемый запрос нельзя исправлять выдуманным дополнением нулями.
Эти пункты задают границу решения. Не расширяйте их предположениями: наличие поля не гарантирует истинность содержимого, HTTP 200 не подтверждает бизнес-состояние, а комментарий в коде не заменяет assert.
Подготовка стенда
- Зафиксируйте версию SDK, Ollama и точное имя тестовой модели.
- Используйте fake tool или provider stub для сценариев с побочными эффектами.
- Удалите токены, персональные данные, реальные счета и внутренние пути.
- Добавьте счётчики model calls и tool executions.
- Настройте завершение процесса с ошибкой при несовпадении контракта.
Тестовый ввод должен быть небольшим, но реалистичным. Идентификаторы T-781 и INV-781 в статье вымышлены. Для длинного текста создавайте синтетическую строку без копирования пользовательских документов.
Пошаговые действия
- Определите dimension из схемы новой коллекции, а не из случайного ответа.
- Передайте число в поле dimensions и массив тестовых input.
- Проверьте количество embeddings и длину каждого вектора.
- При несовпадении остановите импорт до записи первой строки и создайте отдельную миграцию индекса.
После каждого действия сохраняйте минимальное доказательство: класс объекта, длину списка, status code, обязательное поле JSON или порядок событий. Полный prompt и raw payload в журнал не нужны.
Копируемый пример
Сохраните пример как отдельный файл языка javascript. Значения в угловых скобках — заполнители; их нельзя выдавать за реальные digest или идентификаторы.
const dimensions = 256; // пример схемы тестовой коллекции
const input = ["Ошибка оплаты", "Двойное списание"];
const res = await fetch("http://localhost:11434/api/embed", {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({model: "all-minilm", input, dimensions})
});
if (!res.ok) throw new Error("embed HTTP " + res.status);
const data = await res.json();
if (data.embeddings.length !== input.length) throw new Error("count mismatch");
for (const vector of data.embeddings)
if (vector.length !== dimensions) throw new Error("dimension mismatch");
Python запускайте в virtualenv проекта, JavaScript — как .mjs в Node.js с fetch. Не смешивайте глобальную и проектную версии. Если импорт отсутствует, сначала проверьте установленную версию, а не подбирайте похожий API.
Реалистичный вход
Вход: два коротких текста и тестовая размерность 256, выбранная только для коллекции, где модель подтверждённо поддерживает это значение.
Ожидаемый результат
Ответ содержит два вектора, каждый длиной 256. Если модель не поддерживает параметр, запрос завершается ошибкой и данные не записываются в индекс.
Ожидание перенесите в assert или throw. Если текст модели недетерминирован, сравнивайте структурный инвариант. Если API возвращает массив, проверяйте число элементов и форму каждого.
Негативная проверка
Измените схему хранилища на другую размерность, не меняя embed-запрос. Pre-write проверка должна остановить импорт до частично записанной коллекции.
Негативный тест должен ломать ровно одно условие. Сетевая ошибка не равна 404, пустой список не равен PASS, новый запуск не равен resume, а локально созданный UUID не равен response ID провайдера.
Готовый prompt для ревью
Проверь pipeline dimensions: значение подтверждено моделью, число векторов равно числу inputs, длина каждого проверена, при mismatch нет padding и частичной записи.
Верни таблицу: условие, доказательство из кода или очищенного лога, PASS/FAIL, минимальное исправление. Если доказательства нет — FAIL. Не додумывай версии, статусы и результаты.
Prompt помогает найти пропуски, но не заменяет исполнение. Вручную проверьте каждую ссылку ревьюера на код: комментарий может быть ошибочно принят за работающую защиту.
Независимая проверка
Составьте матрицу из штатного, ошибочного и пограничного входа. Для каждой строки укажите ожидаемую ветку, наблюдаемый признак и фактический результат. Повторите тест дважды, чтобы обнаружить кеш, старое состояние или двойной side effect.
Для agent run отдельно считайте model responses, tools и RunItem: это разные сущности. Для Ollama проверяйте HTTP и тело. Если операция изменяет модель или индекс, после неё используйте read-only endpoint или схему хранилища как второе доказательство.
В CI сохраняйте exit code, версии и безопасные агрегаты. Не сохраняйте полный raw response, словарь tokenizer, пользовательский prompt или tool arguments без отдельной политики редактирования.
Типичные ошибки
Пустой список принимают за успех
Конструкции вроде all([]) истинны. Если ожидается конкретный guardrail или embedding, сначала проверьте количество элементов, затем их свойства.
Логируют всё для удобства
Raw responses, arguments и verbose model_info могут быть большими или чувствительными. Создайте allowlist полей и сохраняйте только агрегаты, нужные для расследования.
Смешивают идентификаторы
Response ID, trace ID, tool call ID, model tag и SHA-256 отвечают на разные вопросы. Храните их в отдельных колонках и не генерируйте подмену для отсутствующего значения.
Не проверяют версию
Поведение после обновления может измениться. Версия и точное имя модели должны быть частью воспроизводимого отчёта, особенно для snapshot-тестов и tokenizer-данных.
Чек-лист финальной проверки
- Тема, title и slug уникальны.
- API и поля сверены по первоисточнику 12 сентября 2026 года.
- Есть точный вход и программируемый ожидаемый результат.
- Негативный тест активирует нужную противоположную ветку.
- Секреты, PII и реальные реквизиты исключены.
- Счётчики разделяют model, tool и item events.
- Проверяется форма массива и каждый элемент.
- Полный raw или verbose payload не уходит в журнал.
- Повторный запуск не создаёт ложный успех.
- Ограничения не заменены выдуманными метриками.
Ограничения
Этот материал проверяет один технический контракт, но не точность модели, безопасность всей системы и не производительность вашего сервера. Конкретные пределы контекста, поддерживаемые dimensions, размеры и скорость зависят от модели и окружения; их измеряют на собственном стенде.
Approval не заменяет авторизацию, typed output не гарантирует истинность, release ссылок не обещает мгновенное падение RSS, а seed не гарантирует одинаковый ответ после смены модели. Такие границы должны оставаться явными в рабочей документации.
FAQ
Почему нет универсальных чисел?
Потому что они зависят от версии и модели. Используйте фактический ответ вашего стенда и фиксируйте дату измерения.
Достаточно ли HTTP 200?
Нет. Проверяйте контрактный status, обязательные поля и при необходимости независимое состояние.
Можно ли доверить проверку нейросети?
Она полезна для ревью, но PASS выставляет исполняемый тест или проверенный ответ API.
Что сохранять в отчёте?
Версии, безопасные идентификаторы, агрегаты, exit code и результат каждого assert — без секретов и полного пользовательского содержимого.
Первоисточник
- Официальная документация Ollama API — проверено 12 сентября 2026 года.
Материал подготовлен самостоятельно; примеры не выдают синтетические данные за результаты реального бенчмарка.
Читайте также
Как квантовать FP16-модель через Ollama API /api/create
Создаём отдельный q4_K_M-вариант из FP16-модели, проверяем progress, финальный success и не перезаписываем исходное имя.
Как подключить LoRA adapter при создании модели через Ollama API
Загружаем adapter как blob, передаём словарь adapters в /api/create, проверяем success и сохраняем базовую модель без изменений.
Как проверить наличие blob в Ollama API через HEAD-запрос
Вычисляем SHA-256, вызываем HEAD /api/blobs/:digest и различаем подтверждённые статусы 200 и 404 перед созданием модели.
Комментарии
Пока тихо. Скажите первое слово