Чтобы создать несложного чат-бота для Telegram, который получит мощь LLM llama3 вам необходимо выполнить несколько простых шагов. Все будем делать под Ubuntu 22.04 с использованием GPU NVIDIA (подойдут модели RTX2xxx и новее от 8 Гб видеопамяти). Также убедитесь, что у вас на компьютере минимум 16 Гб ОЗУ.
Перед началом работы проверьте, установлены ли у вас драйвера от Nvidia и CUDA вот по этой инструкции.
Устанавливаем Ollama
1. Качаем и ставим Ollama
curl -L https://ollama.com/download/ollama-linux-amd64 -o /usr/bin/ollama
chmod +x /usr/bin/ollama
sudo useradd -r -s /bin/false -m -d /usr/share/ollama ollama
2. Запускаем Ollama как сервис:
tee /usr/lib/systemd/system/ollama.service > /dev/null <<EOF
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
ExecStart=/usr/bin/ollama serve
User=ollama
Group=ollama
Restart=always
RestartSec=3
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_ORIGINS=*"
[Install]
WantedBy=default.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable ollama
sudo systemctl start ollama
3. Скачиваем модель llama3 8b. Вы можете скачать и установить любую модель по вашему желанию, которые поддерживает Ollama.
ollama run llama3 | exit
4. Перезапускаем сервис.
service ollama restart
Создаем чат-бот
1. Устанавливаем Python 3.10.
sudo apt install python3.10
2. Создаем виртуальное окружение.
python3 -m venv venv
3. Активируем данное окружение
source venv/bin/activate
При успешной активации в строке приглашения появится имя виртуального окружения в скобках:
(venv) user@you_server:~$
4. Ставим в окружении необходимые библиотеки.
pip install python-telegram-bot ollama nest_asyncio
8. Заходим на https://t.me/BotFather , создаем бота и получаем его токен.
9. Создаем файл bot.py со следующим содержанием (можно в корне вашей домашней директории)
import logging
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, filters
import ollama
import nest_asyncio
nest_asyncio.apply()
# Включаем ведение журнала
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
# Токен, который вы получили от @BotFather
TOKEN = 'Токен вашего чат-бота от BotFather'
# Словарь для хранения данных пользователей
user_ids = {}
context_memory = {}
# Функция для обработки команды /start
async def start(update: Update, context) -> None:
await update.message.reply_text('Привет! Я чат-бот. Чем могу помочь?')
# Функция для обработки обычных сообщений
async def handle_message(update: Update, context):
user_id = update.effective_user.id
if user_id not in user_ids:
user_ids[user_id] = {'last_message': None, 'preferences': {}}
context_memory[user_id] = []
message_text = update.message.text
context_messages = context_memory[user_id]
# Добавляем новое сообщение в контекст
context_messages.append({'role': 'user', 'content': message_text})
# Ограничиваем историю контекста последними 8 сообщениями
context_memory[user_id] = context_messages[-8:]
#Делаем запрос к модели. Вы можете поменять имя модели в переменной model
try:
# Call the ollama.chat function with the context messages
response = ollama.chat(model='llama3', messages=context_memory[user_id])
# Отправляем ответ пользователю
await update.message.reply_text(response['message']['content'])
except Exception as e:
logging.error(f"Error while getting response from ollama: {e}")
await update.message.reply_text('Произошла ошибка, попробуйте позже.')
# Основная функция
async def main() -> None:
application = ApplicationBuilder().token(TOKEN).build()
application.add_handler(CommandHandler('start', start))
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
await application.run_polling()
if __name__ == '__main__':
import asyncio
asyncio.run(main())
10. Проверяем работу бота, запустив его в виртуальном окружении
python./bot.py
и затем проверив его ответы на ваши запросы из бота в Телеграм.
11. Если все работает и бот отвечает, создаем сервис для его запуска в системе
tee /usr/lib/systemd/system/bot.service > /dev/null <<EOF
[Unit]
Description=Chat AI Bot Service
After=network-online.target
[Service]
Type=idle
Restart=always
RestartSec=3
User=root
WorkingDirectory=/home/user/
ExecStart=/home/user/venv/bin/python /home/user/bot.py
[Install]
WantedBy=default.target
EOF
12. Запускаем сервис.
sudo systemctl daemon-reload
sudo systemctl enable bot
sudo systemctl start bot
Что делать, если у вас нет компьютера с RTX картой от Nvidia?
- Вы можете запустить Ollama на CPU. Будет работать в разы медленнее, чем на GPU, но попробовать можно.
- C марта 2024 года существует версия Ollama для GPU от AMD. Как установить и настроить эту версию и какие видеокарты поддерживаются, читайте на этой странице.