Как упорядочить беседы и найти нужный разговор в Open WebUI

Как назвать и сгруппировать беседы Open WebUI, найти нужное сообщение и проверить ветку. Чем папка проекта отличается от памяти и контекста модели.

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

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

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

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

В качестве сквозного примера возьмём два условных названия бесед («Книжный клуб — форма приглашения» и «Книжный клуб — вопросы участников»), папку «Встречи книжного клуба» и поисковый запрос «спокойный тон». Все эти названия и слова вымышлены для объяснения механики: они не означают, что такие чаты уже есть в вашем аккаунте, а сама практика ниже рассчитана на ваши собственные существующие беседы и до вашего выполнения не проводилась.

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

Дайте беседам различимые названия и закрепите нужную

В обычном сохранённом чате Open WebUI заголовок беседы, структура переписки, отметка о закреплении и привязка к папке хранятся раздельно (модель хранения чатов). Мы рассматриваем здесь стандартные сохраняемые диалоги; временные чаты без сохранения истории устроены иначе и вынесены в отдельный урок. Название в боковой панели служит ярлыком для человека: оно не заменяет текст самой переписки и не превращается в скрытую инструкцию для модели.

Сама переписка внутри сохранённого чата может представлять собой не одну прямую линию, а дерево сообщений (извлечение сообщений при поиске). Когда вы редактируете свой вопрос или запрашиваете новый вариант ответа (подробно мы разбирали ветки и варианты ответа в первом чате), в истории сохраняются параллельные ветви, хотя на экране в каждый момент показана только одна выбранная ветка. Поэтому различайте четыре вещи: видимое название чата, полное сохранённое дерево сообщений, открытую сейчас ветку на экране и то, что реально попадёт во вход следующего запроса к модели.

Чтобы быстро отличать одну беседу от другой в боковой панели, откройте меню нужного собственного чата (компонент меню чата). Здесь и далее мы приводим точные английские названия элементов по коду стабильного релиза Open WebUI v0.12.3: в вашей установке они могут быть переведены на русский язык или немного отличаться в зависимости от версии и настроек:

  • В нашей условной задаче дадим двум беседам понятные названия через пункт Rename (Переименовать): первую назовём «Книжный клуб — форма приглашения», а вторую — «Книжный клуб — вопросы участников». После сохранения проверьте, что заголовки в списке обновились, а сами сообщения внутри бесед остались на месте.
  • Если к одной из бесед нужно возвращаться постоянно, выберите в том же меню Pin (Закрепить) или Unpin (Открепить) для снятия отметки (обработчик закрепления чата). Сервер проверяет принадлежность чата вашему аккаунту и переключает флаг закрепления, а интерфейс боковой панели выводит такие диалоги в отдельный верхний блок.

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

Выберите папку для задачи и проверьте её доступ

В документации Open WebUI слово «проект» (project workspace) не означает отдельного режима или особой сущности наподобие ChatGPT Projects (документация по организации бесед, настройки папки как проекта). В интерфейсе и базе данных это обычная папка (Folder), которой при желании можно задать рабочие настройки (окно создания и редактирования папки). Папка работает как контейнер для порядка и без системной инструкции или прикреплённых материалов, а настройка фонового изображения меняет лишь внешний вид области чата. Сама по себе папка не объединяет переписки внутри себя в общую память модели.

Доступность папок зависит от настроек вашего сервера: для обычного пользователя функция должна быть включена глобально и разрешена в правах учётной записи (проверка прав в маршрутизаторе папок). Если функция доступна, нажатие кнопки + рядом с разделом Folders в боковой панели открывает окно Create Folder (боковая панель). Там задают название — в нашем примере «Встречи книжного клуба» — и нажимают Save (кнопка сохранения папки). Для уже существующей папки пункт Edit открывает окно Edit Folder, где можно проверить или изменить имя и настройки.

