Существует много вариантов доступа к Llama3 и другим открытым моделям через браузер. Но Телеграм намного удобнее и для него есть простое решение как получить безлимитный и бесплатный доступ к диалогу с AI.
Да, всего 20 строк кода и этот бот:
1) по качеству ответов будет соизмерим с ChatGPT-4;
2) будет отвечать очень быстро т.к. подключим мы его через Groq, который в среднем в 10 раз быстрее других аналогичных сервисов;
3) будет поддерживать диалог и запоминать последние сообщения.
Что нужно
Создать Телеграм бота и получить его токен (как это сделать, смотрите инструкции на просторах интернета, например здесь).
Зарегистрироваться на Groq и получить api key (нужен VPN).
Заходим по этой ссылке, регистрируем аккаунт, генерим ключ. Платежная карта не требуется.
Код
# pip install pyTelegramBotAPI groq
import telebot
from groq import Groq
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": message.text})
if len(messages) > 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})
while True:
bot.polling(none_stop=True, interval=0, timeout=0)
Замените в коде GROQ_API_KEY на api ключ полученный в Groq и TELEGRAM_BOT_TOKEN на токен телеграм бота, все должно быть в кавычках. В 13 и 14 строках цифра 6 - это количество последних сообщений, которые запоминает бот.
Ограничения
Бот работает только через VPN, но лучше запустить скрипт на минимальном виртуальном сервере с европейским IP.
Бот не различает пользователей. Эта версия рассчитана на одного пользователя.
Есть ограничения со стороны Groq, но запас такой, что для одного пользователя эти ограничения не имеют значения.
Моя версия бота
Я сделал НашGPT - более продвинутую версию такого бота. Он доступен, им можно пользоваться.
НашGPT прокачен двумя дополнительными функциями. Он умеет искать в интернете и понимает голосовые сообщения.
Поиск в интернете реализован через DuckDuckGo API, а голосовые сообщения распознает Whisper.
Сейчас НашGPT учится работать с документами и картинками...
Комментарии (56)
abutorin
12.05.2024 10:07Моя проверка чат-ботов:
Если часть задачи писать текстом, большинство ботов не понимает чего от него хотят.
PeeWeee
12.05.2024 10:07+32Вы меня разоблачили - я тоже бот.
На первый вопрос дал бы ответ 8, а на 2-й 6. Т.к. формально приоритет операций (смеси математического выражения и текста) не определен, а интуитивно числовое выражение, обрамленное текстом, воспринимается как обособленное, т.е. аналог ().abutorin
12.05.2024 10:07Т.к. идея использования чатботов подразумевает что бот должен частично заменить человека, то и отвечать он должен также как человек. Люди передают информацию в виде речи, текст это способ представление речевых оборотов в виде набора букв, слов и иногда чисел (когда лениво писать числа целиком). Причина разного поведения для этих двух запросов мне понятна. Но для "обычного" человека эти 2 запроса абсолютно идентичны.
thethee
12.05.2024 10:07+1Так вы + знаком написали. Напишите текстом, вдруг результат другой будет. Возможно тут проблема с токенизацией и "2+2 умножить на 2", где 2+2 написаны слитно, нейросеть воспринимает иначе чем "2 плюс 2 умножить на 2". Все таки в задаче важно корректно ставить условия и если ожидается что нужно "распарсить" ввод, то он должен быть консистентным. В первом случае и я тоже 2+2 ощутил как обособленную сущность, так что бота винить за неправильный ответ конкретно в этом случае не могу, т.к. сам ошибся в том же месте.
К тому же 70b это хоть и довольно большой размер для нейросети в open-source, и сейчас считается state of the art, насколько мне известно, но это не самый большой размер для проприетарных сетей, так что вполне вероятно что тесты которые проходят крупные сетки, llama3 не пройдет вообще или еле-еле пройдет. Год-полтора и будет намного лучше, это сейчас самая быстроразвивающаяся сфера, конкретно LLM и работа с ними, и даже open source сети семимильными шагами растут
kilgor-trout
12.05.2024 10:07>Вы меня разоблачили - я тоже бот.
ну видимо, человек бы сразу спросил, а не втупую считал
MountainGoat
12.05.2024 10:07+17Не факт. Небрежно поставленный вопрос подразумевает небрежно посчитанный ответ.
abutorin
12.05.2024 10:07Т.к. формально приоритет операций (смеси математического выражения и текста) не определен
В от то и дело. Поэтому придуманы скобки. Если в тексте они явно не указаны, то почему бот решил их "придумать" на месте где я их не написал? Ваше объяснение это просто натягивание объяснения. Но для запрос я написал конкретно, никаких скобок не говорил, значит должен был считать без них. В от если бы я написан "сначала 2+2, а потом умножить на 2", тогда скобки следует добавить. А так, приоритет мною указан не был, значит все операции должны выполняться в соответствии с базовым приоритетом.
guliverza
12.05.2024 10:07+1А чего вы столько запятых понатыкали в свой текст? Если бы комментарий свой зачитывали бы вслух, разве произносили бы "зпт" или "тчк"? Улавливаете?
abutorin
12.05.2024 10:07Ну для чего нужны запятые понятно. И для отражения интонации в тексте знаки препинания и придуманы. А для установки приоритетов в описании математического выражения уже то же что-то придумали? Вроде математика достаточно строгая наука, правила произношения и записи ни кем не оспариваются. А вы всё пытаетесь доказать что бот отвечает правильно. Я согласен что он отвечает так как его "научили". Моя претензия в том, что без правильного "разговора" с ними считать ответ корректным нельзя. Я уже молчу про то что после получения от него правильного ответа а задачи повторного вопроса "ты уверен?", почти все боты признают "ошибку" и предлагают альтернативный вариант. Такой бот это как блондинка вызубрившая учебник по атомной физики (прошедшую несколько курсов ВойтиВАйТи, кому что ближе), с ней конечно будет интересно в первое время "прыщавым" студентам, но настоящий результат от неё не получить.
PrinceKorwin
12.05.2024 10:07для отражения интонации в тексте знаки препинания и придуманы
Думается вам про "казнить нельзя помиловать" намекали.
abutorin
12.05.2024 10:07Ну то что при произношении запятой необходимо сделать паузу, вроде всех учили. А вот со скобками как? Ниже уже рассмотрели пример различий в записи 2 + 2 и 2+2, Или про это тоже изволите говорить "это другое"? Для человека все эти формы записи абсолютно равнозначны, правила правописания достаточно чётко регулируют этот вопрос, нет для скобок никаких "интонаций", особых форм представления. Если скобки явно не указаны, их быть не должно.
GennPen
12.05.2024 10:07+3А если текстом, то нормально:
Скорее всего разбивает на блоки, из-за этого "2+2" считает более приоритетным вычислением.
lazbaphilipp
12.05.2024 10:07+22+2 умножить на 2 — действительно 8, если уж на то. Возможно, правильнее было бы написать 2+2, умноженное на 2. Но даже так, без интонационного акцента вариант интерпретации этого текста как (2+2)*2 более предпочтителен.
abutorin
12.05.2024 10:07Да чего тут гадать. Вопрос написанный боту исследовал вдоль и поперёк. Если ему не достаточно информации, либо условия задачи противоречивы, то он должен либо задать уточняющий вопрос, либо предложить оба решения и показать причину такого ответа. А чат бот который предполагается использовать для общения с простыми людьми должен ждать что на входе будет всякий мусор и в этом мусоре ему и нужно уметь разбираться.
Shannon
12.05.2024 10:07+2Ну стоит отметить, что модель прекрасно может понимать, что условие задачи плохо заданы или есть несколько решений. Просто у неё не настроен контекст, чтобы в таких случаях уточнять что-либо, а по умолчанию она всегда отвечает сразу какой-то ответ.
Задаем для llama3 70b q4_K_M контекст:
Ты помощник, который отвечает на русском и решает любые вопросы. Если тебе что-то не понятно или ты видишь несколько вариантов ответа, то ты сначала уточни, а потом отвечай.
Ответ:
abutorin
12.05.2024 10:07несомненно, можно придумать "правильный" вопрос и получить правильный ответ. но это работает только на проверке ответов по уже известным вопросам. А если ответ не известен?
Shannon
12.05.2024 10:07несомненно, можно придумать "правильный" вопрос и получить правильный ответ
я не придумывал "правильный" вопрос, я задал точно такой же как у вас.
Вы упускаете суть. Пока вы упражняетесь в попытках поймать модель на "глупости", вы пропускаете мимо другой момент - модели могут полностью менять своё поведение при изменении их глобального контекста (то, что в ChatGPT называют Агентами).
Хотите чтобы модель стояла на своем, уточняла вопросы, была абсолютно уверена, что правильно вас поняла? Для этого не нужна новая модель, не нужно искать какую-то особую модель, всё это можно получить на текущей, просто задав ей роль.
Назовите её терминалом, и модель будет считать себя linux-терминалом.
И вот тут уже становится понятно, что важнее как модель понимает и удерживает контекст - чем сильнее модель, тем легче ей дается удерживать многие условия в "голове" и не смешивать их в процессе инференса.
Приведу пример.
У меня есть 10 яблок. Я нахожу 3 золотые монеты на дне реки. Река протекает рядом с большим городом, который как-то связан с тем, на что я могу потратить монеты. Я теряю 4 яблока, но получаю золотую монету. На мой путь выбегают три птицы и роняют по 6 яблок. Я играю в онлайн-игру и выигрываю 6 золотых монет, но мне приходится делить их поровну с двумя моими товарищами по команде. Я покупаю яблоки на все имеющиеся у меня монеты. Цена одного яблока составляет 0,5 монеты. Сколько у меня яблок? И где находится река?
Правильный ответ 36 яблок и 0 монет. ChatGPT-3.5 не способна полноценно отделить монеты и яблоки, и думает, что яблоки, что выпали у птиц, это выпали из вашего кармана и думает, что у вас осталось отрицательное число яблок.
Но ChatGPT-3.5 отвечает на ваш вопрос "2+2 умножить на 2" как вы и хотите и выдает сходу ответ 6. Только 3.5 не становится от этого более "умной", которая не проваливает "тест".
Если что, llama3 70b легко решает задачу с яблоками (также как и WizardLM-2, GPT4, Claude3).
В общем-то мне всё равно кто и как испытывает модели, я лишь хотел показать, что модели это не про угадывание образа мышления, а это гибкий инструмент, который можно настроить, не обучить, а настроить.
bogdart
12.05.2024 10:07Бот ничего не должен, он отвечает как средний человек. Попробуйте среднему человеку написать свою задачу и он ответит восемь без всяких уточнений. Это может быть даже нелогично и математически неправильно, но отличие ИИ от процессора как раз в том, что он не логикой руководствуется. Это как в анекдоте про десять батонов хлеба, столкновение житейской логики и формальной.
alfa41
12.05.2024 10:07Огоромное спасибо за короткую, но информативную статью! Подписался на вас. Можете более подробно расписать как удалось прикрутить DuckDuckGo и голосовые сообщения? Пока не совсем понимаю, как разграничить общение с ИИ и собственно Интернет-поиск. В моих ботах-помощниках это происходит путем анализа ввода через grep. Есть возможность выложить версию кода с полным функционалом?
evg_dc Автор
12.05.2024 10:07+1Подробно в следующей статье напишу, а если коротко, то используйте function calling и опрашивайте DuckDuckGo, результат поиска подставляете в системный пропт и снова опрашивате модель, примеров как это сделать очень много.
Для голосовых сообщений надо где то запускать Whisper или платить внешним провайдерам. В Телеграме забираете голосовое сообщение ввиде аудиофайла, через Whisper делаете текст и дальше все как обычно.
GennPen
12.05.2024 10:07Если использовать кольцо из ключей с разных аккаунтов, то по IP не забанят? =)
sixxio
12.05.2024 10:07Конечно же, забанят
При этом, если кидать относительно много запросов (даже в рамках лимитов), забанят достаточно быстро и все ключи, которые использовались на одном адресе, разом, проверено)Но вопрос решается, если использовать кучку прокси-серверов
Да и Groq особо не требователен к почте, не просит номер телефона и так далее, так что насобирать ключи несложно, а себестоимость околонулеваяНо ни в коем случае так не делайте, это нарушает условия пользования и вообще некрасиво)
alfa41
12.05.2024 10:07Groq постоянно перескакивает обратно на английский при общении с ним на русском. На просьбу отвечать на русском обещает, но потом быстро забывает. Есть ли опция по типу "set preferable language output = ru"?
evg_dc Автор
12.05.2024 10:07+1Groq тут не при чём, это модель решает на каком отвечать. Пишите в системный промпт Always answer in Russian.
Это всё, что можно сделать. Всё равно будет перескакивать на английский, но меньше.
I-like-Portal-2
12.05.2024 10:07+1Было бы круто, если бы не только на русском отвечал. Все-таки большая часть датасета из английских текстов, поэтому на нем модель умнее. Можно конечно попросить отвечать на инглише, но тогда ллама на обоих языках напишет, что по инструкции рекомендуется отвечать на русском. Ну и в описании можно было бы добавить что это ллама, а не чатжпт :)
А так бот отличный и статья понятная, спасибо!
ORENYT
12.05.2024 10:07А можно подключить контекст и настроить Лору бота? Чтобы сделать женщину виртуальную....
leon_shtuet
12.05.2024 10:07лучше запустить скрипт
А подскажите чайнику, как этот скрипт запускать? Я создал бота, зарегился на Groq. Подставил в код свои данные. Даже на всякий случай запустил у себя на компе
pip install pyTelegramBotAPI groq
И че? Куда этот скрипт присобачить? Заранее спасибо.
BURJUY
12.05.2024 10:07+1 также не смог его запустить.
root@instance-2024:/home/ubuntu/llama# pip3 install pyTelegramBotAPI
root@instance-2024:/home/ubuntu/llama# pip install groq
поставил зависимости, нажал запустить бота root@instance-2024:/home/ubuntu/llama# python3 bot.py
и все ни привета не ответа, ни на что не отвечает VPS и бот
theurus
12.05.2024 10:07+1Для распознавания речи можно использовать бесплатный апи гугла, там ограничение до 1 минуты звука за один запрос, покрывает большую часть запросов а остальное можно отправлять в свой виспер. pip SpeechRecognition
Для распознавания текста с картинок (скриншотов) - tesseract и результаты его работы встраивать в память, так чтоб можно было попросить исправить ошибки или перевести сразу.
То есть добавлять в память бота строки типа (юзер попросил распознать текст с картинки, ассистент распознал такой то текст).
Для гугления надо отдельную команду сделать потому что автоопределение далеко не всегда срабатывает.
Бесплатное рисование есть на hugging face, там проблема с бесплатными ключами только в агрессивном кешировании, при одинаковом запросе моментально выдает то же самое изображение, надо переписывать запрос каждый раз хоть немного. Можно еще у бинга брать рисование но там попахивает воровством, на любителя.
Бесплатный img2txt ищу, хоть какой-нибудь приличный, сейчас использую gemini но что с ним будет в будущем неясно, может платным станет.
Мой бот тут https://t.me/kun4sun_bot работает в основном на бесплатном пока джемини. Исходники открыты на гитхабе, можно смотреть и трогать руками.
abutorin
12.05.2024 10:07джемини лучше проходит тест на 2+2*2:
В отличии от остальных, даже при проверке на "уверенность" он не растерялся. А выше меня пытались убедить что я не правильно задаю вопрос. Вот этот бот этот тест проходит.
GennPen
12.05.2024 10:07+1Попробуйте без контекста сразу ему задать вопрос "сколько будет 2+2 умножить на 2?" (без пробелов между плюсом и цифрами), а то он может учитывать контекст предыдущего вопроса.
abutorin
12.05.2024 10:07снимаю шляпу.
Ваш лом оказался крепче.
Hidden text
Купили как-то суровым сибирским лесорубам японскую бензопилу.
Собрались в кружок лесорубы, решили ее испытать.
Завели ее, подсунули ей деревце.
«Вжик» — сказала японская пила.
«У, бля...» — сказали лесорубы.
Подсунули ей деревце потолще. «Вж-ж-жик!» — сказала пила.
«Ух, бля!» — сказали лесорубы.
Подсунули ей толстенный кедр. «ВЖ-Ж-Ж-Ж-Ж-Ж-Ж-ЖИК!!!» — сказала пила.
«Ух ты, бля!!» — сказали лесорубы.
Подсунули ей железный лом. «КРЯК!» — сказала пила.
«Ага, бля!!!» — укоризненно сказали суровые сибирские лесорубы! И ушли рубить лес топорами…GennPen
12.05.2024 10:07Думал на английском изменятся результаты.
Но, весь фокус оказался в пробелах между цифрами и плюсом. Без пробелов он считает "2+2" одним блоком, поэтому и считает его с повышенным приоритетом.Hidden text
GennPen
12.05.2024 10:07В GPT-4o пофиксили эту проблему, отвечает правильно. =))
Hidden text
И никак не хочет переубеждаться. =))
oniliry
12.05.2024 10:07Заинтересовала фитча web_search. Ее надо настраивать или она стоит по дефолту ? И можно ли использовать llama с прокси вместо ВПН ? В плане если ли возможность, как например в g4f передавать прокси с которого будут идти запросы, тем самым не ставя впн на свое устройство ?
papadulo
12.05.2024 10:07+1подскажите, если у тебя есть европейский VPN, то зачем городить этот огород ведь можно бесплатно пользоваться chatgpt-3.5, которого хватает за глаза для обыденных задач?
trabl
12.05.2024 10:07Согласен, если есть машинка где-нибудь в AWS например, то помимо VPN можно поднять тот же squid, и использовать отдельный браузер с прокси для chatgpt, так удобнее, не нужно VPN постоянно включать. У меня это так и работает. Mozilla с прокси для chatgpt, Chrome без прокси для всего остального.
jhas7
12.05.2024 10:07Гугл выкатил новую турбо модельку, в бесплатной версии лимиты такие что лламу можно временно закапывать. Окно - 1млн токенов, вывод 8к, качество явно лучше чем у лламы3-70, скорость меньше но оно того стоит.
GennPen
Нужно еще очистку контекста сделать, потому как перезапускать бота чтобы очищать контекст - такое себе.
evg_dc Автор
очищается в строке
messages = messages[-6:]
Tim2211
А куда вставлять код, что бы бот заработал?
evg_dc Автор
да, понял, что имеется ввиду... кнопку надо ставить