Найти тему

Создаем простой AI чат-бот Telegram с помощью Ollama и нескольких строк кода на Python

Оглавление

Чтобы создать несложного чат-бота для 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?

  1. Вы можете запустить Ollama на CPU. Будет работать в разы медленнее, чем на GPU, но попробовать можно.
  2. C марта 2024 года существует версия Ollama для GPU от AMD. Как установить и настроить эту версию и какие видеокарты поддерживаются, читайте на этой странице.
  3. Вы можете арендовать виртуальный сервер с GPU у нас. Подойдут сервера начиная с A4000 GPU.
-2

ПОДПИШИТЕСЬ НА НАС В ТЕЛЕГРАМ ИЛИ В ВКОНТАКТЕ.