Comments 102
Нужно еще очистку контекста сделать, потому как перезапускать бота чтобы очищать контекст - такое себе.
Моя проверка чат-ботов:
![](https://habrastorage.org/getpro/habr/upload_files/704/e82/4d0/704e824d0d5d63ec650cd99de62a0a20.png)
Если часть задачи писать текстом, большинство ботов не понимает чего от него хотят.
Вы меня разоблачили - я тоже бот.
На первый вопрос дал бы ответ 8, а на 2-й 6. Т.к. формально приоритет операций (смеси математического выражения и текста) не определен, а интуитивно числовое выражение, обрамленное текстом, воспринимается как обособленное, т.е. аналог ().
Т.к. идея использования чатботов подразумевает что бот должен частично заменить человека, то и отвечать он должен также как человек. Люди передают информацию в виде речи, текст это способ представление речевых оборотов в виде набора букв, слов и иногда чисел (когда лениво писать числа целиком). Причина разного поведения для этих двух запросов мне понятна. Но для "обычного" человека эти 2 запроса абсолютно идентичны.
Так вы + знаком написали. Напишите текстом, вдруг результат другой будет. Возможно тут проблема с токенизацией и "2+2 умножить на 2", где 2+2 написаны слитно, нейросеть воспринимает иначе чем "2 плюс 2 умножить на 2". Все таки в задаче важно корректно ставить условия и если ожидается что нужно "распарсить" ввод, то он должен быть консистентным. В первом случае и я тоже 2+2 ощутил как обособленную сущность, так что бота винить за неправильный ответ конкретно в этом случае не могу, т.к. сам ошибся в том же месте.
К тому же 70b это хоть и довольно большой размер для нейросети в open-source, и сейчас считается state of the art, насколько мне известно, но это не самый большой размер для проприетарных сетей, так что вполне вероятно что тесты которые проходят крупные сетки, llama3 не пройдет вообще или еле-еле пройдет. Год-полтора и будет намного лучше, это сейчас самая быстроразвивающаяся сфера, конкретно LLM и работа с ними, и даже open source сети семимильными шагами растут
>Вы меня разоблачили - я тоже бот.
ну видимо, человек бы сразу спросил, а не втупую считал
Т.к. формально приоритет операций (смеси математического выражения и текста) не определен
В от то и дело. Поэтому придуманы скобки. Если в тексте они явно не указаны, то почему бот решил их "придумать" на месте где я их не написал? Ваше объяснение это просто натягивание объяснения. Но для запрос я написал конкретно, никаких скобок не говорил, значит должен был считать без них. В от если бы я написан "сначала 2+2, а потом умножить на 2", тогда скобки следует добавить. А так, приоритет мною указан не был, значит все операции должны выполняться в соответствии с базовым приоритетом.
А чего вы столько запятых понатыкали в свой текст? Если бы комментарий свой зачитывали бы вслух, разве произносили бы "зпт" или "тчк"? Улавливаете?
Ну для чего нужны запятые понятно. И для отражения интонации в тексте знаки препинания и придуманы. А для установки приоритетов в описании математического выражения уже то же что-то придумали? Вроде математика достаточно строгая наука, правила произношения и записи ни кем не оспариваются. А вы всё пытаетесь доказать что бот отвечает правильно. Я согласен что он отвечает так как его "научили". Моя претензия в том, что без правильного "разговора" с ними считать ответ корректным нельзя. Я уже молчу про то что после получения от него правильного ответа а задачи повторного вопроса "ты уверен?", почти все боты признают "ошибку" и предлагают альтернативный вариант. Такой бот это как блондинка вызубрившая учебник по атомной физики (прошедшую несколько курсов ВойтиВАйТи, кому что ближе), с ней конечно будет интересно в первое время "прыщавым" студентам, но настоящий результат от неё не получить.
для отражения интонации в тексте знаки препинания и придуманы
Думается вам про "казнить нельзя помиловать" намекали.
Ну то что при произношении запятой необходимо сделать паузу, вроде всех учили. А вот со скобками как? Ниже уже рассмотрели пример различий в записи 2 + 2 и 2+2, Или про это тоже изволите говорить "это другое"? Для человека все эти формы записи абсолютно равнозначны, правила правописания достаточно чётко регулируют этот вопрос, нет для скобок никаких "интонаций", особых форм представления. Если скобки явно не указаны, их быть не должно.
А если текстом, то нормально:
![](https://habrastorage.org/getpro/habr/upload_files/9e7/28d/378/9e728d3783c70d82e72e3f9a3f0b2b4f.png)
Скорее всего разбивает на блоки, из-за этого "2+2" считает более приоритетным вычислением.
2+2 умножить на 2 — действительно 8, если уж на то. Возможно, правильнее было бы написать 2+2, умноженное на 2. Но даже так, без интонационного акцента вариант интерпретации этого текста как (2+2)*2 более предпочтителен.
Да чего тут гадать. Вопрос написанный боту исследовал вдоль и поперёк. Если ему не достаточно информации, либо условия задачи противоречивы, то он должен либо задать уточняющий вопрос, либо предложить оба решения и показать причину такого ответа. А чат бот который предполагается использовать для общения с простыми людьми должен ждать что на входе будет всякий мусор и в этом мусоре ему и нужно уметь разбираться.
Ну стоит отметить, что модель прекрасно может понимать, что условие задачи плохо заданы или есть несколько решений. Просто у неё не настроен контекст, чтобы в таких случаях уточнять что-либо, а по умолчанию она всегда отвечает сразу какой-то ответ.
Задаем для llama3 70b q4_K_M контекст:
Ты помощник, который отвечает на русском и решает любые вопросы. Если тебе что-то не понятно или ты видишь несколько вариантов ответа, то ты сначала уточни, а потом отвечай.
Ответ:
![](https://i.imgur.com/foPpe64.png)
несомненно, можно придумать "правильный" вопрос и получить правильный ответ. но это работает только на проверке ответов по уже известным вопросам. А если ответ не известен?
![](https://habrastorage.org/getpro/habr/upload_files/ebe/be3/f76/ebebe3f769742c10c4b5de97130c3d62.png)
несомненно, можно придумать "правильный" вопрос и получить правильный ответ
я не придумывал "правильный" вопрос, я задал точно такой же как у вас.
Вы упускаете суть. Пока вы упражняетесь в попытках поймать модель на "глупости", вы пропускаете мимо другой момент - модели могут полностью менять своё поведение при изменении их глобального контекста (то, что в ChatGPT называют Агентами).
Хотите чтобы модель стояла на своем, уточняла вопросы, была абсолютно уверена, что правильно вас поняла? Для этого не нужна новая модель, не нужно искать какую-то особую модель, всё это можно получить на текущей, просто задав ей роль.
Назовите её терминалом, и модель будет считать себя linux-терминалом.
![](https://i.imgur.com/zN6Q3yg.jpeg)
И вот тут уже становится понятно, что важнее как модель понимает и удерживает контекст - чем сильнее модель, тем легче ей дается удерживать многие условия в "голове" и не смешивать их в процессе инференса.
Приведу пример.
У меня есть 10 яблок. Я нахожу 3 золотые монеты на дне реки. Река протекает рядом с большим городом, который как-то связан с тем, на что я могу потратить монеты. Я теряю 4 яблока, но получаю золотую монету. На мой путь выбегают три птицы и роняют по 6 яблок. Я играю в онлайн-игру и выигрываю 6 золотых монет, но мне приходится делить их поровну с двумя моими товарищами по команде. Я покупаю яблоки на все имеющиеся у меня монеты. Цена одного яблока составляет 0,5 монеты. Сколько у меня яблок? И где находится река?
Правильный ответ 36 яблок и 0 монет. ChatGPT-3.5 не способна полноценно отделить монеты и яблоки, и думает, что яблоки, что выпали у птиц, это выпали из вашего кармана и думает, что у вас осталось отрицательное число яблок.
![](https://i.imgur.com/jqIbjJF.png)
Но ChatGPT-3.5 отвечает на ваш вопрос "2+2 умножить на 2" как вы и хотите и выдает сходу ответ 6. Только 3.5 не становится от этого более "умной", которая не проваливает "тест".
![](https://i.imgur.com/657B60e.png)
Если что, llama3 70b легко решает задачу с яблоками (также как и WizardLM-2, GPT4, Claude3).
![](https://i.imgur.com/rXEa7et.png)
В общем-то мне всё равно кто и как испытывает модели, я лишь хотел показать, что модели это не про угадывание образа мышления, а это гибкий инструмент, который можно настроить, не обучить, а настроить.
Бот ничего не должен, он отвечает как средний человек. Попробуйте среднему человеку написать свою задачу и он ответит восемь без всяких уточнений. Это может быть даже нелогично и математически неправильно, но отличие ИИ от процессора как раз в том, что он не логикой руководствуется. Это как в анекдоте про десять батонов хлеба, столкновение житейской логики и формальной.
Огоромное спасибо за короткую, но информативную статью! Подписался на вас. Можете более подробно расписать как удалось прикрутить DuckDuckGo и голосовые сообщения? Пока не совсем понимаю, как разграничить общение с ИИ и собственно Интернет-поиск. В моих ботах-помощниках это происходит путем анализа ввода через grep. Есть возможность выложить версию кода с полным функционалом?
Подробно в следующей статье напишу, а если коротко, то используйте function calling и опрашивайте DuckDuckGo, результат поиска подставляете в системный пропт и снова опрашивате модель, примеров как это сделать очень много.
Для голосовых сообщений надо где то запускать Whisper или платить внешним провайдерам. В Телеграме забираете голосовое сообщение ввиде аудиофайла, через Whisper делаете текст и дальше все как обычно.
Ок, подожду статью
Я чайник, не мог ли ты дать мне полный код с использованием DuckDuckGo и Whisper для LLaMA 3
DuckDuckGo_search: Команда типа ddgs text -k "weather today" -m 5 работает, но после вывода каждого результата приходится нажимать enter чтобы продолжить и вывести следующий. Как сделать чтобы все результаты сразу сохранялись в файл?
Советую глянуть LangChain, там реализовано много фич для работы с агентами.
Можно через либу LangChain сделать. Там есть уже реализованный инструмент поиска, который можно накрутить к llm и она при необходимости будет искать в интернете
Если использовать кольцо из ключей с разных аккаунтов, то по IP не забанят? =)
Забанят.
Конечно же, забанят
При этом, если кидать относительно много запросов (даже в рамках лимитов), забанят достаточно быстро и все ключи, которые использовались на одном адресе, разом, проверено)
Но вопрос решается, если использовать кучку прокси-серверов
Да и Groq особо не требователен к почте, не просит номер телефона и так далее, так что насобирать ключи несложно, а себестоимость околонулевая
Но ни в коем случае так не делайте, это нарушает условия пользования и вообще некрасиво)
Groq постоянно перескакивает обратно на английский при общении с ним на русском. На просьбу отвечать на русском обещает, но потом быстро забывает. Есть ли опция по типу "set preferable language output = ru"?
Было бы круто, если бы не только на русском отвечал. Все-таки большая часть датасета из английских текстов, поэтому на нем модель умнее. Можно конечно попросить отвечать на инглише, но тогда ллама на обоих языках напишет, что по инструкции рекомендуется отвечать на русском. Ну и в описании можно было бы добавить что это ллама, а не чатжпт :)
А так бот отличный и статья понятная, спасибо!
А можно подключить контекст и настроить Лору бота? Чтобы сделать женщину виртуальную....
некст степ - RAG
лучше запустить скрипт
А подскажите чайнику, как этот скрипт запускать? Я создал бота, зарегился на Groq. Подставил в код свои данные. Даже на всякий случай запустил у себя на компе
pip install pyTelegramBotAPI groq
И че? Куда этот скрипт присобачить? Заранее спасибо.
+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 и бот
python имя_скрипта.py
А почему логотип от ollama ?
![](https://habrastorage.org/getpro/habr/upload_files/0ce/99d/3e6/0ce99d3e60f78fa782f26bcb8630d56f.png)
Заинтересовала фитча web_search. Ее надо настраивать или она стоит по дефолту ? И можно ли использовать llama с прокси вместо ВПН ? В плане если ли возможность, как например в g4f передавать прокси с которого будут идти запросы, тем самым не ставя впн на свое устройство ?
Всё надо настраивать, само не работает.
С прокси, думаю, получится.
а когда планируйте статью опубликовать с реализацией поиска в сети?
Мой вариант для поиска в гугле https://github.com/theurs/tb1/blob/master/my_google.py
Сначала скачиваются несколько документов из выдачи гугла или дакдакго, скачиваются одновременно все, затем делается запрос по ним к джемини или ламе.
Вариант с джемини и большим окном выдает результат который выглядит очень хорошо. С лламой надо что то делать, промпт дотачивать, она при таком варианте отвечает по-английски.
![](https://habrastorage.org/getpro/habr/upload_files/5c8/744/7e3/5c87447e3788e22c9d2d8687ad19e935.png)
![](https://habrastorage.org/getpro/habr/upload_files/334/057/f59/334057f595481c3dcc27c93396bb71c8.png)
Хороший код выложен, спасибо.
Не вникал в DDG AI Chat?
https://github.com/deedy5/duckduckgo_search?tab=readme-ov-file#1-chat---ai-chat
подскажите, если у тебя есть европейский VPN, то зачем городить этот огород ведь можно бесплатно пользоваться chatgpt-3.5, которого хватает за глаза для обыденных задач?
можно и не городить
Согласен, если есть машинка где-нибудь в AWS например, то помимо VPN можно поднять тот же squid, и использовать отдельный браузер с прокси для chatgpt, так удобнее, не нужно VPN постоянно включать. У меня это так и работает. Mozilla с прокси для chatgpt, Chrome без прокси для всего остального.
Гугл выкатил новую турбо модельку, в бесплатной версии лимиты такие что лламу можно временно закапывать. Окно - 1млн токенов, вывод 8к, качество явно лучше чем у лламы3-70, скорость меньше но оно того стоит.
![](https://habrastorage.org/getpro/habr/upload_files/634/f75/658/634f756581da778165c855dc5280afea.png)
Как работает поиск, все ли найденные ссылки читаются или только те которым силениум не нужен, без джава скрипта, простыми реквестами? И как достается текст со страницы, то есть отчищается от посторонних вещей, шапки сайта, менюшек итп.
У меня в боте читаются первые 10 сайтов из выдачи, только простыми реквестами, селениум для хостинга тяжеловат. Дальше текст извлекается модулем trafilatura, в большинстве случаев получается почти идеально чистый текст но иногда путает блоки, иногда кодировка не та.
И дальше текст сохраняется в память чтоб по нему можно было вопросы задавать. С этим новым флешем от гугла вполне реально работать с памятью в сотни тысяч символов.
![](https://habrastorage.org/getpro/habr/upload_files/1ba/c0e/e7e/1bac0ee7efa83160d9e3a103bb826268.png)
![](https://habrastorage.org/getpro/habr/upload_files/956/0da/a42/9560daa42b741f32b2ada2ab47fff6c4.png)
не знал про trafilatura,
спасибо, крутая штука
Подскажите, почему может не срабатывать подсветка синтаксиса кода в ответах бота?
модель форматирует текст используя Markdown (не HTML), иногда она ошибается и форматирование слетает
У меня почему то это происходит постоянно, ни в одном из сообщений бота синтаксис не был подсвечен, хотя тройные одинарные обратные присутствуют
при отправке сообщения надо указывать телеграм боту parse_mode="Markdown"
Не срабатывает. Хотя подсветка работает нормально в НашGPT и также в отправляемых боту сообщениях. Что-то не так именно в ответах самого бота. Кавычки, может, не кошерные...
Нашел комментарий от Kenya-West в другой ветке:
![](https://habrastorage.org/r/w48/getpro/habr/avatars/0d9/891/d91/0d9891d918c856d7591972b71742002c.jpg)
"Те, кто разрабатывал ботов Telegram, знают, в чем дело. Все клиенты работают через TDLib, и там отправка сообщения идёт через запрос с параметром MarkdownV2, в котором надо очень сильно извратиться, чтобы не поломать вёрстку и не за играться с экранированированием символов. Вот в мобильных клиентах особо и не заморачивались, кодовая база устоявшаяся и баг минорный, никто чинить не будет"
Заработало. В screen висело две сессии и обновление кода не происходило.
Переделка маркдауна от чатгпт-ботов в маркдаун для телеграма это похоже самая сложная часть таких ботов. Перерыл кучу проектов на гитхабе ни у кого нет ничего приличного.
Входные данные нестабильны, боты могут одно и тоже по разному оформлять, могут неправильно оформить вообще, а телеграм не принимает сообщения которые оформлены с ошибками в тегах.
зы html у телеграма это на самом деле тоже маркдаун, просто похож внешне на хтмл, обычные парсеры хтмл тут непригодны
проэтому у меня отправка через try - except
, если не прошло отправляю без parse_mode, но это не так часто случается, примерно один раз из 20-30 сообщений
Еще одна проблема - сообщения от ботов бывают больше 4к символов. Если их тупо порезать то разрез может пройти внутри тега и будет 2 испорченных сообщения.
Еще одна проблема - математические записи. Бот их часто пишет латекс выражениями внутри долларов $$\[\sqrt{x^2+1}\] $$
Надо конвертить во что то более красивое чем латекс месиво. В картинки переделывать нельзя, телеграм не даст их вставлять посреди текста, можно в юникодные символы, есть библиотека которая делает это более менее прилично.
Но проблема еще их сдетектить в тексте, они не всегда между двумя долларами стоят.
Можно 2 часть пожааааалуйста :)
Использование VPN - слишком большой недостаток. Лучше использовать https://github.com/janhq/jan и скачать модельку поменьше, если места на диске не хватает.
Поясните за недостаток. В впн можно заворачивать список адресов, только грок например. Какие проблемы? Оффлайн аналоги пока что не вариант, ну разве что новейший мистраль можно запустить на домашнем очень мощном компьютере и получить при этом приличное качество.
Даже без видеокарты можно запустить llama 3 локально. На процессоре работает не быстро, но терпимо. А у кого есть мощная видеокарта, зачем ему онлайн да ещё через VPN?
В впн можно заворачивать список адресов, только грок например. Какие проблемы?
За VPN платить нужно. Не у всех он есть.
А у кого есть мощная видеокарта, зачем ему онлайн да ещё через VPN?
Зависит от объема памяти видеокарты. Если памяти видеокарты не хватает для прогрузки модели, то производительность сильно падает.
Запустить ламу локально? На домашней видяшке с 160гб видеопамяти? Что бы не платить 1 доллар за впн (для тех кто не способен найти бесплатные)? https://nlpcloud.com/ru/how-to-install-and-deploy-llama-3-into-production.html
Llama 3 только маленькая пойдет, версия указанная здесь вряд ли вообще запустится без gpu. Экономически нет смысла гонять большую модель локально на машине с gpu, если речь идет о персональном телеграм-помощнике, который если не 24/7 должен быть онлайн, то хотя бы в формате 0800-2200. Вариант с забугорным впс за 5 евро выйдет дешевле. За эти деньги и бот будет работать, и впн развернуть можно. Хотя, иметь возможность быстрой работы с большой моделью локально и мобильно - на ноуте или телефоне - это, конечно, мечта.
А это продолжение? https://t.me/YtbGPTbot
Как там реализованы ответы по большим текстам?
Попробовал сделать сам RAG + groq. Работает, но очень медленно индексирует тексты, и если тексты реально большие, как книга, то еще и оперативку жрет как не в себя.
Должен быть другой путь.
Код: https://pastebin.com/nEQzN15x
Ответ по книге от лламы3-70
сделай максимально подробный пересказ первой части, 2000 слов
В первой части романа «Путеводитель хитч‑хайкера по Галактике» Дугласа Адамса мы знакомимся с мистером Проссером, человеком сорока лет, который работает в городском совете. Он является прямым потомком Чингисхана, но это не влияет на его жизнь, и он не знает об этом факте. Мистер Проссер — это нервный и неопрятный человек, который любит носить маленькие меховые шапочки.
В данный момент мистер Проссер пытается убедить Артура Дента, который лежит в грязи перед бульдозером, покинуть свой дом, потому что он должен быть снесен для строительства новой дороги. Артур отказывается уходить, и между ними происходит спор. Мистер Проссер утверждает, что дорога необходима, а Артур не понимает, зачем она нужна.
В то же время мы узнаем о мире, в котором происходит действие романа. Это мир, где разумные формы жизни, произошедшие от обезьян, живут на маленькой зелено‑голубой планете, которая вращается вокруг маленькой желтой звезды на краю Галактики. Жители этой планеты считают электронные часы одним из высших достижений техники.
в 99% YouTube видео больших текстов не быват, даже 3х часовое видео влазит в обыный промпт.
99% тебе не нужно, тебе нужно конкретно это видео, и сабов к нему конечно же нет.
Я тут попробовал транскрипции к видео делать с помощью джемини, скачиваю аудиопоток одновременно несколько кусков по 10 минут и сразу на обработку в джемини в этих же потоках, он может и 40 минут одним куском но если речь плотная то не влезет в ответ.
Фильм с ютуба размером полтора часа перевел в текст за 1 минуту, если не считать времени на скачивание. Качество хорошее но дуркует иногда, из 10 кусков 2 получились попорченные, их пришлось переводить в текст обычным бесплатным гуглом (SpeechRecognition+pydub). Фантастика.
Заметил, кстати, что при работе с groq api через ollama web-ui и jan, через некторое время выскакивает сообщение о превышении квоты (скорее всего баг на стороне сервера)
А лимиты соблюдаются?
Да, в пределах квоты
Он в заголовках ответа пишет оставшиеся лимиты: https://console.groq.com/docs/rate-limits
Как сделано безграничное распознавание?
----------
⚡️ Обновление бота. Что нового:
Сняты все ограничения на голосовые сообщения и улучшено качество распознования голоса.
Решена проблема с непроизвольным переключением на английский язык. Теперь бот в 95% ответов использует русский язык.
Увеличен контекст диалога. Ответы станут еще адекватнее.
P.S.
Еще есть YouTube GPT бот (https://t.me/ytbgptbot), он умеет смотреть видео и пересказывать содержание.
Теперь и картинки. А они как работают?
ЗЫ, у groq теперь есть бесплатная gemma2 9b, она по качеству примерно как гпт3.5.
И виспер у них теперь работает бесплатно 20 часов в сутки. Работает супербыстро. Пробовал делать им субтитры из видео на рутубе. Там нет субтитров и аудиодорожек отдельных, приходится качать само видео, и оно скачивается дольше чем распознается текст.
Ещё одна интересная находка - куча универсальных библиотек. Одинаковый доступ ко всем llm. Одинаковая работа с памятью и функциями. Советую посмотреть на litellm и аналоги.
Llama 3.1-70b в своем Телеграм боте — бесплатно, безлимитно и всего 20 строк кода