Оригинал: https://timofei-ermolaev.ru/courses/open-webui/dokumenty-knowledge-i-kachestvo-rag/embeddingi-i-smena-modeli/

# Как сменить embedding-модель в Open WebUI и проверить поиск

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

[![Тимофей Ермолаев](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)

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

26 октября 2026 г.

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

26 октября 2026 г.

**На урок**

35 мин

**Тема**

[Документы, Knowledge и качество RAG](<https://timofei-ermolaev.ru/courses/open-webui/dokumenty-knowledge-i-kachestvo-rag/>)

Вы готовите сообщение участникам встречи: сколько стоит порция воды, какой у неё объём и что взять с собой, если хочется чая. Сведения есть в знакомой памятке. Чтобы ответить по ней, Open WebUI должен найти подходящий текст. Для векторного поиска используются **эмбеддинги — числовые представления документов и вопросов**. При смене модели, которая их вычисляет, нужно согласовать эти представления и отдельно проверить результат поиска.

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

Памятка полностью вымышленная. Для неё задан исходный текст, но PDF-варианты A/B из прошлого урока не создавались. Загрузка, OCR, поисковые запросы, вычисление эмбеддингов, получение ответов, миграция, резервное копирование и восстановление при подготовке не выполнялись. Ниже — критерии и условный порядок проверки, без полученных результатов.

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

## Как Open WebUI связывает вопрос с текстом памятки

В уроке о PDF мы разобрали, [как сверять Indexed text с оригиналом](<https://timofei-ermolaev.ru/courses/open-webui/dokumenty-knowledge-i-kachestvo-rag/pdf-skany-tablicy-i-ocr/>) . Такая сверка позволяет установить, сохранились ли нужные сведения и связи между ними. Если вы её ещё не проводили, это остаётся невыполненным шагом. Для объяснения поиска возьмём тот же заданный источник:

```
Памятка буфета на встрече. Версия 1.  
  
Напиток | Объём одной порции, л | Цена одной порции, руб.  
Чай | 0,25 | 35,50  
Вода | 0,50 | 20,00  
  
Чай выдают только в своей кружке.  
Воду выдают в бутылке.  
```

Человек может спросить, что нужно принести, чтобы получить чай. В памятке это выражено другими словами — условием собственной кружки. Для поиска полезно сопоставлять такие формулировки, даже если они не повторяют друг друга дословно.

**Embedding-модель преобразует текст в последовательность чисел.** Такое представление называют эмбеддингом, или вектором. Оно позволяет сравнивать тексты по близости: для обоих текстов вычисляют представления, затем сопоставляют их. Этот принцип описан в [документации Sentence Transformers о сходстве текстов](<https://raw.githubusercontent.com/huggingface/sentence-transformers/33f9bd81610560e48ff5eac80e910496b49ae193/docs/sentence_transformer/usage/semantic_textual_similarity.rst#L1-L5>) .

При подготовке документа система получает представления его частей и сохраняет их для последующего поиска. **Индекс** — подготовленные поисковые данные, по которым можно находить соответствующие фрагменты. Числовое представление не становится новым текстом памятки: найденные сведения всё равно нужно читать и проверять.

Когда приходит вопрос, для него тоже вычисляется представление. У поиска получаются два входа: ранее сохранённые представления документа и представление текущего вопроса. В показанном [пути поиска Open WebUI](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/retrieval.py#L2791-L2803>) вопрос обрабатывается текущей embedding-функцией, после чего результат используется для поиска в хранилище.

Поиск может выбрать подходящие части текста для передачи чат-модели. Если настроен реранкер, он дополнительно [оценивает пары «вопрос — уже найденный фрагмент»](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/retrieval/utils.py#L1255-L1278>) . Это отдельная роль; наличие такого этапа и улучшение результата от него здесь не предполагаются. Затем чат-модель формулирует ответ по полученному контексту.

Так различаются четыре звена:

- **Сохранённый текст:** что осталось после извлечения из файла.
- **Числовые представления:** по каким подготовленным данным система сопоставляет документ и вопрос.
- **Найденный контекст:** какие сведения удалось отобрать и использовать при подготовке ответа.
- **Ответ:** как чат-модель изложила эти сведения.

Обработчик извлечения получает текст из файла. Embedding-модель строит представления для поиска. Чат-модель составляет ответ. Замена одной из них не подменяет задачи остальных.

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

## Почему сохранения новой embedding-модели недостаточно

Для понимания смены модели важны **два момента времени**. Представления документов были построены раньше. Представление очередного вопроса вычисляется сейчас, с действующей конфигурацией.

Если администратор меняет embedding-модель, новый вопрос может уже обрабатываться новой функцией, а документы оставаться представленными прежней. Текст о кружке при этом может быть совершенно тем же. Изменяется способ его численного представления.

Для содержательного сопоставления нужны совместимые представления. В [документации Open WebUI смена embedding-модели требует переиндексации документов Knowledge](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L224-L228>) . Для уже существующего внешнего индекса отдельно указано требование [совпадения модели и размерности](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L76-L81>) .

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

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

Согласованная обработка не обязательно означает одинаковую строку на входе. Некоторые модели предусматривают разные служебные приставки — **префиксы** — для вопроса и документа. Их назначение и необходимость определяются требованиями конкретной модели; в Open WebUI для них предусмотрены [отдельные параметры](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/reference/env-configuration.mdx#L4703-L4719>) .

Два входа в поиск

- **Сохранённый текст документа**

  Построение представлений частей

  **Представления частей документа**

  Сохранены раньше

  **В векторный поиск:** сохранённые представления
- **Текущий вопрос**

  Вычисление представления вопроса

  **Представление вопроса**

  Вычисляется сейчас текущей embedding-моделью

  **В векторный поиск:** представление вопроса

**Нужны совместимые представления**Одной одинаковой размерности недостаточно

Оба входа — в поиск

**Векторный поиск**

Сопоставление вопроса с сохранёнными представлениями

Отбор фрагментов документа

**Отобранный текст**

Текст фрагментов, выбранных поиском

- **Без реранкера**

  Отобранный текст
  **напрямую в чат-модель**
- **Реранкер**

  **Если настроен:** переоценка найденных фрагментов

  - Из первичного отбора:
    **отобранный текст**
  - Отдельно из ветви вопроса:
    **исходный вопрос**

  Текст после переоценки
  **в чат-модель**

**Чат-модель**

Получает отобранный текст как контекст

Формулирует

**Ответ**

Теперь разделим действия, которые легко спутать:

| Действие | Что происходит | Чего оно само по себе не подтверждает |
| --- | --- | --- |
| **Сохранение настройки embedding-модели** | Меняется конфигурация и подготавливается функция последующих вычислений. | Что прежние документные векторы перестроены и согласованы с новой моделью. |
| **Загрузка или подготовка модели** | Подготавливаются данные модели и возможность её использования. | Что документы уже получили новые представления или реальное вычисление прошло успешно. |
| **Перезапуск приложения** | Приложение запускается с фактически применяемой конфигурацией. | Что ожидаемые новые настройки применились и старый индекс перестроился. |
| **Освобождение памяти загруженной модели** | Меняется состояние модели в оперативной памяти или памяти ускорителя. | Что изменились сохранённые векторы документов. |
| **Переиндексация** | Отдельно перестраиваются предусмотренные операцией поисковые представления. | Что обработан каждый объект и результат поиска подходит для ваших вопросов. |

Это сопоставление последствий, а не список действий, которые следует выполнить подряд. Сохранение настройки, загрузка модели и подготовка функции могут быть связаны внутри одного процесса. Однако [сохранение embedding-конфигурации](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/retrieval.py#L509-L571>) не вызывает перестроение прежних коллекций.

Успешное сохранение настройки также не заменяет проверку вычисления. По коду возможна ситуация, когда локальная модель не загрузилась, а ошибка проявится позднее [при попытке получить эмбеддинг](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/retrieval/utils.py#L1118-L1129>) . Это возможность, установленная по реализации, а не воспроизведённый здесь сбой.

**Здесь Save относится именно к настройке embedding-модели.** В предыдущем уроке Edit → Save у Indexed text обозначало другую операцию: обработку предоставленного пользователем текста и обновление связанных коллекций. Одинаковое слово на кнопке не делает эти действия одинаковыми.

На автоматическое устранение несовместимости тоже полагаться нельзя. У Memory, системы памяти пользователей, есть [частное перестроение при определённой ошибке размерности во время записи векторов](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/memories.py#L166-L175>) . Оно не является общей миграцией Knowledge и не устанавливает совместимость представлений одинаковой размерности.

Далее названия настроек и поведение операций приведены по документации и коду Open WebUI v0.12.4, исследованным 25 октября 2026 года. Версия вашей установки может отличаться; работающий интерфейс при подготовке урока не проверялся. Официальный путь к настройке — [Settings → Admin → Documents](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L206-L208>) , раздел Embedding. Это административная настройка, но для понимания её последствий получать права администратора не требуется.

Текущее выбранное значение показывает сегодняшнюю конфигурацию. Чем были построены существующие представления, выясняют отдельно по доступным сведениям. Если происхождение индекса неизвестно, оно так и остаётся неизвестным. Прежде чем что-либо менять, определим, какие полезные сведения будем проверять.

## Зафиксируйте четыре вопроса и исходные наблюдения

Начнём с содержания памятки. Для сообщения участникам важны конкретные отношения: собственная кружка обязательна для чая; объём и цена относятся к одной порции воды; воду выдают в бутылке. Часы работы в полном заданном тексте отсутствуют.

Из этого получаются четыре вопроса:

| Точный вопрос | Ожидаемая опора по оригиналу | Что проверяем |
| --- | --- | --- |
| Что взять с собой, если я хочу чай? | «Чай выдают только в своей кружке». | Есть ли доступная найденная опора для перефразированного вопроса; сохранилось ли обязательное условие именно для чая. |
| Сколько стоит одна порция воды и какой у неё объём? | Строка воды с понятной связью с заголовками: 0,50 л и 20,00 руб. за одну порцию. | Поддержаны ли оба значения, единицы и их принадлежность воде. |
| В чём выдают воду? | «Воду выдают в бутылке». | Поддержан ли способ выдачи без добавления других правил. |
| Во сколько открывается буфет? | В полном заданном источнике этих сведений нет. | Не появилось ли в ответе неподтверждённое время. |

**Это критерии, а не результаты запросов.** Первые три строки называют положительные опоры, которые можно искать в доступном контексте. Четвёртая проверяет границу ответа по источнику. Для неё не требуется найти «фрагмент об отсутствии часов» или получить пустую выдачу. Отсутствие времени установлено чтением всей памятки, а не результатом поиска.

Не расширяем и смысл вопроса о бутылке: источник сообщает способ выдачи воды. Дополнительные разрешения или запреты из него не придумываем.

Продолжайте одну запись из предыдущего урока, если начали её. Общие условия достаточно указать один раз: источник и версия, сохранённый текст, подключённые источники, подтверждённая текущая конфигурация и отдельно известная история индекса. Для каждого вопроса нужны:

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

В нашей подготовке поля реального поиска и ответов имеют значение **«не выполнялось»**. Фразу из столбца ожидаемой опоры нельзя скопировать в поле полученного фрагмента: тогда критерий незаметно превратится в вымышленный результат.

**Наблюдения «до» сохраняют до сохранения настройки embedding-модели.** Недостаточно сделать это перед Reindex: уже после изменения настройки новый вопрос может обрабатываться другой функцией. Если у вас есть разрешённый источник и допустимы поисковые запросы, сначала зафиксируйте доступные исходные фрагменты и ответы при прежней конфигурации. Ожидаемый ответ или воспоминание о прошлой работе не заменяют такую запись.

Для сравнения оставляют постоянными сам документ и сохранённый текст, точные вопросы, состав подключённых источников, параметры разбиения, способ поиска, число и порог отбора фрагментов, реранкер, чат-модель и доступные параметры её работы. Менять всё это для прохождения урока не нужно. Если часть условий неизвестна или менялась, запишите ограничение: различие наблюдений нельзя уверенно объяснить только embedding-моделью.

Это особенно важно для разбиения. При переиндексации [части текста создаются заново по текущим настройкам](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L230-L242>) . Одинаковый PDF ещё не означает одинаковые части, по которым работает поиск.

Заранее выясните и то, что удастся наблюдать. Полный оригинал или Indexed text в просмотрщике показывает содержание источника. Раскрытый найденный фрагмент показывает конкретную доступную опору поиска. Цитата под ответом может давать ссылку на источник, но не раскрывает автоматически весь найденный и переданный контекст.

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

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

На этом этапе уже есть самостоятельный результат: вы различаете ожидаемые сведения и фактические наблюдения, знаете, что нужно сохранить для сравнения. Без исходного результата можно позднее описать нынешнее наблюдение, но выполненного сравнения «до/после» не получится. Если реальное изменение не требуется или недоступно, подготовленные критерии остаются полезным завершением работы.

## Что затрагивает переиндексация и когда её можно выполнять

Общая операция называется **Reindex Knowledge and Memory Vectors**, в русской локализации — **«Переиндексировать векторы знаний и памяти»**. Действие обозначено как Reindex / «Переиндексировать». В изученной [последовательности интерфейса](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/src/lib/components/admin/Settings/Documents.svelte#L379-L413>) после подтверждения вызываются три стадии:

| Стадия | Какие данные затрагиваются | Что существенно для проверки |
| --- | --- | --- |
| **Файлы Knowledge** | Базы знаний и связанные файлы, включая отдельные файловые коллекции этих файлов. | Используется сохранённый текст из SQL-базы. Разбиение и эмбеддинги строятся по текущим настройкам; PDF заново не читается. |
| **Поиск по названиям и описаниям Knowledge** | Отдельный поисковый индекс имён и описаний баз знаний. | Это самостоятельная стадия. Её продолжение не доказывает, что успешно обработан каждый объект. |
| **Memory** | Векторные представления памяти пользователей в рамках общей операции. | Область не ограничена памятью текущего читателя. Сами сохранённые SQL-записи воспоминаний эта функция не удаляет. |

Выбор нашей памятки или личной коллекции не ограничивает общую операцию этим источником. Memory предназначена для обработки памяти пользователей в целом. При этом по изученной реализации нельзя удостоверить полный фактический охват каждого пользователя в конкретном запуске. Его требуется выяснять по данным и свидетельствам самой установки; одни счётчики ответа полноту не доказывают. Основание этой границы — [реализация общего перестроения памяти](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/memories.py#L444-L475>) .

**Прежние коллекции удаляются до нового построения.** Это относится к [перестроению данных Knowledge](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/knowledge.py>) и [векторных коллекций памяти](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/memories.py#L127-L163>) . Если последующее вычисление или запись завершится ошибкой, уже сделанные изменения не обязательно будут отменены. Общего механизма, который при любом сбое возвращает все три стадии к прежнему состоянию целиком, в разобранных путях не установлено. Поэтому восстановление готовят заранее.

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

Так происходит, в частности, с некоторыми [ошибками файлов Knowledge](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/knowledge.py#L438-L461>) . Для индекса имён и описаний [ответ содержит число всех объектов и число успешных обработок](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/knowledge.py#L469-L494>) , однако интерфейс не требует их равенства перед переходом к Memory. Общая надпись об успехе может поэтому соседствовать с неполным результатом. Подробные свидетельства и журналы доступны не каждому пользователю; если их нет, полнота остаётся неизвестной.

Есть ещё две границы.

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

Вторая — **файлы, загруженные только в чат и не связанные с Knowledge, не охвачены**. У связанных с Knowledge файлов перестраиваются и отдельные файловые коллекции, поэтому сокращение «файлы чата не обновляются» было бы неточным. Для самостоятельных файлов только из чата [документация описывает повторную загрузку](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L234-L248>) . Это отдельная обработка с сохранённым оригиналом и согласованными получателями и расходами, а не обязательное предложение заново загрузить всё.

Теперь понятны вопросы, на которые нужно ответить **до изменения общей настройки**:

- **Зачем требуется смена и кто отвечает за неё?** Нужны обоснованная задача, полномочия на всю затронутую область и согласованная среда или время работ. На отдельном стенде тоже учитываются все фактически находящиеся там данные.
- **Что настроено сейчас и откуда взялся старый индекс?** Важны версия Open WebUI, движок, модель и её доступная точная версия, требования к обработке вопроса и документа, используемое поисковое хранилище. Подтверждённые настройки и неизвестная история записываются отдельно.
- **Что сохранено для сравнения?** Нужны разрешённый оригинал, проверенный сохранённый текст и реальные наблюдения «до», полученные ещё до сохранения новой embedding-конфигурации.
- **Как вернуть согласованное состояние при сбое?** Какие хранилища действительно используются, подготовлены ли их согласованные копии и готов ли применимый способ восстановления?
- **Кому попадут данные и допустима ли обработка?** Нужно знать фактические сервисы, передаваемое содержание и существенные условия дальнейшей обработки.
- **Какие расходы и ресурсы допустимы?** Перестроение повторно вычисляет представления и может занять ресурсы сервера или вызвать оплачиваемый сервис.

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

**Как читать сведения о модели.** В исследованном интерфейсе предусмотрены [Default (SentenceTransformers), Ollama, OpenAI и Azure OpenAI](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/src/lib/components/admin/Settings/Documents.svelte#L1016-L1044>) . Локальный Default недоступен в Slim. Исходное значение модели Default — `sentence-transformers/all-MiniLM-L6-v2`; при выборе OpenAI или Azure интерфейс подставляет `text-embedding-3-small`. Это значения по умолчанию и подстановки, а не установленная модель читателя, история его файлов или рекомендация для русского языка.

У части настроек [сохранённые внутри Open WebUI значения имеют приоритет над переменными окружения после первого запуска](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/reference/env-configuration.mdx#L19-L33>) . Документация описывает отдельный способ отключить такое поведение. Здесь достаточно учитывать его при проверке фактически действующей конфигурации; менять глобальные правила хранения настроек ради памятки не требуется.

**Получатель определяется реальным подключением.** По соответствующим путям embedding-сервису могут передаваться части документов, вопросы, имена и описания Knowledge и память пользователей. При включённой настройке возможны дополнительные сведения о пользователе. Это видно в [реализации вычислений и обращений к сервисам](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/retrieval/utils.py>) .

Название Ollama, совместимость с OpenAI API или локальная чат-модель не подтверждают локальность всей обработки. Чат-провайдер получает выбранный контекст отдельно. Условия хранения, использования для обучения, тарифы и дальнейшие получатели зависят от конкретного сервиса; безопасные значения нельзя подставить по одному названию.

Default с SentenceTransformers вычисляет представления на сервере Open WebUI. Подготовка модели при этом может обращаться к Hugging Face за её весами. Локальное вычисление и загрузка модели — разные операции; локальность одного этапа не гарантирует отсутствие сетевых обращений всей установки. Пакетная или параллельная обработка также не задаёт универсальное время, объём памяти или стоимость.

**Копия должна соответствовать устройству установки.** В типичной локальной схеме важны загруженные файлы, векторная база и основная база приложения — например, `uploads`, `vector_db`, `webui.db`. При внешних SQL-, векторных или файловых хранилищах одного локального каталога может быть недостаточно. [Руководство по резервному копированию](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/tutorials/maintenance/backups.md>) отдельно учитывает целостность данных: простое копирование файлов работающей базы не даёт универсальной гарантии согласованной копии.

Только при выполненных условиях ответственный администратор проходит согласованный порядок:

1. Подтверждает область, полномочия, получателей, ресурсы и готовность восстановления; убеждается, что фактическое «до» уже сохранено.
2. Меняет только согласованную embedding-конфигурацию, сохраняя остальные условия сравнения.
3. Отдельно выполняет согласованное перестроение.
4. Собирает доступные свидетельства состояния стадий, ошибок и фактического охвата.

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

**Reset Vector Storage/Knowledge и удаление uploads — другие, разрушительные операции.** В [реализации сброса](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/retrieval.py#L2955-L2969>) очищается векторное хранилище и удаляются базы Knowledge; [сброс uploads](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/routers/retrieval.py#L2971-L2986>) удаляет загрузки. Они не входят в описанный путь смены модели.

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

## Сравните доступные опоры, затем ответы

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

Порядок для каждого вопроса такой:

1. **Установите известное состояние операции и её охвата.** Отдельно отметьте подтверждённое завершение, ошибки или оставшуюся неопределённость.
2. **Повторите тот же вопрос с теми же подключёнными источниками.** Изменившиеся условия запишите.
3. **Сохраните доступное наблюдение о контексте.** Это может быть раскрытый фрагмент, доступное содержание цитаты или только указание источника. Назовите именно то, что видно.
4. **Сверьте нужное отношение с оригиналом.** Важно не простое присутствие знакомых слов, а достаточная опора для сведения.
5. **Отдельно оцените ответ модели.** Проверьте, следует ли он из доступных сведений и не добавляет ли неподтверждённых правил.
6. **Сопоставьте с сохранённым «до».** Если исходного наблюдения не было, описывайте только нынешнее состояние.

Для вопроса о кружке доступная опора должна сохранять обязательное условие получения чая. Упоминания кружки где-либо в тексте недостаточно, если исчезло слово «только» или условие отнесено к воде.

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

Для бутылки проверяется указанный способ выдачи. Для часов — отсутствие неподтверждённого времени в ответе по заданной памятке. Последняя проверка не измеряет способность embedding-модели найти «отсутствующий факт»: такого фрагмента в источнике нет.

**Цитата и найденный контекст дают разные свидетельства.** В Open WebUI [цитаты служат ссылочными опорами для используемых источников](<https://raw.githubusercontent.com/open-webui/docs/d8c902e3217d9f6e7e2edcacc0a45adff8a5748d/docs/features/chat-conversations/rag/index.md#L258-L260>) . Но наличие ссылки под ответом не раскрывает автоматически весь ход поиска и весь переданный модели текст. Если по ссылке открылся полный оригинал, вы получили доступ к оригиналу; это ещё не доказательство, что целиком он участвовал в ответе.

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

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

**Пустая выдача тоже не устанавливает причину.** Например, в исследованном [адаптере Chroma ошибка поиска может возвращаться как отсутствие результата](<https://raw.githubusercontent.com/open-webui/open-webui/33c1978d5bad52a31df75ea55143025dfad18d16/backend/open_webui/retrieval/vector/dbs/chroma.py#L76-L109>) . Это поведение конкретного адаптера, а не диагноз каждой пустоты и не общее правило всех хранилищ. Из пустого результата нельзя заключить, что нужного сведения нет в оригинале.

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

Оценки сходства разных моделей не следует использовать как единую шкалу качества. Изменение формулировки ответа также не изолирует влияние embeddings. Для этой работы важнее конкретное наблюдение: какая опора была доступна, что она поддерживала и как ответ с ней соотносился.

При подготовке урока таких наблюдений не получено. Критерии остаются критериями, а поля фактического поиска и ответов — «не выполнялось».

## Выберите следующий шаг по установленному состоянию

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

| Установленное состояние | Следующий шаг |
| --- | --- |
| Критерии готовы, проба не проводилась | Сохранить запись. Понимание и критерии получены; установка не объявляется проверенной. |
| Сохранённый текст расходится с оригиналом | Вернуться к конкретной сверке из урока о PDF и Indexed text. Переиндексация не возвращает строку, потерянную при извлечении. |
| Исход операции неизвестен либо подтверждено частичное выполнение | Выяснить состояние того же запуска и затронутых областей. Не повторять глобальную операцию вслепую и не считать миграцию завершённой. |
| Найденный контекст недоступен | Сохранить неизвестность этого звена. Видимый ответ при возможности сравнить с оригиналом отдельно. |
| Получена пустая выдача или ошибка | Зафиксировать наблюдение и выяснять причину. Не объявлять автоматически потерю текста, индекса или низкое качество модели. |
| Доступная опора поддерживает сведения, но ответ с ними расходится | Отдельно разбирать формирование ответа. Расхождение само по себе не назначает embedding-модель причиной. |
| Проверенные опоры и ответ согласуются | Использовать подтверждённые сведения в пределах этих вопросов и условий; отдельно проверить итоговый пересказ. |

После таймаута общей переиндексации сначала требуется понять, продолжалась ли работа и какие области уже изменены. Это отличается от **Retry в просмотрщике** из предыдущего урока: он лишь повторно получает Preview или Indexed text для отображения. Разрешённый повтор просмотра не означает, что можно повторно запускать неизвестно чем завершившуюся операцию изменения индексов.

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

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

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

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

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

Отметьте урок, когда закончите чтение.

Урок пройден

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

## Об авторе

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

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

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

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