Оригинал: https://timofei-ermolaev.ru/courses/open-webui/sobstvennyy-assistent/versii-perenos-i-dostup-k-assistentu/

# Как изменить настройки ассистента Open WebUI и вернуть прежний вариант

Как сравнить и вернуть настройки ассистента в Open WebUI, выбрать формат переноса и проверить доступ к модели, Skills и связанным ресурсам.

[![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_Z1x8STQ.webp)](<https://timofei-ermolaev.ru/ob-avtore/>)

[Тимофей Ермолаев](<https://timofei-ermolaev.ru/ob-avtore/>) Директор по информационным технологиям (CIO)

**Опубликовано**

24 октября 2026 г.

**Обновлено**

24 октября 2026 г.

**На урок**

18 мин

**Тема**

[Собственный ассистент в Workspace](<https://timofei-ermolaev.ru/courses/open-webui/sobstvennyy-assistent/>)

## После урока вы сможете

- Сравнить сохранённые настройки собственной копии ассистента после одного изменения
- Вернуть прежний вариант и проверить сохранённые поля и зависимости
- Выбрать подходящий формат переноса и проверить коллизии импорта
- Проверить доступ отдельно к карточке, базовой модели и связанным ресурсам

**Проверяемый результат:** Сопоставленные сохранённые поля собственной копии до и после правки и возврата; выбранный формат переноса и отдельная проверка условий доступа.

Анна готовит объявления книжного клуба. В инструкции её ассистента указано: писать ровно три коротких предложения. Теперь ей нужны два, а остальные требования должны сохраниться: название книги, дата, время, место и сведения из справки. Чтобы проверить такую правку, достаточно изменить одно слово в собственной копии, сохранить её и сравнить поля. Затем можно вернуть прежнюю версию.

Анна — условный персонаж. Описанный маршрут опирается на подготовленную 23 октября 2026 года сверку стабильного кода Open WebUI v0.12.3 и отдельно зафиксированной документации. Он не подтверждает выполнение операций на вашей установке. В другой версии приложения названия кнопок, доступные действия и проверки могут отличаться.

История версий поможет вернуть сохранённые настройки карточки. Для переноса на другую установку понадобится файл экспорта, а для работы получателя — подходящие разрешения. Эти задачи связаны, но результат каждой нужно проверять отдельно.

## Подготовьте собственную копию и запишите исходные поля

Для упражнения нужна собственная тренировочная карточка без конфиденциальных данных, содержащая исходную строку про три предложения. Подойдёт ассистент книжного клуба из [урока о создании ассистента для рабочей задачи](<https://timofei-ermolaev.ru/courses/open-webui/sobstvennyy-assistent/assistent-dlya-rabochey-zadachi/>) .

Если отдельная учебная копия у вас уже есть, откройте её заново. Если нужно сделать копию разрешённого исходного пресета, перейдите в **Workspace → Models** и выберите у него **Clone**. Произвольный пресет с другой инструкцией для этого упражнения не подходит: его подготовка потребует дополнительных изменений.

Clone открывает форму создания. Чтобы получить сохранённую карточку, выполните следующие действия:

1. **Проверьте ID.** Это идентификатор, по которому Open WebUI различает объекты. Для новой карточки он должен быть свободен.
2. **Задайте различимое имя.** По нему должно быть понятно, что вы открыли учебную копию. Уникальность отображаемого имени здесь не установлена как обязательное требование: это рекомендация, помогающая не перепутать карточки.
3. **Откройте Access и проверьте доступ.** Клон Models может получить разрешения исходного объекта. Посмотрите общий режим и каждую строку пользователей и групп. Надпись Private сама по себе не означает, что других разрешений нет.
4. **Нажмите Save & Create.** После сохранения закройте редактор и снова откройте именно созданную копию.

Если подходящей исходной карточки нет или вы не можете подготовить отдельную копию с разрешённым кругом доступа, проследите маршрут по тексту. Не переделывайте рабочий объект ради упражнения.

Теперь запишите исходное состояние. Нужны две группы сведений.

- **Поля конфигурации:** имя, описание, **Base Model (From)** — базовая модель, которую использует пресет, полный **System Prompt** — системная инструкция, изменённые **Advanced Params**, а также привязки к Skills, Knowledge, файлам и инструментам либо их отсутствие. Если настроены другие поля карточки, отметьте и их.
- **Текущее состояние карточки:** ID, обозначение Production или подпись действующей версии, **Enabled**, **Hide Model**, общий режим Access и все строки разрешений. Добавьте версию своей установки и дату проверки.

История хранит снимки конфигурации — сохранённые значения полей определённой версии. Привязка к ресурсу в таком снимке означает ссылку на него. Она не сохраняет прежнее содержимое самого ресурса. Настройки доступа, активность и скрытие карточки относятся к её текущему состоянию и при возврате версии проверяются отдельно. Состав снимка описан в [документации Models](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/workspace/models.md#L263-L284>) .

Исходную запись делайте после сохранения и повторного открытия. Иначе вы будете сравнивать последующую правку с незавершённой формой, которая могла ещё не попасть на сервер.

У карточки есть и действие **Copy Link**. Оно копирует адрес нового чата с выбранным пресетом. Такая ссылка не создаёт копию и не выдаёт получателю права.

## Измените строку формата и сравните сохранённые версии

В **System Prompt** найдите строку:

```
Если сведения полные, напиши по-русски ровно три коротких предложения без заголовка и списка. Сохрани название книги, дату, время и место, а также сведения из короткой справки.  
```

Замените только слово «три» на «два»:

```
Если сведения полные, напиши по-русски ровно два коротких предложения без заголовка и списка. Сохрани название книги, дату, время и место, а также сведения из короткой справки.  
```

Остальную инструкцию оставьте прежней, включая правила уточнения недостающих сведений. Базовую модель, параметры, привязки и доступ в этом шаге не меняйте. В блоках приведены фрагменты системной инструкции; вставлять их вместо всего промпта не нужно.

В поле **Describe this change** введите: «Проба формата: два предложения вместо трёх; остальные правила не менялись.»

Нажмите **Save & Update**, закройте редактор и снова откройте ту же копию. Проверьте, что в сохранённой инструкции осталось слово «два». Сверьте остальные поля с исходной записью: они должны совпасть. Отдельно посмотрите ID, Enabled, Hide Model и Access.

Новая запись истории создаётся при изменении конфигурации. Сохранение без изменений не следует считать способом получить ещё одну версию.

Рядом с **Back** откройте переключатель версий, который обычно показывает **Production**. Найдите запись с вашей подписью, затем выберите предыдущую версию. Она откроется в режиме **read-only**, то есть для просмотра без редактирования. Сравните её системную инструкцию и остальные поля с текущими. Ожидаемая разница в конфигурации — только слово, задающее число предложений.

Кнопка **Compare revision** возле System Prompt относится к сравнению текста инструкции. Она сопоставляет текущий текст с вариантом, который вы вставите в **Proposed revision**; **Apply to draft** переносит предложенный вариант в черновик. Автоматическое сравнение двух сохранённых конфигураций всей карточки этим действием не выполняется. В упражнении сверяйте поля вручную.

Если после повторного открытия правка исчезла, сохранение завершилось ошибкой или обнаружились другие изменения, остановитесь и разберитесь с расхождением. Пока сохранённое состояние не совпало с ожидаемым, переходить к возврату рано.

Для просмотра истории Models и возврата версии нужны права владельца либо **write** — право изменения объекта. Обычного **read**, то есть чтения, недостаточно. В проверенной серверной ветке также предусмотрен доступ администратора с включённым обходом контроля доступа; это условие нельзя переносить на любые административные действия. Основание — [проверки доступа к истории Models](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/models.py#L847-L901>) .

## Верните прежнюю версию и проверьте поля копии

Откройте в истории прежнюю версию со строкой про три предложения и нажмите **Set as Production**. Production здесь означает действующую конфигурацию той же карточки, которую используют чаты. Это действие само по себе не публикует карточку для других пользователей и не развёртывает сервер.

Если в редакторе остались несохранённые правки, появится **Discard unsaved changes?** — предложение отбросить их. Подтверждайте сброс, только когда понятно, какой текст будет потерян.

Перед переключением сервер проверяет зависимости выбранного снимка. Возврат может быть отклонён, если:

- базовая модель больше недоступна;
- привязанные Knowledge, файл, заметка **Note**, Skill, инструмент **Tool** или терминал отсутствуют либо недоступны вам;
- привязанный фильтр или действие **Action** отсутствует либо выключено;
- файлы фонового изображения или голосового аватара больше недоступны вам.

Эти условия перечислены в [описании истории Models](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/workspace/models.md#L263-L284>) . Они объясняются составом снимка: сохранённая ссылка на ресурс ещё не означает, что ресурс существует и доступен сейчас.

При таком отказе текущая конфигурация остаётся прежней. Запишите причину и остановите эту часть упражнения. Не расширяйте права и не удаляйте рабочие объекты, чтобы добиться переключения.

Если **Set as Production** завершилось успешно, закройте редактор и снова откройте ту же копию. Сверьте её с исходной записью:

- в System Prompt снова указаны три предложения;
- имя, базовая модель, описание, параметры и привязки совпадают с исходными;
- ID, Access, Enabled и Hide Model проверены отдельно.

Последние поля не извлекаются из старого снимка: возврат сохраняет их текущее состояние.

Возвращённая конфигурация также не восстанавливает прежнее содержимое связанных документов, файлов и Skills, настройки подключения или ключи провайдеров. Даже совпадение всех полей не гарантирует дословного повторения прежнего ответа модели. В этом упражнении проверяются сохранённые настройки, без вызова генерации.

Старые версии можно удалить; текущую Production удалить нельзя. Удаление в упражнение не входит. Возможность удаления истории — одна из причин не считать её отдельным архивом или полноценной резервной копией сервера.

## Чем история Skill отличается от истории пресета

У Skill есть собственная история. Если у вас уже сохранён свой навык, можно открыть его и сопоставить интерфейс с Models. Создавать второй объект ради этого раздела не требуется. Устройство навыков разобрано в [уроке о Skills, инструкциях и файлах](<https://timofei-ermolaev.ru/courses/open-webui/sobstvennyy-assistent/skills-instrukcii-i-fayly/>) .

Изменение имени, описания, переводов или файлов Skill создаёт снимок содержимого. Изменение Access либо переключение активности само по себе такой версии не создаёт.

Меню **Current** показывает текущую и предыдущие версии. Выбранная старая запись открывается в режиме **Read Only**. Здесь есть **Compare to current**: действие показывает различия метаданных и файлов между выбранной и текущей версиями. Для текстовых файлов доступен **diff** — сравнение изменений по строкам. Бинарные файлы, например изображения, отмечаются отдельно, без текстового сравнения.

Для чтения истории Skill и сравнения достаточно права read. Для **Set as Production** требуется write. Сервер также проверяет ожидаемую текущую версию: если после открытия Skill успели изменить, переключение будет отклонено. В этом случае перечитайте актуальное состояние, прежде чем решать, что возвращать.

Успешный возврат меняет содержимое того же Skill, сохраняя его текущие разрешения и активность. Условия работы истории приведены в [документации Skills](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/workspace/skills.md#L291-L300>) .

Есть различие и у **Clone**. При необходимых разрешениях он создаёт приватную копию Skill вместе с файлами. Для неё должны быть свободны и ID, и имя. У Models обязательным было свободное значение ID, а приватность клона требовала отдельной проверки.

## Выберите пакет для переноса конфигурации

История позволяет работать с версиями внутри установки. Чтобы передать конфигурацию на другую установку, выберите формат экспорта.

Для карточки Models используется **Export**. У Skill доступны **Export JSON**, **Export ZIP** и **Export .skill**. Если пресет ссылается на Skill, экспорт карточки Models не заменяет экспорт самого навыка.

JSON — текстовый формат данных. В таблице **JSON-объект** означает одну запись, а **JSON-массив** — список записей. Метаданные содержат дополнительные сведения и настройки объекта; **ACL** означает список разрешений. Служебный заголовок в начале `SKILL.md` называется **frontmatter**. Упомянутый в таблице санитайзер — обработчик очистки данных при подготовке выгрузки.

| Вариант пакета | Форма файла (одиночный и массовый экспорт) | Что входит в пакет | Чего в пакете нет и что учитывать |
| --- | --- | --- | --- |
| **`Models` JSON** (`.json`) | И одиночный, и массовый экспорт сохраняют **JSON-массив** (для одной карточки — массив из одного элемента) | Конфигурация карточки: `ID`, имя, ссылка на базовую модель (`base_model_id`), системная инструкция и параметры, метаданные и ссылки на привязанные ресурсы, статус активности, а также текущие строки доступа (`access_grants`). Узкое исключение для файлов — встроенное фоновое изображение карточки | Нет полной истории версий, весов базовой модели, переписки чатов, базы данных сервера, содержимого документов `Knowledge` (дублированный извлечённый текст очищается санитайзером) и файлов привязанного `Skill` |
| **`Skill` JSON** (`.json`) | Одиночный экспорт — **JSON-объект**; массовый экспорт — **JSON-массив** объектов | Поддерживаемые поля пакета: текущие `ID` и статус активности карточки, а также имя, описание, метаданные (включая теги) и **все файлы** выбранной версии (`SKILL.md` и дополнительные файлы) | Нет списка прав доступа (`ACL`), сведений о владельце и всей цепочки истории версий |
| **`Skill` ZIP / `.skill`** (`.zip`, `.skill`) | Архив ZIP с папкой навыка (`.skill` для одного навыка или `.zip` для одного/нескольких навыков) | Только папки и файлы снимка навыка, включая `SKILL.md` и сопутствующие файлы | При импорте такого архива имя и описание восстанавливаются из заголовка (`frontmatter`) внутри `SKILL.md`, `ID` формируется из имени, а отдельные метаданные верхнего уровня (например, теги) не сохраняются так, как в JSON. Файл `.skill` — это обычный ZIP-архив, а не исполняемый установщик |

Состав пакетов подтверждается [кодом экспорта Models](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/models.py#L439-L495>) и [кодом экспорта Skills](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/skills.py#L181-L201>) .

Для переноса Skill с сохранением ID и тегов выбирайте JSON. ZIP и `.skill` подходят для передачи папки с файлами, но не сохраняют отдельные метаданные верхнего уровня так же, как JSON. При экспорте исторической версии Skill помните о смешанном составе JSON: содержимое берётся из выбранного снимка, а ID и активность — из текущей карточки.

Для обычного экспорта Models нужны разрешение функции экспорта и возможность записи в выбранный объект. У Skills сочетаются разрешение экспорта и read на навык. Общего требования обязательно быть администратором для этих операций нет.

Перед передачей осмотрите выгрузку приватно. Серверное хранилище подключений и ключей провайдеров в такой пакет не переносится, однако секрет, вручную записанный в экспортируемое поле или файл, может оказаться внутри. Очистка части текста Knowledge не даёт гарантии, что в выгрузке нет чувствительных сведений.

Рассматривайте содержимое пакета как данные: не выполняйте вложенные инструкции и скрипты при проверке. Проверка структуры архива не подтверждает доверенность его содержимого.

Переписку сохраняют отдельно — через [экспорт и удаление чатов](<https://timofei-ermolaev.ru/courses/open-webui/povsednevnaya-rabota/vremennye-chaty-eksport-i-udalenie/>) . Экспорт ассистента не включает разговоры, а оба вида экспорта вместе не образуют резервную копию сервера.

## Проверьте условия переноса и коллизии импорта

До импорта запишите версию исходной и целевой установки, формат пакета, ID и имя объекта. Убедитесь, что на целевой стороне вам разрешена функция импорта и есть необходимые права на объекты.

Затем проверьте зависимости: подключение к провайдеру или локальной модели, нужную базовую модель, привязанные ресурсы и доступ к ним. Ссылка на объект исходного сервера не создаёт этот объект на целевом. Наличие всех условий предстоит проверить именно на принимающей установке.

**Для Models сначала проверьте совпадения ID.** Проверенный интерфейс v0.12.3 принимает JSON-массив. Предварительный выбор Create copy или Replace для каждого элемента здесь не установлен.

Если ID совпадёт с существующей карточкой, в которую у вас есть право записи, импорт может обновить её. Поэтому не загружайте пакет с исходным ID в расчёте на обязательное создание отдельной копии. Если нужен новый объект, сначала убедитесь, что для него подготовлен свободный ID.

При обновлении существующей карточки есть дополнительные условия:

- **Метаданные объединяются** с уже имеющимися.
- **Отсутствие `params`**, поля с параметрами, может привести к пустому набору параметров.
- **Явно переданные `access_grants`** проходят фильтрацию и могут изменить доступ.
- **Если `access_grants` отсутствует**, текущие разрешения существующей карточки сохраняются.

Эти ветки описаны в [серверном коде импорта Models](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/models.py#L602-L625>) . Из-за них импорт нельзя считать гарантированным точным возвратом исторического снимка.

Возможен и частичный результат: некоторые элементы пропускаются, а объекты, сохранённые до последующей ошибки, могут остаться на сервере. Общего сообщения об успехе недостаточно. Откройте каждую ожидаемую карточку и сверьте её ID, поля, доступ и привязки.

**Для Skills используйте предварительный просмотр.** Он показывает найденные навыки и предлагает действия **Create**, **Create copy**, **Replace**, **Skip**.

Если ID или имя уже заняты, по умолчанию выбирается Skip. Для отдельной копии укажите свободные ID и имя. Новая карточка и копия создаются приватными.

Replace требует права write на существующий Skill и актуальной ожидаемой версии. При замене сохраняются настройки доступа этого Skill. Если его успели изменить после подготовки импорта, перечитайте состояние и заново оцените замену.

После импорта проверьте результат каждого элемента: **saved** — сохранён, **skipped** — пропущен, **error** — ошибка. Успешно сохранённые элементы могут соседствовать с ошибками. Откройте нужные Skills, сверьте поля и фактический набор файлов. Правила выбора действий изложены в [документации импорта Skills](<https://docs.openwebui.com/features/workspace/skills/>) .

Если целевой установки пока нет, результат этого раздела — выбранный формат и список условий переноса. Сам перенос остаётся непроверенным.

## Разделите доступ к карточке, базе и ресурсам

После импорта карточка может появиться в рабочей области, но для работы получателя этого недостаточно. Нужно отдельно проверить роль пользователя, разрешённые ему функции рабочей области, доступ к самой карточке, базовой модели и связанным ресурсам.

В **Access** различайте общий режим и конкретные разрешения:

- **Public** даёт общее разрешение на чтение пользователям, вошедшим в этот экземпляр Open WebUI. Оно не открывает объект анонимным посетителям интернета.
- **Private** снимает общее разрешение, сохраняя именованные строки пользователей и групп. Поэтому проверка приватности включает весь список.
- **Write** позволяет изменять, удалять объект и дальше предоставлять к нему доступ. Владение объектом от этого не передаётся.

Такое разделение описано в [документации разрешений пользователей и групп](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/authentication-access/rbac/groups.md#L143-L165>) . В этом упражнении проверяйте существующие разрешения, не меняя их ради демонстрации.

Право чтения также не означает одинаковую видимость содержимого у разных объектов. У Models серверный метод для пользователя только с read исключает `params`, где находится системная инструкция. Доступ к редактированию и истории проверяется отдельно. У доступного для чтения Skill пользователь может получить содержимое, файлы и историю. Поэтому read-only нельзя использовать как универсальное обещание скрыть инструкции. Эти различия отражены в [коде чтения Models](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/models.py#L797-L837>) и [коде доступа к Skills](<https://github.com/open-webui/open-webui/blob/91ea4e3421d1d8069f13d4a463fcb5986d94ea60/backend/open_webui/routers/skills.py#L580-L621>) .

Следующая проверка касается базовой модели. Доступ к пресету не выдаёт права на модель, которую он использует: при работе проверяются оба уровня. Связь карточки и базы разобрана в [уроке о настройке списка моделей](<https://timofei-ermolaev.ru/courses/open-webui/configure/upravlenie-spiskom-modeley/>) .

У привязанного Skill тоже есть собственные права: получателю нужен read на этот навык. Недоступный Skill может быть исключён из обработки. Это отличается от возврата исторической конфигурации, который может остановиться из-за недоступной зависимости. Нельзя переносить условия отказа при возврате на любой запуск чата и считать, что каждая недоступная привязка обязательно блокирует весь разговор. Правила доступа к базе и привязанным навыкам приведены в [Models](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/workspace/models.md#L443-L451>) и [Skills](<https://github.com/open-webui/docs/blob/28160d51cc53ea5df6d93da9f68cb90f25f95696/docs/features/workspace/skills.md#L309-L321>) .

Для проверки получателя нужен разрешённый второй пользователь с ожидаемыми правами. Под его учётной записью проверьте видимость карточки и доступ к связанным ресурсам; права на базовую модель сверяйте отдельно. Открытие адреса через Copy Link не заменяет эти проверки. Если второй учётной записи нет или какой-то уровень доступа проверить нельзя, отметьте это явно. Проверка настроек и ресурсов без генерации также не подтверждает успешный ответ ассистента.

В конце сохраните короткую запись о выполненном маршруте: ID учебной копии, изменённая строка, подпись версии, результат повторного открытия и сравнения полей. Добавьте выбранный формат переноса, необходимые зависимости и фактически проверенный круг доступа.

Для невыполненных частей оставьте точные отметки: «возврат не проверен», «перенос не проверен», «доступ получателя не проверен». Если операция завершилась отказом, запишите причину. Прочитанная инструкция описывает маршрут; подтверждённый результат появляется после действия и сверки сохранённого состояния.

## Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.

Урок пройден

![Тимофей Ермолаев](https://timofei-ermolaev.ru/_astro/timofei-ermolaev-portrait.s0mCFw-J_2r7Nkv.webp)

## Об авторе

### Тимофей Ермолаев

Директор по информационным технологиям (CIO)

Пишу о больших языковых моделях, автоматизации и применении ИИ в бизнесе. В статьях разделяю личный опыт, выводы исследований и практические рекомендации.

[Подробнее об авторе](<https://timofei-ermolaev.ru/ob-avtore/>)
