Как подружить Llama-3 и YouTube имея всего 40 строк кода

от автора

Сделаем Телеграм бота которому можно кинуть ссылку на YouTube видео и поговорить с ним о содержимом этого видео.

За основу возьмем бота работающего на Llama 3-70b из моей прошлой статьи. Можно использовать и любую другую языковую модель включая ChatGPT или локальную запущенную на Ollama.

Что нужно

  1. Создать Телеграм бота и получить его токен (как это сделать, смотрите инструкции на просторах интернета, например здесь).

  2. Зарегистрироваться на Groq и получить api key (нужен VPN).
    Заходим по этой ссылке, регистрируем аккаунт, генерим ключ. Платежная карта не требуется.

Код

# pip install pyTelegramBotAPI groq youtube-transcript-api import telebot import sys from groq import Groq from urllib.parse import urlparse, parse_qs from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.formatters import TextFormatter  client = Groq(api_key="GROQ_API_KEY") bot = telebot.TeleBot("TELEGRAM_BOT_TOKEN") messages = []   @ bot.message_handler(content_types=['text']) def get_text_messages(message):     global messages     messages.append({"role": 'user', "content": f"{message.text}\n\nОтветь на русском языке."})     video_id = transcription = None     for word in message.text.split():         parsed_url = urlparse(word)         if parsed_url.netloc.find('youtu.be') != -1:             video_id = parsed_url.path.replace("/", "")         if parsed_url.netloc.find('youtube') != -1:             video_id = parse_qs(parsed_url.query)['v'][0]         if video_id:             transcript = YouTubeTranscriptApi.get_transcript(video_id, languages=('ru', 'en'))             transcription = TextFormatter().format_transcript(transcript)         else:             continue         if transcription:             messages.append({"role": "function", "name": "get_youtube_transcription",                             "content": f"YouTube transcription:\n\n{transcription}"})     if len(messages) > 6:  # 6 - это количество сообщений в памяти, можно менять         messages = messages[-6:]     response = client.chat.completions.create(model='llama3-70b-8192', messages=messages, temperature=0)     bot.send_message(message.from_user.id, response.choices[0].message.content)     messages.append({"role": 'assistant', "content": response.choices[0].message.content})   bot.polling(none_stop=True, interval=0, timeout=0)

Замените в коде GROQ_API_KEY на api ключ полученный в Groq и TELEGRAM_BOT_TOKEN на токен телеграм бота, все должно быть в кавычках.

Как это работает

После получения сообщения от пользователя ищем в тексте сообщения ссылку на YouTube видео. Делаем это перебирая все слова и проверяя их на наличие URL. Если ссылка на видео найдена, используя библиотеку youtube-transcript-api забираем транскрипцию.

Далее, полученную транскрипцию подставляем языковой модели в виде сообщения от функции. Здесь мы немного обманываем модель, потому что такой функции нет, но лучше делать так чем ставить транскрипцию в системное сообщение. Модель заточена под работу с функциями и все правильно поймет.

Как и в предыдущей версии, бот будет запоминать последние 6 сообщений и поддерживать диалог.

Тестируем

Запускаем скрипт и в Телеграм боте задаем вопрос со ссылкой на видео:

Моя версия бота

Посмотреть как это работает можно в YouTubeGPT.

Еще есть НашGPT — это как ChatGPT только модель Llama 3-70b.


ссылка на оригинал статьи https://habr.com/ru/articles/819127/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *