Я использую text-embedding-3-large как модель для векторных вложений, и с ней что-то не так. Я имею в виду, что мне пришлось дважды пополнить счёт OpenAI с 30 ноября, что безумие, ведь этого должно хватать на месяцы… Не изменилось ли что-то в связанных темах? Возможно, система постоянно догоняет темы, которые уже были обработаны, или я не знаю.
Она генерирует около 24 миллионов входных токенов в день.
Я проверил свой счёт. Взрыв произошёл 27.11. До этого расход составлял менее 100 тысяч токенов в день, но затем он вырос до 7 миллионов и продолжает расти каждый день. Вчера он был уже около 20 миллионов.
Редакция: В октябре стоимость вложений (embeddings) составляла 46 центов. Сейчас, в декабре, за почти четыре дня — почти 6 долларов.
Одно из возможных объяснений связано с тем, что ранее мы пропускали вызов API для генерации эмбеддингов, если дайджест тем не менялся, но в функции gen_bulk_reprensentations это поведение было нарушено @Roman.
@Don, подскажите, сколько запросов на генерацию эмбеддингов вы делаете в день?
Приношу извинения, это была ошибка в новом коде, который мы добавили для ускорения заполнения пропущенных эмбеддингов. Проблема должна быть исправлена в:
Пожалуйста, дайте знать, если всё не вернётся в норму.
Учитывая лимит в 250 запросов в час, у нас есть жёсткое ограничение в 6000 запросов в день. Эти цифры всё ещё в пределах лимита.
Однако, если они срабатывают только при нашем «обновлении случайной выборки» тем, это должно быть ограничено 10% от этого значения, то есть в худшем случае — 600 запросов.
@Roman, не применяется ли этот лимит каким-то образом? Или проблема где-то ещё?
Да, я думаю, что исправленная мной ошибка выявила другую, которую скрывала проверка дайджеста.
Я думаю, ошибка здесь:
На прошлой неделе я заменил find_each на find_in_batches (первый использует батчи внутренне), и поскольку оба метода полагаются на limit для указания размера батча, исходный лимит limit - rebaked игнорируется. Вместо этого следует использовать pluck + each_slice.
На первый взгляд, это не кажется связанным. Похоже, что генерация векторного представления не удалась, и система пытается вставить NULL. Неужели OpenAI возвращает ошибку? Возможно, это связано с лимитами?
Пожалуйста, выполните это из консоли:
DiscourseAi::Embeddings::VectorRepresentations::Base
.find_representation(SiteSetting.ai_embeddings_model)
.new(DiscourseAi::Embeddings::Strategies::Truncation.new)
.vector_from("this is a test")
.present?
Если возникнет ошибка Net::HTTPBadResponse, она должна быть записана в ваши логи.
Это означает, что он может генерировать эмбеддинги. Сохраняются ли эти ошибки? Если да, то вы должны видеть их каждые пять минут.
Я провел несколько тестов на локальном экземпляре против нашего самохостингового сервиса эмбеддингов и подтвердил, что заполнение работает при следующих условиях:
Эмбеддинги отсутствуют.
Дигест устарел, а updated_at эмбеддингов старше 6 часов.
Дигест не устарел, но updated_at эмбеддингов старше 6 часов (в этом случае обновление не происходит).
Я ничего не знаю о лимитах, но количество запросов к API и прочее вернулось в норму после предыдущего исправления. Так что спасибо, ребята, за быструю реакцию.