Добавляем ИИ боту распознавание голосовых сообщений

В продолжение предыдущей заметки давайте сделаем ещё один шаг и добавим возможность боту отвечать текстом на голосовые сообщения. Для распознования голоса будем использовать python обертку над whisper.cpp. Более подробно как работает бот смотрите предыдущий пост, тут я сделаю небольшой рефакторинг и добавлю новый обработчик для голосовых. Устанавливаем зависимости deep-translator==1.11.4 llama_cpp_python==0.2.77 loguru==0.7.2 python-dotenv==1.0.1 requests==2.32.3 telebot==0.0.5 whisper_cpp_python==0.2.0 import datetime import os from uuid import uuid4 import requests import telebot from deep_translator import GoogleTranslator from dotenv import load_dotenv from llama_cpp import Llama from loguru import logger from telebot.types import Message from whisper_cpp_python import Whisper load_dotenv() TG_TOKEN = os.getenv("TG_TOKEN") bot = telebot.TeleBot(TG_TOKEN) # Загружаем llama-3 модель llm = Llama( model_path="./models/llama3/Meta-Llama-3-8B-Instruct-Q4_K_M.gguf", chat_format="llama-3", verbose=False, # n_gpu_layers=-1, # Uncomment to use GPU acceleration # seed=1337, # Uncomment to set a specific seed # n_ctx=2048, # Uncomment to increase the context window ) # Загружаем whisper.cpp модель whisper_model = Whisper(model_path="./models/whisper/ggml-base.bin") # Словарь для хранения историй сообщений user_message_history = {} # Стартовое сообщение бота @bot.message_handler(commands=["start", "help"]) def send_welcome(message: Message): bot.send_message(message.chat.id, "Я ИИ бот на базе llama-3. Можешь отправить мне текстовое или голосовое сообщение.") # Вынесем логику работы с историей сообщений и llama моделью в отдельную функцию def create_chat_completion(user_id, text): # Получаем историю сообщений текущего пользователя user_history = user_message_history.get(user_id, []) user_history.append({"role": "user", "content": text}) # Добавим в контекст текущую дату и время current_date_time = datetime.datetime.now().strftime("%d %B %Y, %H:%M MSK") messages = [ { "role": "system", "content": f"Ты полезный ИИ помощник.\nТекущая дата: {current_date_time}", }, ] for msg in user_history[-10:]: messages.append(msg) out = llm.create_chat_completion(messages) reply = out["choices"][0]["message"]["content"] logger.info(f"assistant: {reply}") # Добавляем ответ бота в историю текущего пользователя user_history.append({"role": "assistant", "content": reply}) user_message_history[user_id] = user_history[-20:] return reply # Обработчик текстовых сообщений @bot.message_handler(content_types=["text"]) def message_handler(message: Message): chat_id = message.chat.id user_id = message.from_user.id logger.info(f"user {user_id}: {message.text}") bot.send_chat_action(chat_id, "typing") reply = create_chat_completion(user_id, message.text) # Отправляем ответ пользователю bot.send_message(chat_id, reply) Добавляем обработчик голосовых сообщений ...

lama

Простой llama-3 телеграм бот

В заметке расскажу как на python сделать простого чат бота для телеграм на базе последней версии llm модели llama-3. Предположим у нас уже установлен python и CUDA (если хотите использовать gpu для ускорения). Для взаимодействия с моделью на python есть несколько вариантов, чтобы не усложнять будем использовать библиотеку llama.cpp и квантованную модель в формате GGUF. Обратите внимание, нужна Instruct версия. Подготовка В телеграм с помощью @BotFather создайте нового бота и получите токен. ...

Грабим корованы с Youtube в Telegram

Написал небольшой скрипт для разграбления Youtube канала iXBT.Games и отправки аудио в телеграм. Если следишь за творчеством ребят и хочешь слушать видео и стримы в виде подкастов в телеге - подключайся https://t.me/ixbt_audio. Наверное нет смысла заводить репу на github для одного скрипта, выложу тут как есть, может кому-то пригодится. В каталоге со скриптом необходимо создать каталог cache/, thumb.jpg - изображение 320x320 для обложки к аудио и .env файл с переменными: # ID канала YOUTUBE_CHANNEL=UC4e_XPBiiIO4fo4_CucxQeg # Обрабатывать только одно видео за раз PROCESS_ONE_VIDEO=True # Токен телеграм-бота. Получить у @BotFather TG_BOT_TOKEN= # ID канала или пользователя куда отправлять сообщения TG_CHAT_ID= # Использовать локальный telegram bot api сервер # для отправки файлов > 50MB # https://github.com/tdlib/telegram-bot-api/ TG_LOCAL_MODE=True TG_BASE_URL=http://localhost:8081/bot TG_BASE_FILE_URL=http://localhost:8081/file/bot Собственно код скрипта: ...