TelegramBot-OpenAI-API
? При поддержке ChatKeke
- Простой в использовании и быстрый в развертывании бот Telegram на базе Python для OpenAI API.
- ? Транскрипция голосовых сообщений через Whisper API
- (автотранскрипция, переводы и другие сообщения боту через голосовые сообщения TG)
- ☁️ Информация о погоде в режиме реального времени, оповещения о погоде и данные геолокации через OpenWeatherMap, WeatherAPI и NWS США (weather.gov).
- ? Геолокация и поиск по картам через MapTiler API
- (с прогнозами погоды по всему миру на всех языках, поддерживаемых OpenAI API)
- ? Инструкции по навигации через Openrouteservice API
- Ежедневное отслеживание использования токенов и ограничение скорости использования API / управление затратами
- ? Модели Perplexity API наряду с моделями OpenAI
- Полезно для проверки фактов и дополнения дат окончания OpenAI.
- Встроенные шаги Elasticsearch RAG
- Повышайте уровень знаний с помощью собственных документов
- Получите дополнительную информацию с помощью создателя пары вопросов и ответов.
- ? Уведомления о праздниках через модуль
holidays
Python- Локализуйте для поддерживаемых стран или добавляйте свои собственные специальные напоминания.
- ? Получение цен на акции через API Alpha Vantage и Yahoo! Финансы
- Доступ в режиме реального времени к финансовым и фондовым данным
- ? RSS-каналы из всех доступных источников
- Получайте новости и многое другое через RSS
- ? DuckDuckGo выполняет поиск как вызовы функций с дополненным контекстом.
- Новый! Субагентный просмотр для расширенного и точного поиска!
- Просмотр веб-страниц (дампы страниц со ссылками) как контекстно-дополненные вызовы функций
- С дополнительными списками разрешений/запретов домена/IP для обеспечения безопасности.
- ? Модуль вызова функций калькулятора для точных расчетов
- Больше никаких возни с арифметическими галлюцинациями ИИ!
- ? Докеризован для обеспечения безопасности и простоты развертывания.
- Для тех, кто любит свои докеры, готовые к работе за считанные минуты!
Общие минимальные требования:
- Токен бота Telegram API
- используйте бот
@BotFather
в Telegram, чтобы настроить своего бота и получить для него токен Telegram Bot API
- Токен API OpenAI
- Получите один из: https://platform.openai.com/
? Установка без Docker в Linux
Предварительные условия
- Протестировано и работает на Python
3.10.12
3.12.2
- Установите необходимые пакеты Python с помощью
pip install -r requirements.txt
(проверено и работает с версиями, перечисленными в файле require.txt). -
pydub
обычно требует отдельной установки ffmpeg
. Обратите внимание, что ни pydub
, ни ffmpeg
практически не требуются, если вы не используете функцию голосовых сообщений/WhisperAPI, но если используете, предлагаем установить (Debian/Ubuntu Linux): sudo apt-get install ffmpeg
- ПРИМЕЧАНИЕ. Для поиска DuckDuckGo в вашей системе должна быть установлена
lynx
; его нужно запустить как подпроцесс. (Установите в Debian/Ubuntu Linux с помощью: sudo apt-get install lynx
)
- Клонируйте репозиторий с помощью:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API/ &&
cd TelegramBot-OpenAI-API/
- Установите необходимые пакеты:
pip install -r requirements.txt
- (Рекомендуется) установить дополнительные пакеты:
- В Linux-системах Ubuntu/Debian:
sudo apt-get install -y ffmpeg lynx
- Настройте свой токен бота Telegram:
- Либо установите свой токен Telegram Bot API как переменную среды
TELEGRAM_BOT_TOKEN
, либо поместите его в текстовый файл с именем bot_token.txt
внутри каталога config/
(= config/bot_token.txt
).
- Настройте свой токен OpenAI API:
- Либо как переменную среды
OPENAI_API_KEY
, либо поместите в текстовый файл с именем api_token.txt
внутри основного каталога программы.
- Другие модули:
- Если вы хотите использовать API OpenWeatherMap и API MapTiler, например, для получения локализованных данных о погоде, установите соответствующие переменные среды
OPENWEATHERMAP_API_KEY
и MAPTILER_API_KEY
. Вы можете получить ключи API от OpenWeather и MapTiler. - Дополнительная информация о погоде (фазы луны, предупреждения о погоде и т. д.) извлекается из WeatherAPI. Чтобы использовать ее, установите переменную среды
WEATHERAPI_KEY
. - Если вы хотите использовать API Openrouteservice для инструкций по вождению, установите переменную среды
OPENROUTESERVICE_API_KEY
из Openrouteservice. - Если вы хотите использовать дополнительную проверку фактов Perplexity API с их онлайн-моделями, зарегистрируйтесь на Perplexity.ai, купите несколько кредитов API и установите для своего ключа API Perplexity переменную среды:
PERPLEXITY_API_KEY
- Дальнейшие корректировки:
- Настройте свою конфигурацию и настройки, отредактировав
config/config.ini
по своему вкусу.
- Бегать:
- Запустите программу с помощью:
python src/main.py
? Установка докеризованного
Предварительные условия
На вашем компьютере должен быть установлен Docker .
- Если он не установлен, вы можете скачать и установить его с официального сайта Docker.
Ключ API Telegram Bot и ключ API OpenAI :
- Вам понадобится действительный ключ API Telegram Bot. Вы можете получить его, создав бота с помощью BotFather.
- Вам также понадобится ключ API OpenAI. Если у вас его нет, вы можете создать его на странице OpenAI API.
Шаг 1. Клонируйте репозиторий
Сначала клонируйте репозиторий с GitHub:
git clone https://github.com/FlyingFathead/TelegramBot-OpenAI-API.git
cd TelegramBot-OpenAI-API
Шаг 2. Запустите сценарий установки.
Этот проект включает сценарий установки, который поможет вам ввести ключи API и создать файл .env
.
Запустите скрипт:
Следуйте инструкциям скрипта. Он запросит ваш ключ API OpenAI и ключ API Telegram Bot, проверит их и создаст файл .env
с вашими учетными данными.
Шаг 3. Создайте образ Docker
После создания файла .env
вам необходимо создать образ Docker.
Вы можете запустить рекомендуемый docker_deploy.sh
для создания образа Docker:
Или вы можете создать его вручную:
sudo docker build -t telegrambot-openai-api .
Это создаст образ локально на основе Dockerfile
в репозитории.
Шаг 4. Запустите Docker-контейнер.
После успешной сборки образа вы можете запустить бота в контейнере Docker.
Запустите контейнер с помощью следующей команды:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
- Флаг
-d
запускает контейнер в автономном режиме (в фоновом режиме). - Флаг
--env-file .env
добавляет ваши ключи API в контейнер.
Шаг 5. Проверьте работающий контейнер
Вы можете проверить, запущен ли контейнер, используя:
В этом списке будут перечислены все работающие контейнеры. Если ваш бот работает правильно, он должен появиться в списке.
Шаг 6. Остановка контейнера
Если вам нужно остановить бота, вы можете сделать это, запустив:
sudo docker stop < container_id >
Замените <container_id>
фактическим идентификатором контейнера, который вы можете получить из вывода docker ps
.
Дополнительные шаги (необязательно)
Журналы : если вам нужно просмотреть журналы бота для устранения каких-либо проблем, вы можете использовать:
sudo docker logs < container_id >
Перезапустите контейнер . Если вы остановили контейнер и хотите запустить его снова, вы можете либо снова запустить команду docker run
, либо перезапустить существующий контейнер с помощью:
sudo docker start < container_id >
Обновление бота
Если репозиторий получает обновления и вы хотите их применить, выполните следующие действия:
Загрузите последние изменения с GitHub:
Пересоберите образ Docker:
sudo docker build -t telegrambot-openai-api .
Остановите работающий в данный момент контейнер:
sudo docker stop < container_id >
Запустите новый контейнер, используя обновленный образ:
sudo docker run --env-file .env --name telegrambot-openai-api -d telegrambot-openai-api
Также имеется скрипт docker_deploy.sh
, призванный упростить пересборку и развертывание.
Теперь у вас должен быть запущен TelegramBot-OpenAI-API в контейнере Docker, полностью подключенный как к Telegram, так и к OpenAI. Наслаждайтесь своим ботом!
Если у вас возникнут какие-либо проблемы, просмотрите журналы или обратитесь на страницу «Проблемы» репозитория.
Обновление вашего config.ini
Используйте configmerger.py
для обновления старых файлов конфигурации в config.ini
более новой версии. Вы можете сделать это, сохранив копию существующей конфигурации, например, в файле с именем myconfig.txt
и включив в него строки, которые вы хотите сохранить для более новой версии.
После этого просто запустите python src/configmerger.py myconfig.txt
, и все существующие строки конфигурации будут перенесены в новую. В большинстве случаев работает, но не забывайте быть осторожными и дважды проверять любые проблемы с миграцией с помощью ie diff
!
(Пример) Как объединить и обновить существующую конфигурацию:
python3 src/configmerger.py myconfig.txt
Журнал изменений
- v0.75055 — исправления в дезинфицирующем средстве html (для API Telegram; улучшена обработка некорректного html), теперь для анализа используется BeautifulSoup4+lxml.
- v0.75054 — небольшие исправления и дополнительная обработка ошибок в
calc_module.py
- v0.75053 – включать в запросы NWS США только подходящие территории.
- список запрашиваемых/подходящих территорий можно установить в
config.ini
в разделе NWS
.
- v0.75052 — включать в оповещения информацию Национальной метеорологической службы США.
- v0.75051 — обновлен
config.ini
для настройки прогнозов погоды и оповещений NWS.- предлагаемый метод — дополнить через NWS дополнительные данные о погоде, которые вам нужны.
- настоятельно рекомендуется оставить оповещения о погоде US NWS в
config.ini
, даже если у вас включены другие методы получения данных (например, OpenWeatherMap), будьте осторожны, чем сожалейте.
- v0.7505 — добавлена Национальная метеорологическая служба США (Weather.gov) в качестве источника данных о погоде.
- для получения дополнительной информации; особенно оповещения о погоде
- все данные по умолчанию будут объединены из источников OpenWeatherMap и US NWS.
- v0.7504 — исправлено сопоставление каталогов журналов использования и диаграмм.
- v0.7503 — улучшено форматирование сообщений и обнаружение ошибок.
- v0.7502 — добавлен
docker_setup.sh
для упрощения развертывания на основе Docker. - v0.7501 —
Dockerfile
и улучшенный поиск ошибок при получении 401 Unauthorized
- v0.75 Крупный рефакторинг (5 октября 2024 г.) ???
- весь проект был приведен в порядок и исправлено множество ошибок
-
python src/main.py
для запуска бота с этого момента - огромный список новых функций, таких как:
- улучшенное ведение журнала
- проверка Elasticsearch при запуске; многоэтапный перехват исключений
- Для ясности добавлена подробная информация Elasticsearch.
- Elasticsearch теперь можно настроить через
config.ini
- расширенное логирование (данные чата + бота в отдельную единую логировку)
- журналы чатов теперь имеют
source
для них всякий раз, когда они вызываются через вызовы функций, поэтому любые извлечения внешних данных теперь регистрируются более четко. - в целом это обновление значительно упрощает развертывание бота.
- v0.7431 — потенциальная обработка ключей API как текстовых файлов, перемещаемых в
config/
по умолчанию. - v0.743 — изменения загрузки конфигурации и оптимизация
- уборка; все конфигурации теперь находятся в
config/
- импортировал новую логику для чтения токенов бота из моего
whisper-transcriber-telegram-bot
-
bot_token.py
изменен и обновлен соответствующим образом. -
config_paths.py
теперь имеет конфигурацию для всего проекта для путей к файлам конфигурации ( config.ini
и т. д.). - переместите любой существующий
bot_token.txt
(если он используется) в config/
- используйте
configmerger.py
для обновления ваших пользовательских конфигураций - (подробнее незавершенное производство по реструктуризации проекта)
- v0.742 - Выборка шагов RAG в честь финских именин
- v0.741 — изменена на самую последнюю модель API Perplexity (
llama-3.1-sonar-small-128k-online
) из-за устаревания и обновлений в их моделях. - v0.74 - субагентный просмотр с помощью поисковой системы DuckDuckGo уже здесь!
- Включено из
config.ini
через EnableAgenticBrowsing = True
- Это позволяет помощнику ИИ переходить по ссылкам для получения дополнительной информации и возвращать соответствующие результаты.
- Дополнительные исправления для крайних случаев и их анализа вывода.
- v0.7373 — небольшие исправления в
api_get_duckduckgo_search.py
; агентская ссылка после WIP - v0.7372 — Дальнейшие изменения в логике синтаксического анализа (
markdown_to_html
в modules.py
). - v0.7371 — Улучшен анализ markdown/html.
- v0.737 — Изменения во включении API Perplexity (основная модель теперь включает его в контекст для лучшей применимости и согласованности).
- v0.736 — Добавлен модуль
calc_module.py
для точности запросов вычислений. - v0.735 — Просмотр веб-сайтов Lynx со списками разрешенных/запрещенных доменов для просмотра, разрешенных/запрещенных.
- v0.734 — теперь по умолчанию размещается более 100 RSS-каналов (при срабатывании RAG).
- Поиск DuckDuckGo добавлен как вызов функции
- v0.733 — логика анализа RSS оптимизирована в контексте RAG.
- v0.7321 — Улучшен разбор RSS.
- v0.732 — добавлен вызов функции ElasticSearch RAG в RSS-каналы.
- (например, источники новостей и т. д. см. в
rss_parser.py
)
- v0.73101 — модульные вызовы API Perplexity вынесены в отдельный обработчик.
- (см.:
perplexity_handler.py
)
- v0.731 — добавлен Yahoo! Finance как вызов функции API для поиска цен на акции (требуется пакет
yfinance
pip) - v0.730 — добавлен вызов функции API Alpha Vantage для получения цен на акции в режиме реального времени (требуется ключ API Alpha Vantage)
- v0.729 - в конфигурациях по умолчанию перешёл на
gpt-4o-mini
вместо gpt-3.5-turbo
(новее, дешевле, лучше) - v0.728 — улучшена обработка крайних случаев при получении данных о погоде через несколько API.
- v0.727 — исправлены сбои API WeatherAPI и получения данных о погоде (возврат нечетных значений и т. д.)
- v0.726 — переключился на OpenAI API с
langdetect
при использовании Perplexity API для информационных запросов.- (функция
detect_language
в api_perplexity_search.py
) - это для большей точности в многоязычной среде
- => меньше ответов на неправильном языке, когда конечному пользователю требуется путь перевода
- намного точнее, чем
langdetect
, и его можно дополнительно использовать при выборе модели.
- v0.7251 — небольшие улучшения надежности и исправления модуля
api_key.py
. - v0.725 - дополнительный вызов Perplexity API + корректировки перевода
- v0.724 — логика разделения для более длинных ответов Perplexity API
- v0.723 — добавлено дрожание, изменена логика повторов в запросах Perplexity API+на перевод.
- v0.7201 — добавлена конфигурация модели Perplexity API в
config.ini
- v0.72 — улучшено обнаружение ошибок и обмен сообщениями с помощью API Perplexity.
- v0.71 — упоминание праздников через модуль
holidays
Python (может быть расширен) - v0.708 — улучшено объединение астрономических данных через WeatherAPI.
- v0.707 — очистка кода + улучшения обработки API Perplexity.
- v0.706 - дополнительные возможности получения данных о погоде; дополнительная выборка данных по стране
- v0.705 - улучшено объединение данных о погоде; небольшие изменения
- v0.703 — языковые переводы и настройки для получения данных WeatherAPI.
- v0.70 — добавлена поддержка WeatherAPI. Для ее включения необходимо получить ключ API на сайте Weatherapi.com.
- v0.61 — улучшена обработка данных о погоде и времени/данных по всему миру.
- v0.60 – предварительный анализ URL-адресов и получение дополнительной информации для медиа-источников, например с помощью
yt-dlp
- v0.59 — вызов пользовательских функций через Elasticsearch RAG (если включено)
- v0.58.4 — больше исправлений синтаксического анализа и форматирования.
- v0.58.3 — настройки синтаксического анализа, форматирования и фрагментации
- v0.58.2 — улучшено форматирование в вызовах API pplx.
- v0.58.1 — улучшен анализ уценки в переведенных вызовах API Perplexity.
- v0.58 - разбиение на части, синтаксический анализ и другие мелкие исправления
- v0.57.5 — внесены изменения в обработку API Perplexity; новые модели эхолотов онлайн
- v0.57.1 — улучшены резервные варианты вызовов внешних API, таких как Perplexity API.
- v0.57 — улучшенный поиск ошибок и отказоустойчивые резервные варианты
- v0.56 — добавлена поддержка Elasticsearch для RAG — используйте флаг
ElasticsearchEnabled
в новом config.ini
(установите значение True
или False
для включения или отключения). - v0.55.4 — отслеживание вызовов API, дополнительное время ожидания при необходимости для внешних вызовов API
- v0.55.3 — активность ответов, улучшенная логика фрагментации
- v0.55 — улучшена обработка анимации ответа.
- v0.52 — более точные данные о погоде по всему миру через API OpenWeatherMap и API Maptiler.
- v0.51 — «умное» разбиение внешних запросов на части для устранения проблем, связанных с тайм-аутом.
- v0.50.3 - исправления
langdetect
и обработки - v0.50.2 - анимация набора ответов, корректировки логики обработки
- v0.50.1 -
langdetect
для автоматической оценки требований к переводу - v0.50 — Вызов пользовательской функции: проверка фактов Perplexity API
- v0.49.1 - Настройка модульности
- v0.48 — реализация API Openrouteservice
- v0.47 — больше исправлений логики подсчета токенов и опроса
- v0.46.2 — исправлены ошибки в подсчете токенов и логике опроса.
- v0.46 — переписана логика опроса при ежедневном сбросе количества токенов.
- v0.45 — добавлена функция
/usagechart
для диаграмм использования (требуется matplotlib
) - v0.44 — вызов функций API, поиск погоды API OpenWeatherMap и географический поиск API MapTiler.
- v0.43.2 - Исправлена небольшая ошибка в ежедневном ограничении жетонов.
- v0.43.1 - Улучшена обработка ошибок
- v0.43 — Новые команды администратора:
/setsystemmessage <message>
(действительны до перезапуска бота) и /resetsystemmessage
(сброс из config.ini
) - v0.42 - добавлена команда
/reset
для сброса бота. Установите флаги ResetCommandEnabled
и AdminOnlyReset
в config.ini
соответственно. - v0.41 — модульная обработка текстовых сообщений в
text_message_handler.py
и обработка голосовых сообщений в voice_message_handler.py
- v0.40 — управление таймаутом сеанса для сжатия истории чата (см.
config.ini
=> SessionTimeoutMinutes
, MaxRetainedMessages
) - v0.39.5 — небольшие исправления в реализации полезной нагрузки OpenAI API.
- v0.39.4 — модульные
log_message
и rotate_log_file
(обработка файла журнала) => modules.py
- v0.39.3 — модульная
check_global_rate_limit
=> modules.py
- v0.39.2 — улучшен анализ стиля текста и предварительная обработка WhisperAPI STT для модели.
- v0.39 — улучшен синтаксический анализ кодовых блоков, HTML и другой разметки, больше модульности; см
modules.py
- v0.38 — оптимизирован учет ежедневного использования токенов ( примечание : вам нужно будет очистить существующий файл
token_usage.json
, структура файла изменилась по сравнению с предыдущей версией) - v0.37 - улучшено соблюдение ограничений голосовых сообщений
- v0.36 - исправления и настройки команд бота
- v0.35 — модульные команды бота для
bot_commands.py
, исправленная версия configmerger.py
- v0.34 — добавлен
configmerger.py
для упрощения обновления бота (объединение старых флагов конфигурации с новыми версиями) - v0.33 — больше исправлений производительности и добавлены унифицированные асинхронные функции.
- v0.32 - Ежедневный опрос счетчика токенов и небольшие исправления
- v0.31 — Счетчик токенов контекстной памяти скорректирован и исправлен для большей точности.
- v0.30 — точная настройка взаимодействия Whisper API и небольшие исправления.
- v0.29 — добавлена транскрипция WhisperAPI через голосовые сообщения.
- Голосовые сообщения WhisperAPI используют тот же токен OpenAI API, что и обычная версия текстового чата.
- см.
config.ini
чтобы включить или выключить эту опцию - WIP для дополнительных функций транскрипции
- v0.28 - настраиваемое
/start
приветствие в config.ini
- v0.27 — добавлена команда
/usage
для отслеживания использования токена (только для владельца бота, 0 для отключения в config.ini
) - v0.26 — добавлено отдельное ведение журнала чата и глобальный ограничитель количества запросов в минуту (см.
config.ini
) - v0.25 - функция ограничения ежедневного использования токенов
- добавлена возможность установки ежедневных лимитов использования токенов (для контроля затрат ботов), см.
config.ini
- модульные дополнительные утилиты (сообщение о запуске и т. д.) в
utils.py
- v0.24 — исправления ошибок и ограничение скорости в предварительной альфа-версии
- v0.23 - добавлена возможность входа в файл, см. новые параметры журнала в
config.ini
- v0.22 —
escape_markdown
перенесен в отдельный файл .py
, он все равно не использовался - v0.21 — Комплексный рефакторинг и внедрение объектно-ориентированного проектирования
- Реализованы принципы объектно-ориентированного программирования путем инкапсуляции функциональности бота в класс TelegramBot.
- Усовершенствованная структура кода для улучшения читаемости, удобства сопровождения и масштабируемости.
- v0.20 — модульность, шаг 1 (чтение ключа и токена:
api_key.py
, bot_token.py
) - v0.19 - исправлены ошибки тайм-аута, обработка повторов; Значение
Timeout
добавлено в config.ini
- v0.18 - температуру модели теперь можно установить в
config.ini
- v0.17 — отметка времени и даты для лучшего определения времени
- v0.16 -
/help
& /about
- v0.15 - контекстная память истории чата (обрезается с помощью MAX_TOKENS)
- v0.14 - исправлены ошибки
- v0.13 - синтаксический анализ/регулярное выражение для заголовка URL+уценки адреса
- v0.12 - больше анализа регулярных выражений HTML из уценки API
- v0.11 - переключен на парсинг HTML
- v0.10 — пробные версии MarkdownV2 (блоки кода + жирный шрифт в основном работают)
- v0.09 — использование MarkdownV2
- v0.08 - уценка для ответов бота
- v0.07 - журнал входящих и исходящих сообщений
- v0.06 - исправлено системное сообщение API
- v0.05 - повтор, максимальное количество попыток, задержка повтора
- v0.04 - обрезка истории чата
Способствовать
- Все вклады оценены! Не стесняйтесь также сообщать о любых ошибках и других проблемах на странице «Проблемы» репозитория.
- Не забудьте поставить звездочку, если оно вам понравилось. :-)
О
- Автор: FlyingFathead
- Цифровой призрачный код от ChaosWhisperer