Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
AI-ассистент — встроенный в веб-интерфейс чат, который помогает разобраться в
состоянии кластера, ресурсах и документации. Он опционален и включается
наличием Kubernetes-секрета assistant в неймспейсе d8-console.
Экспериментальная функция. Ассистент передаёт данные из кластера (манифесты ресурсов, логи, очередь Deckhouse и т. п.) в указанную вами LLM. Подключайте только те модели и провайдеров, которым вы доверяете эти данные.
Как это работает
- Сервис ассистента и его MCP-сервер деплоятся только при наличии секрета
assistantв неймспейсеd8-console. - Креды LLM ассистент читает из этого же секрета и общается с моделью по
OpenAI-совместимому API (
/v1/chat/completions, streaming). - Кнопка чата (✨) появляется в верхней панели, когда ассистент включён, либо
когда у вас есть права создавать и изменять секреты в неймспейсе
d8-console(тогда вместо чата открывается форма настройки).
Endpoint модели должен быть OpenAI-совместимым и поддерживать tool/function calling — ассистент вызывает инструменты (работа с кластером, поиск по документации) через function calling.
Настройка через интерфейс
Откройте чат кнопкой ✨ и заполните форму (или нажмите шестерёнку «Настройки ассистента», если чат уже настроен):
- Адрес API (base URL) — базовый URL OpenAI-совместимого API, включая суффикс
версии (обычно
/v1). - Модель — имя модели, как его ожидает endpoint (например,
gpt-4o). - API-ключ — ключ/токен авторизации. Для модели без авторизации укажите любую непустую строку. В режиме редактирования можно оставить поле пустым — текущий ключ сохранится.
- Лимит токенов — лимит на ответ модели (
max_completion_tokens). - Размер контекста (токены) — полный размер контекстного окна модели; нужен для индикатора расхода токенов. Можно оставить пустым.
- Бюджет контекста (токены) — порог, при превышении которого старый вывод
инструментов обрезается, чтобы не упереться в лимит модели.
0отключает.
Параметры сохраняются в секрет; передеплой не требуется при изменении уже существующего секрета.
Изменения в кластере
По умолчанию ассистент работает только на чтение: просматривает ресурсы, логи, документацию, очередь Deckhouse и т. п. Создание, изменение и удаление ресурсов Kubernetes отключены.
Под полем ввода в чате есть переключатель «Разрешить изменения». Если включить его перед отправкой запроса, ассистент сможет создавать, изменять и удалять ресурсы в кластере. Запрет и разрешение проверяются на сервере, а не только в подсказке модели.
Права доступа. Все операции ассистента в кластере выполняются от имени текущего пользователя — с тем же токеном сессии, что и остальные запросы Console. Ассистент не получает дополнительных привилегий: если у вас нет права создать или изменить ресурс в интерфейсе, ассистент тоже не сможет это сделать.
При включённых изменениях ассистент сначала выполняет пробный запуск (dry run) и просит явного подтверждения перед реальным применением.
Схема секрета assistant
Тип секрета — Opaque. Ключи:
| Ключ | Обязательный | По умолчанию | Описание |
|---|---|---|---|
api_key |
да | — | API-ключ/токен авторизации в LLM. |
base_url |
да | — | Базовый URL OpenAI-совместимого API, включая /v1. |
model |
да | — | Имя модели, как его ожидает endpoint. |
max_tokens |
нет | 40000 |
Лимит токенов на ответ. |
context_window |
нет | 0 (неизвестно) |
Полный размер контекста модели (для индикатора расхода). |
max_context_tokens |
нет | 300000 |
Бюджет промпта; 0 отключает обрезку контекста. |
Пример: внешняя модель (OpenAI GPT-4o)
kubectl -n d8-console create secret generic assistant \
--from-literal=api_key='sk-proj-...' \
--from-literal=base_url='https://api.openai.com/v1' \
--from-literal=model='gpt-4o' \
--from-literal=context_window='128000'Внешний endpoint должен быть доступен из пода ассистента (egress в интернет).
Пример: внутренняя модель в кластере
Если в кластере развёрнут OpenAI-совместимый сервинг (vLLM, Ollama и т. п.), укажите его in-cluster Service URL:
kubectl -n d8-console create secret generic assistant \
--from-literal=api_key='not-needed' \
--from-literal=base_url='http://<service>.<model-namespace>.svc.cluster.local:8000/v1' \
--from-literal=model='<served-model-name>'model— имя модели так, как его отдаёт сервинг (для vLLM —--served-model-name).api_key— если сервинг не требует авторизации, всё равно укажите любую непустую строку.
Управление размером контекста
История диалога живёт на стороне браузера и целиком отправляется в модель на
каждый запрос. Инструменты работы с кластером (например, список ресурсов) могут
возвращать очень объёмные данные, которые накапливаются в контексте и быстро
упираются в лимит контекстного окна модели (ошибка вида
400 … maximum context length). Чтобы этого избежать, ассистент применяет
несколько оптимизаций.
Слимминг вывода Kubernetes
Из результатов k8s_list_resources и k8s_get_resource удаляются самые объёмные
и малополезные для модели поля:
metadata.managedFields— служебная история server-side apply;- аннотация
kubectl.kubernetes.io/last-applied-configuration— дубликат манифеста.
Полезные spec/status и остальные метаданные сохраняются. Если ответ не
является объектом Kubernetes, он передаётся без изменений.
Потолок на один результат инструмента
Любой результат инструмента обрезается примерно до 50 000 символов. В конце
добавляется пометка об усечении с подсказкой сузить запрос фильтрами
(namespace / label_selector / field_selector / limit), чтобы модель сама
переспросила более точечно.
Страж контекста (max_context_tokens)
Перед каждым обращением к модели ассистент оценивает суммарный размер промпта.
Если он превышает max_context_tokens (по умолчанию 300000), старый вывод
инструментов заменяется заглушкой — начиная с самых ранних, при этом результаты
текущего шага диалога сохраняются. Так контекст сжимается без потери
последнего полезного результата.
Страж включён по умолчанию; задайте max_context_tokens: 0, чтобы отключить его
(например, если модель сама умеет обрезать контекст).
Индикатор расхода токенов
После каждого раунда модель сообщает фактический расход токенов. Если задан
context_window (например, 128000 для gpt-4o), над полем ввода появляется
тонкая шкала «использовано / доступно» с цветовой индикацией (зелёная → жёлтая →
красная) и подсказкой по наведении. Без context_window показывается только
счётчик использованных токенов.