Перед тем как перемещать беседы в папку, проверьте права доступа (проверка доступа к папкам, правила совместного доступа к папкам):

  • Чтобы положить чат в папку или изменить её настройки, нужно право на запись (write) (проверка прав при назначении папки чату). При проверке прав сервер просматривает саму папку и её родительские папки, поэтому доступ на чтение или запись, выданный родительской папке, распространяется и на вложенные подпапки.
  • Управлять совместным доступом к папке может только её владелец или администратор (обновление прав доступа папки). У собственной папки текущие настройки доступа можно посмотреть без их изменения через пункт Edit и кнопку Access в окне Edit Folder.
  • Перемещение вашего личного чата в общую папку может сделать его видимым другим участникам, у которых есть доступ к этой папке или к её родительской папке. Прямой статус Restricted у дочерней папки показывает лишь отсутствие собственных прямых разрешений на этой папке, но не отменяет доступ, унаследованный от родителя. Кроме того, статус Restricted не означает криптографического шифрования данных или скрытия папки от администратора сервера.

Для практики подходит только проверенная собственная папка со статусом Restricted, которая не открыта другим пользователям ни напрямую, ни через родительские папки; чужие и общие папки исключены. Проще всего проверить собственную папку верхнего уровня со статусом Restricted, но перестраивать ради упражнения существующую структуру папок или менять права доступа не нужно. Если в вашей установке папки отключены, нет прав на запись или вы не можете достоверно проверить владельца и отсутствие общего доступа (включая родительские папки), не перемещайте чаты и зафиксируйте этот шаг как невыполненный. Кроме доступа, до перемещения нужно проверить и настройки самой папки, поскольку часть из них действует не только на новые, но и на уже существующие чаты.

Различайте модель нового чата и инструкцию папки

В окне настроек папки есть два поля, которые легко принять за однотипные правила «только для новых бесед»: выбор модели по умолчанию (Default Model) и системная инструкция папки (System Prompt). В действительности они срабатывают в разные моменты.

Поле Default Model позволяет выбрать одну или несколько моделей из доступных в вашей установке; пока модель явно не выбрана, поле показывает подпись Use default, а выбранную модель можно сбросить кнопкой очистки (Reset / значок крестика) (выбор модели в окне папки, описание настроек папки). Эта настройка подставляет модель только тогда, когда вы открываете новый чат внутри папки, пока в нём ещё нет истории сообщений и если при инициализации модель не задана явно через параметр в URL (применение модели папки при инициализации, выбор модели нового чата и URL-параметры). Перемещение старых чатов в такую папку не меняет модели, с которыми они уже велись, а ручная смена модели внутри отдельного чата не перезаписывает настройку Default Model самой папки. Числовых параметров генерации вроде temperature или top_p в окне настроек папки нет — их работу на уровне чата и модели мы разбирали в уроке про параметры и выбор модели.

Поле System Prompt в окне папки устроено иначе (поле системной инструкции папки). В интерфейсе его видят администраторы и пользователи с разрешением chat.system_prompt: если поле скрыто, это говорит лишь об ограничении интерфейса для вашей учётной записи, но не доказывает, что в папке нет сохранённой инструкции, и не описывает всю серверную безопасность. На стороне сервера системная инструкция текущей прямой папки извлекается и добавляется к системному сообщению при обработке каждого отправляемого запроса, если у пользователя есть право чтения этой папки (добавление инструкции папки в middleware). Из этого следует важная деталь: если перенести старый сохранённый чат в папку с заполненным System Prompt, прежние ответы в истории не перепишутся, но при следующем сообщении в этом чате инструкция папки уже добавится к запросу.

При этом инструкция папки не стирает остальные системные инструкции: при сборке запроса непустой текст папки добавляется перед существующим первым системным сообщением (функция добавления системного промпта, объединение системных сообщений). Поскольку инструкции складываются, система не гарантирует, какое правило возобладает при смысловом противоречии между ними. В отличие от прав доступа, System Prompt и прикреплённые материалы берутся только из той папки, в которой чат лежит непосредственно, и не наследуются автоматически от родительских папок. Чтобы упорядочить существующие беседы и не добавлять к ним новую инструкцию, перед переносом нужно убедиться, что поле System Prompt у выбранной папки видимо и пусто; если поле скрыто и проверить его нельзя, переносить чаты в такую папку в рамках упражнения не следует.

Материалы папки требуют отдельной настройки и доступа

Раздел Knowledge в настройках папки также не собирает в единую базу все разговоры, которые лежат внутри (раздел Knowledge в окне папки). Туда вручную прикрепляют ссылки на поддерживаемые отдельные файлы, коллекции базы знаний или заметки (file, collection, note). Как и пользовательские предпочтения из урока про память и персонализацию, материалы папки не делают соседние чаты продолжением друг друга. Если нужно передать в новый разговор конкретный прошлый диалог, его добавляют явно, как показано в уроке о том, как намеренно добавить прошлый разговор или файл.

