Обновить
4K+
60

Пользователь

116
Подписчики
Отправить сообщение

Что-то поменялось, не стал разбираться, что именно, но проблема происходила от метода typing. Поменял в статье на новый код. См start_typing, stop_typing.

Получил вопрос на хабре:

Сегодня утром столкнулась с интересным эффектом. Как я поняла ситуацию:

  • Накопилась история переписки

  • Задала боту сложный вопрос

  • функция получила от gpt слишком длинный ответ и не смогла его перекинуть в tg: {«errorMessage»: «A request to the Telegram API was unsuccessful. Error code: 400. Description: Bad Request: message is too long», «errorType»: «ApiTelegramException», «stackTrace»:

  • бот не получает ответ и делает ретраи: {«errorMessage»: «HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url

  • тем не менее, история продолжает увеличиваться, proxyAPI продолжает дергаться

  • и все это привело к опустошению счета proxyAPI минут за 10

Решили, что ошибок может быть много разных, все не учесть и обернули вызов к bot.process_new_updates([update]) в try/catch. Таким образом, webhook будет получать положительный ответ в любом случае и не будет слать один и тот же запрос. А ошибку мы все равно увидим в логах функции.

Предлагаю отблагодарить @mbelyakova за отличный разбор проблемы поднятием кармы!

В статье код тоже поправил.

Я проверил - файлы не считаются. Мой файл весит 500кб, но каждый запрос стоил 1-2 тысячи токенов. Если бы файл учитывался - было бы больше 500 тыс.

"usage": {
    "prompt_tokens": 1505,
    "completion_tokens": 548,
    "total_tokens": 2053
},

Запрос не включает в себя файл, потому что он не передается модели в виде текста. Code Interpreter берет файл напрямую из файлового хранилища.

К тому же у моделей есть ограничения контекстного окна. Для gpt-4o это 128 тысяч токенов. В такое окно не влезет даже мой файл, так-то загружать и анализировать можно очень большие файлы.

Статья уже не молодая, часто получаю вопрос: как использовать более новые модели. Ответ: в этом месте меняем на нужную модель.

def process_text_message(text, chat_id) -> str:
    model = "gpt-3.5-turbo"

Например:

def process_text_message(text, chat_id) -> str:
    model = "gpt-4o"

Токены из файла точно не тарифицируются, ведь они не отправляются в модель, ими только пользуется code interpreter. Учитывается обмен информацией между всеми участниками (модель, пользователь, code interpreter), а это уже от сценария зависит.

Друзья, у всех у кого ошибка An error occurred (SignatureDoesNotMatch) when calling the PutObject operation благодаря @mintag разобрались:
YANDEX_KEY_ID - это идентификатор именно статического ключа, а не самого сервисного аккаунта

Поменял InvalidRequestError на BadRequestError

В новой версии библиотеки название класса, видимо, поменялось. Из-за этого бот не очищал историю самостоятельно, когда она переполнялась.

Попробуйте имя пользователя телеграм прописать в нижнем регистре, если это сейчас не так

Хорошее предложение, спасибо! Обновил оригинальную статью, решил использовать имена пользователей, вместе chat id.

Обновление статьи:

1) Переходим на Python 3.12 и последнии версии библиотек

2) Вместо chat id для ограничения тез, кто может бользоваться ботом, будем использовать имена пользователей. Уж слишком сложно добавлять новых пользователей старым методом.

  1. По моему опыту - приводит. Лучше спрашивать на английском

Может это и так, на данный момент, может GPT-5,6,7 будут "умнее". Важно, что даже в таком виде ИИ помогает автоматизировать массу "тупых" задач

Я жду момента, когда работать можно будет в виртуальной реальности, и клава там будет такая, какая захочешь, хоть из трех частей

Это тот же Whisper, что и в API OpenAI? Или предыдущая модель?

В самой статье тоже поменял

Видимо ТГ шлет какие-то еще обновления, не вникал, но это с текущим кодом облачной функции может вызвать "затор", так что новые сообщения не будут обрабатываться из-за ошибки.

Решается заменой строчки:

if str(update.message.chat.id) in TG_BOT_CHATS:

на

if update.message is not None and str(update.message.chat.id) in TG_BOT_CHATS:

Так после удаления его и назначить надо заново. setWebHook - смотрите шан Telegram WebHook в статье

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность

Специализация

Фулстек разработчик, Разработчик мобильных приложений
Старший