Как подружить 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/


Интересные статьи

Интересные статьи

Всем привет! Меня зовут Лиза, я методолог обучающих программ в ЕДИНОМ ЦУПИС. Даже во время прохождения очень интересного и полезного курса сосредоточиться может быть крайне сложно. В мире, наполненном...
Анекдот с сайта Folklore.org рассказывает историю разработки внутри Apple в первые годы жизни компании. В начале 1982 года команда ПО Lisa старалась двигаться к тому, чтобы в течение с...
Apache Kafka стала ведущей платформой для асинхронной коммуникации между микросервисами. В ней есть мощные функции, которые позволяют строить устойчивые к ошибкам и отказам асинхронные ...
Даже те, кто пользуется Linux лишь от случая к случаю, вероятно, знают о том, как работать с grep. При этом не нужно быть экспертом в сфере регулярных выражений для того чтобы без особых ...
Библиотека генератора ассеблерного кода для микроконтроллеров AVR Часть 1. Первое знакомство Добрый день, уважаемые хабаровчане. Хочу предложить Вашему вниманию очередной (из имеющегося великог...