LLM Telegram Bot - это проект, который позволяет взаимодействовать с большими языковыми моделями (LLM) через Telegram. Бот поддерживает различные режимы работы, включая чат и режим блокнота, имеет возможность сохранения истории сообщений, поддерживает различные шаблоны промптов и многое другое.
- Поддержка различных шаблонов чата
- Режимы чата и блокнота
- Отдельные сессии для всех пользователей (по chat_id)
- Локальное сохранение истории сообщений - разговор не будет потерян при перезапуске сервера
- Индикация "X печатает" во время генерации ответа
- Кнопки: имперсонация, продолжение предыдущего сообщения, регенерация последнего сообщения, удаление последних сообщений из истории, сброс истории, меню загрузки новых персонажей
- Возможность загрузки новых персонажей из директории text-generation-webui\characters
- Возможность загрузки новой модели во время разговора
- Префиксы сообщений: "+" или "#" для имперсонации, "-" или "!" для замены последнего сообщения бота, "++" для замены имени бота, "--" для замены вашего имени, "==" для добавления сообщения в контекст, "📷" для создания изображения через SD API
- Сохранение/загрузка истории в чате путем скачивания/пересылки .json файла
- Встроенный автоперевод (можно настроить язык модели/пользователя)
- Получение текстовых файлов (код, текст и т.д.)
- Генерация голоса (silero), варианты для английского и русского языков
- Опция translation_as_hidden_text в .cfg - если вы хотите изучать английский с ботом
- telegram_users.txt - список разрешенных пользователей (если пуст - разрешено всем)
- Антифлуд - одно сообщение в 15 секунд от одного пользователя
- Улучшенный режим групповых чатов
- Клонируйте репозиторий:
git clone [email protected]:SCMARS/llm-telegram_bot.git - Установите зависимости:
pip install -r llm_telegram_bot\requirements_app.txt
- Получите токен бота у https://t.me/BotFather
- Скопируйте токен бота в
configs\telegram_token.txt - Переместите файл модели в
models\ - Укажите путь к модели в параметре model_path в
configs\app_config.json - Запустите
run.cmd(Windows) илиrun.sh(Linux)
(опционально) Для использования exllama:
git clone https://github.com/turboderp/exllama source\generators\exllama
pip install -r source\generators\exllama\requirements.txt
(опционально) Для использования exllamav2:
git clone https://github.com/turboderp/exllamav2 source\generators\exllamav2
cd source\generators\exllamav2
python setup.py install --user
(опционально) Для использования llama.cpp с ускорением GPU переустановите abetlen/llama-cpp-python по инструкции: llama-cpp-python#installation-with-hardware-acceleration или этому руководству для Windows
- Установите oobabooga/text-generation-webui, добавьте модель, настройте все необходимые параметры
- Запустите
cmd_windows.batилиcmd_linux.shдля активации venv - Клонируйте этот репозиторий в "text-generation-webui\extensions":
git clone https://github.com/innightwolfsleep/llm_telegram_bot extensions\telegram_bot - Установите зависимости:
pip install -r extensions\telegram_bot\requirements_ext.txt
- Получите токен бота у https://t.me/BotFather
- Добавьте токен бота в файл
extensions\telegram_bot\configs\telegram_token.txtили в окружение oobabooga - Добавьте флаги в CMD_FLAGS.txt:
--api --extension telegram_bot - Запустите соответствующий скрипт start_OS (прямая интеграция в настоящее время недоступна)
- Запустите блокнот manuals/llm_telegram_bot_cublas.ipynb
- Установите, настройте токен бота, запустите
(опционально) Если у вас проблемы с интернетом, измените proxy_url в app_config.json на ваш собственный прокси. Например: https://127.0.0.1:10808
app_config.json- конфигурация для запуска в качестве автономного приложения (run.shилиrun.cmd)ext_config.json- конфигурация для запуска в качестве расширения для oobabooga/text-generation-webui
x_config.json
bot_mode=admin
Режим работы бота:
- admin - бот отвечает всем в режиме чата. Все кнопки, включая настройки для всех, доступны всем. (По умолчанию)
- chat - бот отвечает всем в режиме чата. Все кнопки, кроме настроек для всех, доступны всем. (Рекомендуется для общения)
- chat-restricted - то же, что и chat, но пользователь не может изменить персонажа по умолчанию
- persona - то же, что и chat-restricted, но кнопки сброса/регенерации/удаления сообщений также недоступны
- notebook - режим блокнота. Префиксы не добавляются автоматически, только "\n" разделяет сообщения пользователя и бота. Ограничения как в режиме chat.
- query - то же, что и notebook, но без истории. Каждый вопрос для бота как новый разговор без влияния предыдущих вопросов
user_name_template=
Шаблон имени пользователя, полезно для группового чата.
Если пусто, бот всегда получает имя пользователя по умолчанию - You. По умолчанию даже в групповых чатах бот воспринимает всех пользователей как единую сущность "You".
Но можно заставить бота воспринимать имена пользователей Telegram с помощью шаблонов:
FIRSTNAME - имя пользователя (Jon)
LASTNAME - фамилия пользователя (Dow)
USERNAME - никнейм пользователя (superguy)
ID - идентификатор пользователя (999999999)
Так, user_name_template="USERNAME FIRSTNAME ID" преобразуется в имя пользователя "superguy Jon 999999999"
Но если вы планируете использовать шаблон и групповой чат - вы должны добавить знак "\n" в stopping_strings, чтобы предотвратить имперсонацию бота!!!
generator_script=GeneratorLlamaCpp
Название скрипта генератора (папка generators):
- generator_exllama - на основе llama-cpp-python, рекомендуется
- generator_llama_cpp - на основе llama-cpp-python, рекомендуется
- generator_llamacpp_server_chat - использует сервер llama.cpp
- generator_llamacpp_server_completions - использует сервер llama.cpp
- generator_ollama_chat - использует сервер ollama_chat
- generator_ollama_completions - использует сервер ollama_competition
- generator_langchain_llama_cpp - на основе langchain+llama
- generator_transformers - на основе transformers, не тестировалось
- generator_text_generator_webui_openapi - использует расширение OpenAPI oobabooga/text-generation-webui
- (СЛОМАНО) generator_text_generator_webui - модуль для интеграции в oobabooga/text-generation-webui (в настоящее время сломан)
- (УСТАРЕЛО) generator_text_generator_webui_api - использует API oobabooga/text-generation-webui (старая версия API)
model_path=models\llama-13b.ggml.q4_0.gguf
Путь к файлу модели или директории
characters_dir_path=characters
default_char=Example.yaml
Персонаж по умолчанию и путь к папке с персонажами
presets_dir_path=presets
default_preset=Shortwave.yaml
Пресет генерации по умолчанию и путь к папке с пресетами
model_lang=en
user_lang=en
Язык модели и пользователя по умолчанию. Язык пользователя может быть изменен пользователями индивидуально.
html_tag_open=<pre>
html_tag_close=</pre>
Теги для ответов бота в Telegram. По умолчанию - предварительно отформатированный текст (pre)
history_dir_path=history
Директория для истории пользователей
token_file_path=configs\\telegram_token.txt
Токен бота. Спросите у https://t.me/BotFather
admins_file_path=configs\\telegram_admins.txt
Пользователи, чьи ID в файле admins переключаются в режим администратора и могут выбирать настройки для всех (настройки генерации и модель)
users_file_path=configs\\telegram_users.txt
Если в файле users есть хотя бы один ID - бот будет игнорировать всех пользователей, кроме этого ID (или ID). Даже администратор будет проигнорирован.
generator_params_file_path=configs\\telegram_generator_params.json
Параметры генерации текста по умолчанию, перезаписываются выбранным пресетом
user_rules_file_path=configs\\telegram_user_rules.json
Матрица правил пользователя
telegram_sd_config=configs\\telegram_sd_config.json
Конфигурация API Stable Diffusion
stopping_strings=<END>,<START>,end{code}
Настройки генерации - какой шаблон текста останавливает генерацию текста? Добавьте "\n", если бот отправляет слишком много текста.
eos_token=None
Настройки генерации
translation_as_hidden_text=on
Если "on" и язык модели/пользователя не совпадают - перевод будет написан под спойлером. Если "off" - перевод без спойлера, без оригинального текста в сообщении.
sd_api_url="http://127.0.0.1:7860"
URL API Stable Diffusion, необходим для использования префиксов "фото"
proxy_url
Для обхода блокировки провайдера
- generator_params.json - конфигурация для генератора
- sd_config.json - конфигурация для Stable Diffusion
- telegram_admins.txt - список ID пользователей, принудительно переведенных в режим администратора. Если telegram_users не пуст - должны быть также в telegram_users!
- telegram_users.txt - список ID пользователей (или групп), которым разрешено взаимодействовать с ботом. Если пусто - разрешено всем
- telegram_token.txt (можно использовать .env вместо этого) - токен бота Telegram
- telegram_user_rules.json - конфигурация видимости кнопок для различных режимов бота