Полностью автономное Streamlit-приложение с поддержкой BYOK (Bring Your Own API Key) для работы с моделями OpenAI GPT. Пользователь вводит свой собственный API ключ, который хранится только в памяти сессии (без записи в файлы).
- Ввод ключа через защищённое поле (password input)
- Хранение только в
st.session_state(без записи на диск) - Кнопка "Сохранить ключ" с уведомлением "✅ Ключ сохранён. Можно работать."
- Кнопка "Очистить ключ" для удаления из сессии
- Предупреждение при отсутствии ключа (блокирует работу с моделью)
- Выбор модели:
- gpt-4o
- gpt-4-turbo
- gpt-4o-mini
- gpt-3.5-turbo
- Настройка температуры:
- Слайдер от 0.0 до 1.0 (шаг 0.1)
- 0.0 = детерминированные ответы
- 1.0 = максимальная креативность
- Создание новых чатов (кнопка "🆕 Новый чат")
- Переключение между чатами
- Удаление чатов с подтверждением
- Автоматическая нумерация ("Новый чат 1", "Новый чат 2", ...)
- Счётчик сообщений для каждого чата
- Минималистичный тёмный дизайн
- Анимированный индикатор "🤖 Печатает..."
- Временные метки для каждого сообщения
- Expander "Настройки API" для компактности
- Адаптивная вёрстка (responsive design)
init_session_state()Инициализирует переменные состояния сессии:
api_key- OpenAI API ключmodel- Выбранная модельtemperature- Температура генерацииchats- Словарь всех чатовcurrent_chat_id- ID активного чата
create_new_chat() -> strСоздаёт новый чат и возвращает его ID.
switch_chat(chat_id: str)Переключает активный чат.
delete_chat(chat_id: str)Удаляет чат по ID. Если удаляется активный чат, автоматически переключается на другой.
get_current_chat() -> DictВозвращает данные текущего активного чата.
add_message(role: str, content: str)Добавляет сообщение в историю текущего чата.
call_openai_api(messages: List[Dict], api_key: str) -> Optional[str]Вызывает OpenAI API для получения ответа от модели. Использует:
- Модель из
st.session_state.model - Температуру из
st.session_state.temperature - API ключ, переданный как параметр
display_message(role: str, content: str, timestamp: datetime)Отображает сообщение в чате с временной меткой.
show_typing_indicator(placeholder, duration: float = 1.5)Показывает анимированный индикатор "🤖 Печатает...".
- Пользователь открывает приложение
- Видит предупреждение: "
⚠️ API ключ не введён" - Открывает expander "🔑 Настройки API" в sidebar
- Вводит свой OpenAI API ключ в поле (скрыто как пароль)
- Нажимает "💾 Сохранить ключ"
- Видит уведомление: "✅ Ключ сохранён. Можно работать."
- В том же expander выбирает модель (например, gpt-4o-mini)
- Настраивает температуру (например, 0.7)
- Видит текущие настройки: "gpt-4o-mini, температура 0.7"
- Вводит запрос в поле "Введите ваше сообщение..."
- Видит анимированный индикатор "🤖 Печатает..."
- Получает ответ от модели с временной меткой
- Создаёт новый чат кнопкой "🆕 Новый чат"
- Переключается между чатами в sidebar
- Удаляет ненужные чаты (с подтверждением)
- Нажимает "🗑️ Очистить ключ"
- API ключ удаляется из памяти
- При следующем запуске нужно ввести ключ заново
- API ключ хранится только в
st.session_state - Не записывается в файлы, логи или базы данных
- Поле ввода ключа имеет тип
password(символы скрыты) - Ключ удаляется при закрытии браузера/вкладки
- Ключ хранится только в рамках одной сессии браузера
- При обновлении страницы ключ будет потерян
- Пользователь должен хранить свой ключ в безопасном месте
- Не используйте это приложение на общедоступных компьютерах
pip install streamlit openaistreamlit run app_byok.pyПосле запуска приложение откроется автоматически:
- Локально: http://localhost:8501
- В сети: http://192.168.x.x:8501
Весь код содержит подробные комментарии на русском языке, объясняющие:
- Назначение каждой функции
- Параметры и возвращаемые значения
- Логику работы сложных участков
- Структуру данных
✅ Полный контроль над API ключом
✅ Использование собственной квоты OpenAI
✅ Прозрачность расходов (отслеживание в личном кабинете OpenAI)
✅ Безопасность (ключ не хранится на сервере)
✅ Не нужно платить за API вызовы пользователей
✅ Простота развёртывания (не требуется backend)
✅ Масштабируемость (каждый пользователь использует свой ключ)
✅ Юридическая чистота (пользователь сам отвечает за использование API)
- Экспорт чата в TXT/JSON
- Импорт истории чата
- Переименование чатов
- Быстрые промпты (шаблоны)
- Правила общения (system prompt)
- Счётчик токенов
- Светлая тема (переключатель)
- Настройка размера шрифта
- Подсветка кода в ответах
- Копирование сообщений в буфер обмена
- Markdown preview для ввода
- Валидация формата API ключа
- Проверка квоты перед запросом
- Ограничение размера истории
- Таймаут для длительных запросов
Свободное использование. Код предоставлен "как есть" (AS IS).
При возникновении проблем:
- Проверьте корректность API ключа
- Убедитесь, что у вас есть доступ к выбранной модели
- Проверьте баланс на аккаунте OpenAI
- Перезагрузите страницу и введите ключ заново
Версия: 1.0.0
Дата: 5 октября 2025
Автор: AI Tutor Team