При сохранении настроек папки сервер проверяет права владельца папки на все прикрепляемые материалы, а для вновь добавляемых элементов — и права редактора (проверка доступа к материалам при сохранении папки, правила доступа к файлам папки): право записи в чужую папку не позволит прикрепить к ней ваш личный закрытый документ, к которому нет доступа у владельца папки. В проверенном пути режима Native при обработке запроса список материалов папки дополнительно фильтруется по текущим правам владельца (проверка доступных владельцу материалов папки): если владелец папки позже потеряет доступ к файлу или коллекции, этот элемент перестанет передаваться по этому пути.

Способ подачи прикреплённых к папке материалов зависит от режима вызова функций, возможностей модели и настроек сервера (разделение путей обработки материалов папки, описание Knowledge в документации папок):

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

Переместите беседы и проверьте расположение

Когда вы проверили, что папка (в нашем условном примере — «Встречи книжного клуба») принадлежит вам, имеет право записи, эффективно ограничена доступом Restricted с учётом родительских папок и имеет проверяемо пустые System Prompt и Knowledge, в неё можно перенести выбранные беседы. Для собственного чата есть два способа перемещения (пункт Move в меню чата, обработка перетаскивания в папку): перетащить беседу мышью на нужную папку в боковой панели или открыть меню чата, выбрать пункт Move (Переместить) и указать папку из списка.

При перемещении учитывайте устройство хранения и сортировки в Open WebUI:

  • У каждой беседы может быть только одна назначенная папка (folder_id). Перемещение в другую папку заменяет прежнее расположение, а не создаёт вторую копию или ярлык сразу в нескольких папках (обновление папки чата на сервере). После переноса раскройте папку и убедитесь, что обе беседы («Книжный клуб — форма приглашения» и «Книжный клуб — вопросы участников») отображаются внутри неё под своими именами.
  • Как устроен выход чата из папки. Отдельной кнопки «Remove from folder» в меню чата нет. Чтобы вывести беседу обратно в общий список, её перетаскивают мышью в секцию Chats боковой панели (обработка сброса чата в список Chats). Учитывайте, что это действие не только очищает привязку к папке (folder_id = null), но и одновременно снимает закрепление (Unpin), если чат был закреплён. В нашем упражнении выводить беседы обратно из папки не требуется.
  • Вложенность и порядок сортировки. Если задач много, внутри папки можно создать подпапку через пункт Create Folder в её меню (меню папки), перетащить одну собственную папку внутрь другой для смены родителя или вернуть её на верхний уровень перетаскиванием в корень списка (перенос папки в другую папку, возврат папки на верхний уровень, запрет циклов и переноса папки в саму себя на сервере). Для двух бесед книжного клуба подпапки не нужны. Сами папки на одном уровне выстраиваются автоматически по алфавиту и числам в названии (localeCompare), а чаты внутри папки — сначала непрочитанные, затем по времени последнего обновления (сортировка корневых папок, сортировка подпапок по имени, сортировка чатов внутри папки). Произвольно менять соседние папки местами вручную или закреплять саму папку проверенный интерфейс не позволяет: порядок папок одного уровня меняется только при их переименовании, а перенос папки внутрь другой меняет её уровень вложенности.

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

Найдите беседу по словам и сузьте область поиска

Пользовательский поиск по рабочей области (Search) открывается из боковой панели или сочетанием клавиш Cmd/Ctrl + K (документация по поиску в истории). Не смешивайте это окно с прикреплением прошлых бесед через Reference Chats или со встроенными инструментами модели search_chats и view_chat из предыдущего урока: окно Search предназначено для человека и использует собственные фильтры интерфейса (фильтры в SearchModal). Векторного или семантического поиска «по смыслу» здесь нет, как нет и текстовых префиксов вроде tag:, folder: или pinned: в строке ввода — вместо них в окне Search выбираются кнопки-фильтры.

