Гайд · TNWS AI
Как показать прогресс индексации документов RAG в Gradio
Подключаем gr.Progress к обработке фрагментов и проверяем, что процент отражает фактически завершённую работу.
Задача и применимость
Русскоязычный вопрос: «как показать прогресс обработки документов rag в gradio». Пример подходит для функции Gradio с последовательной подготовкой документов к RAG; здесь намеренно использована детерминированная обработка строк без скрытой загрузки модели. Настоящая индексация требует собственного разбиения, embeddings и базы, а Gradio отвечает за отображение стадии. Официальная документация Progress проверена 20 сентября 2026 года.
Что подтверждено производителем
Объект gr.Progress() ставится параметром функции со значением по умолчанию, обычно после входов. Вызов progress(float_between_0_and_1, desc=...) обновляет индикатор. Пример производителя использует Interface(...).queue().launch(), то есть очередь включена для показа прогресса во время исполнения.
Порядок действий
- Разбейте процесс на известные этапы и посчитайте число фактических файлов.
- Объявите параметр progress=gr.Progress() после входа функции.
- Обновляйте дробь после обработки очередного файла, не до неё.
- При ошибке файла остановитесь с сообщением и не показывайте 100 процентов.
- Сравните число записей в итоговом индексе с обработанными элементами.
Готовый шаблон
Сохраните пример в отдельном файле Python. В коде нет реального секрета или скрытого вызова модели: если подключён внешний API, его адрес и параметры указаны явно. Установите gradio в отдельном окружении; дополнительные пакеты требуются только там, где они импортированы в примере.
import gradio as gr
def prepare(lines, progress=gr.Progress()):
docs = [s.strip() for s in lines.splitlines() if s.strip()]
if not docs:
raise gr.Error("Введите хотя бы одну строку документа")
ready = []
for i, doc in enumerate(docs, start=1):
ready.append({"id": f"doc-{i}", "text": doc})
progress(i / len(docs), desc=f"Подготовлено {i} из {len(docs)}")
return "\n".join(f"{x['id']}: {x['text']}" for x in ready)
gr.Interface(prepare, gr.Textbox(lines=6, label="Строки документов"),
gr.Textbox(lines=6, label="Подготовлено"),
title="Подготовка корпуса RAG").queue().launch(server_name="127.0.0.1")
Вход и ожидаемый результат
Вход содержит две строки: «Возврат 14 дней» и «Доставка по будням». Итог — две записи doc-1 и doc-2; прогресс после первой равен 0.5, после второй — 1.0. Это подготовка записей, не получение векторов. При подключении embedding-модели обновляйте индикатор после подтверждённого успеха этапа, а не после одного вызова отправки запроса.
Проверка контракта
Пользовательский индикатор должен соответствовать измеримой работе. Если загрузка PDF занимает 90 процентов времени, а вы отметили её как первую из десяти равных стадий, «10%» будет вводить в заблуждение. В такой ситуации показывайте стадии словами («чтение», «разбиение», «индексация») либо оценивайте прогресс по числу обработанных страниц или чанков. Процент — оценка, а не обещание точного времени завершения. Не подставляйте sleep ради красивой анимации в production.
Работа с данными пользователя
Для RAG важна идемпотентность: повторное нажатие «подготовить» не должно без контроля создавать дубли в базе. Прежде чем добавить реальную запись, определите стабильные doc_id и политику обновления. Для больших файлов прогресс «обработано 20 из 100» ещё не гарантирует, что 20 embedding-векторов сохранены; база может вернуть ошибку позже. Разделите число подготовленных, векторизованных и записанных объектов и сверяйте каждую стадию перед утверждением результата.
Что проверить перед развёртыванием
При ошибке одного документа не отмечайте задачу успешной только потому, что цикл дошёл до конца. Отдельно сохраняйте список непринятых файлов, причины и безопасные для показа пользователю сообщения. Gradio предоставляет визуальное обновление, но не транзакцию вашего хранилища. Если программа оборвалась, оператор должен понимать, какие doc_id уже были записаны и как безопасно повторить недостающие элементы. Секретные тексты и полные пути файлов в поле desc не выводите.
Готовый промпт для ручной проверки уже созданного RAG-индекса: «По этим фрагментам ответь, сколько дней отведено на возврат; назови ID подтверждающего фрагмента. Если данных нет, ответь НЕИЗВЕСТНО». Для показанного корпуса ожидается «14 дней» и doc-1. Это отдельная проверка качества поиска и генерации, не критерий правильности виджета Progress. Проверяйте одновременно UI-прогресс и фактически доступные в индексе документы.
Проверяйте не только количество фрагментов, но и их происхождение: для каждого doc_id сохраните исходный документ, диапазон страницы или строки и версию модели embeddings. Когда сотрудник задаст вопрос, система сможет показать конкретный подтверждающий кусок, а не произвольную фразу генератора. Если прогресс показывал 100%, но векторный индекс содержит меньше записей, нельзя считать задачу завершённой. Запишите такую ситуацию в отчёт об ошибке и оставьте возможность безопасного повторения без удвоения документов.
Критерии приёмки
- После двух строк показаны doc-1 и doc-2.
- Индикатор достигает 100% только после второй готовой записи.
- Пустой вход выдаёт ошибку, а не фиктивный успех.
Типичные ошибки и чего не делать
- Не считать процент гарантией времени окончания.
- Не обозначать завершение до подтверждения записи в базу.
- Не показывать путь конфиденциального файла в desc.
FAQ
Что показывает gr.Progress?
Обновления, которые функция сообщает ему явно.
Обязательна ли очередь?
Официальный пример включает queue для интерактивного прогресса.
Индексирует ли Gradio сам?
Нет, индексацию реализует ваш код.
Официальные источники
Частые вопросы
Что показывает gr.Progress?
Обновления, которые функция сообщает ему явно.
Обязательна ли очередь?
Официальный пример включает queue для интерактивного прогресса.
Индексирует ли Gradio сам?
Нет, индексацию реализует ваш код.
Читайте также
Как добавить ползунок temperature к AI-чату через additional_inputs в Gradio
Связываем Slider и функцию чат-бота без ошибки порядка аргументов; проверяем значение до вызова нейросети.
Как добавить примеры вопросов в Gradio, не вызывая нейросеть по клику
Настраиваем examples и run_examples_on_click=False, чтобы пользователь отредактировал вопрос перед дорогим вызовом модели.
Как группировать запросы к ML-модели через batch=True в Gradio Interface
Сверяем сигнатуру пакетной функции, tuple of lists и max_batch_size на детерминированном тесте.
Комментарии
Пока тихо. Скажите первое слово