Гайд · TNWS AI
Как использовать raw mode в Ollama /api/generate без двойного шаблона
Передаём готовый шаблон prompt с raw:true, отключаем автоматическое форматирование и проверяем отсутствие context в ответе raw mode.
Задача и критерий готовности
Практическая задача — отправить полностью сформированный model-specific prompt без повторного применения шаблона Ollama и явно учесть отсутствие context в raw mode. Готовность подтверждается программным тестом, а не впечатлением от текста. Для каждого сценария ниже заданы вход, ожидаемый наблюдаемый признак и негативная проверка.
Контракт сверён 12 сентября 2026 года по официальной документации Ollama API. Цены, тарифы, региональная доступность и неподтверждённые лимиты не используются: они не нужны для выполнения задачи.
Подтверждённые факты
raw:trueотключает форматирование prompt шаблоном Ollama.- Режим предназначен для случая, когда клиент уже передаёт полный templated prompt.
- Официальная документация отмечает, что raw mode не возвращает context.
- Для одного JSON-ответа удобно задать stream:false.
- Raw mode переносит ответственность за корректные специальные токены и роли на клиента.
Эти пункты задают границу решения. Не расширяйте их предположениями: наличие поля не гарантирует истинность содержимого, HTTP 200 не подтверждает бизнес-состояние, а комментарий в коде не заменяет assert.
Подготовка стенда
- Зафиксируйте версию SDK, Ollama и точное имя тестовой модели.
- Используйте fake tool или provider stub для сценариев с побочными эффектами.
- Удалите токены, персональные данные, реальные счета и внутренние пути.
- Добавьте счётчики model calls и tool executions.
- Настройте завершение процесса с ошибкой при несовпадении контракта.
Тестовый ввод должен быть небольшим, но реалистичным. Идентификаторы T-781 и INV-781 в статье вымышлены. Для длинного текста создавайте синтетическую строку без копирования пользовательских документов.
Пошаговые действия
- Получите шаблон только из официальной карточки или show вашей точной модели.
- Сформируйте полный prompt и передайте raw:true.
- Проверьте done:true и непустой response, но не требуйте context.
- Добавьте тест, запрещающий продолжение диалога через отсутствующий context; для чата используйте messages API.
После каждого действия сохраняйте минимальное доказательство: класс объекта, длину списка, status code, обязательное поле JSON или порядок событий. Полный prompt и raw payload в журнал не нужны.
Копируемый пример
Сохраните пример как отдельный файл языка javascript. Значения в угловых скобках — заполнители; их нельзя выдавать за реальные digest или идентификаторы.
const fullPrompt = "[INST] Кратко классифицируй тикет T-781 [/INST]";
const res = await fetch("http://localhost:11434/api/generate", {
method: "POST",
headers: {"content-type": "application/json"},
body: JSON.stringify({
model: "mistral", prompt: fullPrompt, raw: true, stream: false
})
});
if (!res.ok) throw new Error("generate HTTP " + res.status);
const data = await res.json();
if (data.done !== true || typeof data.response !== "string")
throw new Error("generation incomplete");
if ("context" in data) throw new Error("raw mode unexpectedly returned context");
console.log(data.response);
Python запускайте в virtualenv проекта, JavaScript — как .mjs в Node.js с fetch. Не смешивайте глобальную и проектную версии. Если импорт отсутствует, сначала проверьте установленную версию, а не подбирайте похожий API.
Реалистичный вход
Вход: полный Mistral-style prompt с тестовым тикетом T-781. Шаблон соответствует именно выбранной локальной модели.
Ожидаемый результат
Один JSON с done:true и response-строкой; поле context отсутствует. Тест не пытается использовать deprecated continuation context.
Ожидание перенесите в assert или throw. Если текст модели недетерминирован, сравнивайте структурный инвариант. Если API возвращает массив, проверяйте число элементов и форму каждого.
Негативная проверка
Оставьте полный templated prompt, но выключите raw. Сравнение входа model stub должно выявить повторное форматирование.
Негативный тест должен ломать ровно одно условие. Сетевая ошибка не равна 404, пустой список не равен PASS, новый запуск не равен resume, а локально созданный UUID не равен response ID провайдера.
Готовый prompt для ревью
Проверь raw mode: prompt уже полностью шаблонирован для точной модели, raw true, stream false, context не ожидается, двойное форматирование покрыто негативным тестом.
Верни таблицу: условие, доказательство из кода или очищенного лога, 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 и сохраняем базовую модель без изменений.
Как получить полные tokenizer-поля через verbose в Ollama /api/show
Вызываем /api/show с verbose:true, читаем model_info и проверяем заполнение tokenizer tokens, merges и token_type без публикации гигантского ответа.
Комментарии
Пока тихо. Скажите первое слово