Пока строка поиска пуста, окно показывает закреплённые и недавние беседы (Pinned & recent). Чтобы найти решение о тоне приглашения в нашем условном примере, выберем тип содержимого Chats, в фильтре принадлежности View укажем Created by you (Созданные вами), при желании ограничим поиск папкой через фильтр Location (Расположение — например, «Встречи книжного клуба», причём выбор папки охватывает и её подпапки) и введём слова спокойный тон. В своей практике вместо этих учебных слов вы введёте 1–3 характерных слова из собственной переписки.

Посмотрим, по каким правилам запрос сопоставляется с историей (разбор поисковых слов, поиск по заголовку и сообщениям, условие совпадения всех слов, описание сопоставления в документации):

  1. Разбиение на слова. Строка запроса делится по пробелам без учёта регистра (правило про поиск точной кириллической фразы целиком относится к меню Reference Chats, а в окне Search русские слова также разбиваются по пробелам). Повторы убираются, и учитываются первые 12 уникальных слов.
  2. Где ищутся подстроки. Каждое из этих слов ищется как подстрока в названии чата (title) и в тексте сохранённых сообщений (history.messages и messages).
  3. Нужны все слова, но не обязательно рядом. Чтобы чат попал в выдачу, в нём должны встретиться все слова запроса. При этом одно слово может оказаться в названии чата или в начале диалога, а второе — в другой реплике или соседней ветке.
  4. Порядок и страницы выдачи. Сначала поднимаются чаты с точным совпадением названия, затем чаты, в названии которых встретился весь запрос целиком, а остальные сортируются по времени обновления; выдача разбивается на страницы (ранжирование и пагинация результатов поиска, описание сортировки в документации). Высокая позиция в списке говорит лишь о совпадении со строкой запроса или свежей дате, но не подтверждает правильность самого решения.

Что именно попадёт в область поиска, определяется сначала вашими правами доступа, а затем выбранными фильтрами View и Location (формирование доступной области поиска, фильтр принадлежности View, поиск по живым чатам и снимкам общих бесед):

  • Вся разрешённая вам область поиска задействуется тогда, когда в View выбран режим All и не задан дополнительный фильтр Location (стоит Everywhere). В этом случае поиск охватывает ваши собственные живые чаты, беседы в доступных вам папках и подпапках, разрешённые вам чужие живые чаты с правом продолжения, а также отдельно выданные вам снимки общих бесед (SharedChat). Чужие аккаунты без выданного вам доступа или произвольные публичные ссылки в интернете в этот поиск не входят.
  • Фильтр Created by you оставляет только ваши собственные живые чаты, а Shared with you исключает ваши чаты и оставляет только доступные вам чужие объекты.
  • Выбор папки в Location сужает поиск по живым чатам до выбранной папки и её подпапок, а без дополнительного фильтра Location поиск идёт по всей разрешённой области с учётом выбранного режима View. Отдельные снимки SharedChat ищутся по своей сохранённой копии только тогда, когда фильтр Location не задан и не выбран режим Created by you.
  • Живые чаты, отправленные в архив (archived = true), и служебные внутренние записи из поиска по живым беседам исключаются (исключение архивных и внутренних живых чатов). При этом доступные снимки SharedChat проверяются отдельно по сохранённой копии, поэтому архивирование исходного живого чата само по себе не обещает автоматического исчезновения ранее выданного снимка.

Если нужная беседа не нашлась, само отсутствие совпадения не доказывает, что она удалена. Проверьте, нет ли опечатки или лишнего слова в запросе (достаточно одного несовпавшего слова, чтобы чат не попал в список), убедитесь, что выбран тип Chats и подходящий фильтр View (Created by you или All), сбросьте или проверьте фильтр Location, а также проверьте, сохранился ли у вас доступ к этой беседе или папке и не отправлен ли живой чат в архив. Менять ради этой проверки настройки общего доступа или архива не нужно. Когда подходящая карточка найдена, остаётся открыть разговор и проверить само сообщение.

Откройте сообщение и проверьте нужную ветку

Карточка в результатах поиска показывает заголовок, расположение и короткий текстовый фрагмент (snippet), поэтому сама по себе ещё не подтверждает, что вы нашли нужное решение (формирование сниппета в поиске, выбор сообщения для карточки результата, карточка и открытие результата в документации). Для карточки сервер сначала ищет в чате одно сообщение, где встретились сразу все слова запроса; если слова разбросаны по разным репликам, берёт сообщение хотя бы с одним словом, а если совпал только заголовок — последнее сообщение чата. Поскольку фрагмент в карточке урезан по длине, судить по нему о полном контексте договорённости нельзя.

