Как подружить Llama-3 и YouTube имея всего 40 строк кода
Сделаем Телеграм бота которому можно кинуть ссылку на YouTube видео и поговорить с ним о содержимом этого видео.
За основу возьмем бота работающего на Llama 3–70b из моей прошлой статьи. Можно использовать и любую другую языковую модель включая ChatGPT или локальную запущенную на Ollama.
Что нужно
Создать Телеграм бота и получить его токен (как это сделать, смотрите инструкции на просторах интернета, например здесь).
Зарегистрироваться на 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.