Гайд · TNWS AI
Как ограничить видимость API AI-чата в Gradio через api_visibility
Различаем public, undocumented и private у чат-интерфейса и не путаем скрытую документацию с защитой сервера.
Задача и применимость
Русскоязычный вопрос: «как скрыть api чатбота gradio api_visibility private». Подходит для документированного ChatInterface Gradio; параметр api_visibility описывает поведение Gradio API docs и клиентских библиотек, но не заменяет сетевую защиту и проверку личности пользователя. Документация проверена 20 сентября 2026 года; внешние правила reverse proxy зависят от вашей инфраструктуры.
Что подтверждено производителем
ChatInterface документирует три значения api_visibility: public показывает endpoint в API docs и позволяет вызов; undocumented скрывает запись из документации, но остаётся вызываемым; private скрывает из документации и запрещает вызов через клиентские библиотеки Gradio. Ни одно из этих описаний не утверждает, что параметр реализует универсальную авторизацию всего приложения.
Порядок действий
- Определите, кому действительно нужен программный доступ к чат-функции.
- Для демонстрации без SDK-вызовов задайте api_visibility="private".
- Проверьте фактическую доступность через документированный Gradio клиент в своём окружении.
- Настройте отдельные правила доступа на уровне reverse proxy и приложения.
- Повторите тест после обновления Gradio и конфигурации публикации.
Готовый шаблон
Сохраните пример в отдельном файле Python. В коде нет реального секрета или скрытого вызова модели: если подключён внешний API, его адрес и параметры указаны явно. Установите gradio в отдельном окружении; дополнительные пакеты требуются только там, где они импортированы в примере.
import gradio as gr
def answer(message, history):
return "Получено: " + message
demo = gr.ChatInterface(answer, api_visibility="private",
title="Внутреннее демо")
demo.launch(server_name="127.0.0.1", share=False)
Вход и ожидаемый результат
Для теста откройте локальную страницу, отправьте «Тест 123» и увидите «Получено: Тест 123». Затем проверьте список API-документации и попытку обращения через Gradio Client: callback с private не должен быть доступен клиентской библиотеке как публичный endpoint. Это не проверка недоступности порта посторонним в локальной сети.
Проверка контракта
Разница private и undocumented принципиальна. Если указать undocumented ради «секретности», endpoint будет скрыт из документации, но останется вызываемым; это режим для непубличного описания, не механизм защиты. Значение private делает конкретный callback недоступным клиентским библиотекам Gradio согласно API-справке, но видимый пользователю веб-интерфейс продолжает вызывать функцию — иначе демо не работало бы. Нельзя автоматически распространять вывод о поведении клиентской библиотеки на все HTTP-пути системы.
Работа с данными пользователя
Если чат обращается к платной или закрытой модели, защита должна начинаться раньше функции answer. Отключите ненужный внешний сетевой доступ, реализуйте аутентификацию и лимиты на границе сервиса, не сохраняйте ключ модели в коде страницы. Проверяйте негативные сценарии с отдельного устройства без учётных данных. Скрытие описания endpoint не мешает анализу сетевых запросов из браузера, а UI-приложение само может оставаться доступным.
Что проверить перед развёртыванием
Необдуманное отключение API ломает легитимные интеграции, которые уже вызывают чат через Gradio Client. Перед переключением инвентаризуйте клиентов, согласуйте переход, измерьте ошибки и оставьте отдельный явно авторизованный backend для служебного доступа. Документируйте точную версию Gradio и результат контрольного вызова, поскольку значение параметра и сетевые настройки — разные части системы. При изменении reverse proxy проверьте доступ и к файловым маршрутам, если принимаете вложения.
Готовый контрольный план доступа содержит две роли: обычный сотрудник видит веб-чат и ответ на тестовую строку; неавторизованный внешней сети не получает страницу и не обращается к модельному API. Для каждой роли зафиксируйте разрешённые маршруты. Проверка api_visibility покрывает только часть этого плана; остальные ограничения реализуются вашей системой. Не храните реальный секрет в примере и не открывайте share=True, если политика организации запрещает публичные ссылки.
Пройдитесь по сетевой схеме в порядке браузер — reverse proxy — сервер Gradio — модельный API. Для каждого звена отдельно ответьте, кто может установить соединение, какой токен он предъявляет и какое действие разрешено. Параметр api_visibility влияет на один контракт Gradio, а не на все четыре звена. Создайте тестового пользователя без привилегий и убедитесь, что он не вызывает административные или внутренние сервисы напрямую. После изменения конфигурации прокси выполните те же отрицательные проверки из сети, которая раньше была закрыта.
Критерии приёмки
- Обычный интерфейс отвечает на тестовую фразу.
- Private endpoint не появляется как публичный клиентский вызов.
- Отдельно проверен сетевой отказ для неавторизованного клиента.
Типичные ошибки и чего не делать
- Не считать undocumented механизмом авторизации.
- Не считать private закрытием всего сервера.
- Не включать публичный share без оценки данных.
FAQ
Чем private отличается от undocumented?
Private недоступен клиентским библиотекам, undocumented лишь скрыт из docs.
Работает ли веб-чат с private?
Да, параметр относится к API-видимости.
Нужен ли reverse proxy?
Для внешней защищённой публикации обычно нужен отдельный контроль доступа.
Официальные источники
Частые вопросы
Чем private отличается от undocumented?
Private недоступен клиентским библиотекам, undocumented лишь скрыт из docs.
Работает ли веб-чат с private?
Да, параметр относится к API-видимости.
Нужен ли reverse proxy?
Для внешней защищённой публикации обычно нужен отдельный контроль доступа.
Читайте также
Как добавить ползунок temperature к AI-чату через additional_inputs в Gradio
Связываем Slider и функцию чат-бота без ошибки порядка аргументов; проверяем значение до вызова нейросети.
Как добавить примеры вопросов в Gradio, не вызывая нейросеть по клику
Настраиваем examples и run_examples_on_click=False, чтобы пользователь отредактировал вопрос перед дорогим вызовом модели.
Как группировать запросы к ML-модели через batch=True в Gradio Interface
Сверяем сигнатуру пакетной функции, tuple of lists и max_batch_size на детерминированном тесте.
Комментарии
Пока тихо. Скажите первое слово