Чтобы перейти из окна Search в сам разговор, используйте кнопку Open (или клавишу Enter на выбранном результате); учитывайте, что при открытой панели предпросмотра одиночный клик по карточке лишь выбирает её для просмотра, а сам чат открывается двойным кликом или кнопкой Open. Ссылка результата может вести к конкретному сообщению (?message=id) (формирование ссылки на найденное сообщение). При открытии такой ссылки интерфейс чата прокручивает переписку к найденной реплике и автоматически переключает активную ветку (currentId) к самому глубокому дочернему сообщению от этой точки (переключение ветки и прокрутка в Chat.svelte). Это значит, что переход из поиска не гарантирует сохранения той ветки, которая была открыта в чате раньше, и может привести вас в черновой или отвергнутый вариант ответа, если искомые слова встретились именно в нём.

Поэтому после открытия результата — например, при проверке решения о «спокойном тоне» в условной беседе «Книжный клуб — форма приглашения» — проверьте глазами три вещи в самом чате:

  1. Та ли это беседа и папка: сверьте заголовок открытого чата и его расположение в папке «Встречи книжного клуба».
  2. То ли это сообщение: прочитайте саму реплику целиком и соседние сообщения вокруг неё, чтобы убедиться, что слова относятся к нужному решению, а не к случайному упоминанию.
  3. Та ли это ветка: посмотрите на переключатель вариантов под сообщением; если поиск привёл вас в боковую или устаревшую ветвь, переключитесь на рабочий вариант ответа.

Отделяйте эту проверку человеком от входа модели: то, что вы открыли и прочитали реплику на экране, не передаёт её автоматически в другой чат. Как формируется реальный вход запроса в длинном диалоге, мы разбирали в уроке про контекстное окно и сжатие чата, а общие принципы отбора сведений для модели — в материале про контекст-инжиниринг и выбор входа модели. Наличие или отсутствие System Prompt и Knowledge у папки проверяется непосредственно в окне настроек папки, когда эти поля доступны вашей учётной записи, а открытие нового пустого чата в папке позволяет лишь отдельно увидеть подстановку Default Model (создавать новый чат или отправлять платные запросы в нашем упражнении не требуется).

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

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

Пройдите шесть шагов:

  1. Выберите 2–3 существующие собственные несекретные беседы, которые относятся к одной понятной вам задаче.
  2. Дайте им различимые названия через Rename в меню чата, чтобы по заголовку сразу читалось назначение каждого разговора, и при доступности закрепите один из них через Pin.
  3. Подготовьте собственную папку с проверенным доступом Restricted (создайте новую через + у раздела Folders или откройте существующую через Edit), проверьте через Edit → Access, что к папке нет общего доступа (в том числе унаследованного от родительских папок), и убедитесь, что поля System Prompt и Knowledge видимы и пусты.
  4. При выполнении условий шага 3 переместите выбранные беседы в эту папку через пункт Move или перетаскиванием и проверьте, что они отображаются внутри неё.
  5. Откройте Search (Cmd/Ctrl + K), выберите тип Chats, в фильтре View укажите Created by you, при необходимости выберите папку в Location, после чего введите 1–3 реальных слова из вашей переписки.
  6. Откройте найденный результат (Open или Enter) и проверьте полный текст реплики, активную ветку и папку.

Зафиксируйте результат в рабочей записи (до реального выполнения поля остаются незаполненными):

  • Выбранные существующие беседы (исходные темы): не выполнено / ...
  • Новые видимые названия после Rename и статус Pin: не выполнено / ...
  • Проверенная папка (владелец — вы, эффективный статус Restricted без общего доступа у предков, право записи и проверяемое отсутствие System Prompt и Knowledge): не выполнено / ...
  • Видимое расположение бесед после перемещения: не выполнено / ...
  • Фактические слова, введённые в Search (Chats / View: Created by you / Location): не выполнено / ...
  • Что показала проверка открытого сообщения, активной ветки и пути папки: не выполнено / ...
  • Невыполненный шаг и точная причина (если не хватило существующих бесед, функции, прав, результата поиска или возможности проверить доступ и настройки папки): не выполнено / ...

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

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

Материалы урока

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

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

утерброда.