Перейти к содержанию

Использование моделей принятия решений

Модели принятия решений отвечают на структурированные типизированные вопросы вместо генерации текста. Получив state — ситуацию, относительно которой принимается решение — и набор questions, такая модель возвращает типизированный вердикт по каждому вопросу: выбранный вариант, уровень оценки или ответ «да/нет», обычно со значением уверенности. Они применяются там, где полная генерация избыточна: выбор и маршрутизация модели, классификация, легкие оценочные задачи.

В GPUStack модели принятия решений обслуживаются по контракту System One (Jev) на эндпоинте /v1/systemone. В этом руководстве показано, как развертывать и использовать такие модели в GPUStack.

Предварительные требования

Перед началом убедитесь, что:

  • GPUStack установлен и запущен. Если нет, см. Краткое руководство.
  • Есть доступ к Hugging Face для загрузки файлов модели.

Шаг 1. Разверните модель

GPUStack сейчас поддерживает два вида развертываний, обслуживающих API принятия решений:

vLLM: использовать модель генерации текста

vLLM 0.32.0 и новее обслуживают контракт System One на обычном сервисном порту. Разверните любую модель генерации текста с бэкендом vLLM как обычно, а затем измените категорию модели на Decision — именно категория сообщает GPUStack, что развертывание является службой принятия решений.

  1. Разверните модель генерации текста с бэкендом vLLM (версия 0.32.0 или новее). См. Управление развертыванием моделей.
  2. Отредактируйте модель и установите в её настройках Category на Decision.

Категория модели

llama.cpp: обслуживать Laya GGUF принятия решений

Файлы Laya GGUF принятия решений содержат ключ метаданных решения поверх обычной магистрали (modern-bert, qwen, llama). Разверните GGUF как любую другую GGUF-модель, и его будет обслуживать llama.cpp: GPUStack обнаружит метаданные решения при развертывании и автоматически отнесет модель к категории decision — без этого тот же файл был бы ошибочно распознан как реранкер или модель эмбеддингов.

Список моделей

В обоих случаях после запуска развертывания столбец Category на странице Models показывает Decision. Категорию можно исправить и вручную; значения категорий проверяются, поэтому категория с опечаткой будет отклонена, а не молча сохранена.

Шаг 2. Запросите решение

Запросить решение можно как через интерфейс, так и через API.

Через интерфейс

  1. Перейдите в Playground > Decision или нажмите Open in Playground в строке модели на странице Models.
  2. Выберите модель принятия решений в селекторе моделей — отображаются только модели категории decision, и модель — единственный параметр решения.
  3. Заполните редактор State ситуацией, относительно которой принимается решение (предзаполнен примером чата; допускается простой текст или структурированный JSON), и редактор Questions вопросами (предзаполнен вопросом choice; добавляйте вопросы кнопками + choice, + score, + noul).
  4. Нажмите Run (или Ctrl/Cmd + Enter) и прочитайте типизированные ответы.

Подробнее о редакторах и карточках ответов см. Playground принятия решений.

Через API

Отправьте state и questions модели через POST /v1/systemone (аутентификация — API-ключом, созданным на странице API Keys). Поле model обязательно и содержит имя развернутой модели (или имя маршрута модели), как в OpenAI-совместимых эндпоинтах.

Вот пример скрипта с использованием curl:

export SERVER_URL=<your-server-url>
export GPUSTACK_API_KEY=<your-api-key>
curl $SERVER_URL/v1/systemone \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $GPUSTACK_API_KEY" \
    -d '{
        "model": "qwen3-decision-8b",
        "state": {
            "messages": [
                { "role": "user", "content": "Write a 200-word poem in Hungarian." }
            ]
        },
        "questions": {
            "model_selection": {
                "type": "choice",
                "instructions": "Pick the model best suited.",
                "criteria": {
                    "qwen3-8b": "Strong multilingual generation.",
                    "llama3-8b": "Faster, weaker multilingual."
                }
            }
        }
    }' | jq

Замените <your-server-url> на URL вашего сервера GPUStack, а <your-api-key> — на API-ключ, созданный на странице API Keys.

Пример ответа:

{
  "model": "qwen3-decision-8b",
  "usage": {
    "input_tokens": 189,
    "output_tokens": 12
  },
  "answers": {
    "model_selection": {
      "type": "choice",
      "choice": "qwen3-8b",
      "confidence": 0.93,
      "probabilities": {
        "qwen3-8b": 0.93,
        "llama3-8b": 0.07
      }
    }
  }
}

Каждая запись в questions сопоставляет идентификатор вопроса с одним из трех распространенных типов, а ответ на вопрос возвращается в answers под тем же идентификатором:

Тип Значение criteria Поле ответа
choice Выбрать один вариант Имя варианта → описание choice — имя выбранного варианта
score Оценить state по упорядоченным уровням Упорядоченный список описаний уровней score — индекс уровня
noul Бинарный вопрос (да/нет) Необязательные описания сторон true / false noul — логическое значение

GPUStack разрешает поле model и передает остальную часть тела запроса и весь ответ движку решений без изменений — набор вопросов в контракте открыт, и движки могут принимать дополнительные поля.

Дальнейшие шаги