Проблема с превышением максимального токена в Azure OpenAI (с Java)

Я создаю чат, который возвращает запросы на основе вопроса, который вы задаете, относительно конкретной базы данных. Для этого я использую Azure OpenAI и Java в Spring Boot.


Моя проблема возникает здесь:

Как я могу заставить ИИ запомнить предыдущие вопросы, не передавая ему контекст обратно? (что я хочу сделать, так это значительно сократить потребление токенов, так как в зависимости от того, что он запрашивает, если вопрос содержит ключевое слово, например «пользователи», что я делаю, так это передаю в контексте огромную информацию в этой таблице (название полей, тип данных и описание) поэтому, когда у вас есть несколько вопросов, использование токенов возрастает до более чем 10 000))

Я не могу показать весь код, так как это проект моей компании.

В настоящее время я добавляю в контекст указанную таблицу и основной контекст (вы - чат на основе SQL...). И чтобы чат запомнился, я попытался сохранить историю в Java и снова передать историю контекста (но это довольно быстро превышает токены)

Вот что я сейчас делаю (не помню от ИИ):

chatMessages.add(новый ChatMessage(ChatRole.SYSTEM, контекст));

chatMessages.add(новый ChatMessage(ChatRole.USER, вопрос));

ChatCompletions ChatCompletions = client.getChatCompletions(deploymentOrModelId, новые ChatCompletionsOptions(chatMessages));

Я думаю, вам нужно научиться использовать уценку для форматирования своих постов. Кстати, это I’m (сокращение от I am), а не im.

Abra 15.06.2024 09:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я знаю, не существует способа заставить LLM (в данном случае Azure OpenAI) запоминать ваш контекст дешево, как вы сказали, отправка контекста (и огромной его части) при каждом вызове очень быстро становится дорогостоящей. Тем не менее, вы можете изменить подход и попробовать другие методы, чтобы имитировать память ИИ, например, суммировать предыдущие вопросы и отправить это как контент (вместо длинной строки с 20 вопросами/ответами вы отправляете краткое описание того, что пользователь запрашивал, это сделает ваше приглашение коротким и будет своего рода «осведомленным» о разговоре.

Существуют также буферы разговоров (сохраняющие историю чата в памяти и отправляющие ее в de llm каждый раз, как вы это делали), но она довольно быстро становится длинной, для этого вы можете настроить окно буфера (ограничивая память разговора тремя последними например, вопросы, которые должны помочь контролировать количество токенов).

Есть несколько способов справиться с этим, но, насколько мне известно, не существует «идеальной памяти», и ни один из них не стоит того, чтобы платить за него. Если бы вы могли рассказать нам немного больше о том, насколько хорошей должна быть память бота или о конкретном варианте использования, возможно, мы сможем быть более точными. Удачи!

вот несколько ссылок, которые вы можете использовать для начала:

Спасибо, Диего, ссылки, которые вы публикуете, к сожалению, относятся к LangChain, это библиотека Python, а я использую Java. Но я думаю, что уловлю основные мысли и подойду к проблеме, ограничив память разговора тремя последними вопросами, как вы сказали. Очень полезно, спасибо

AFOX JONES 15.06.2024 18:27

Другие вопросы по теме

Spring безопасность 6 - авторизация не работает
Невозможно имитировать bean-компонент RestClient при тестировании класса, использующего этот bean-компонент
ОШИБКА o.h.e.jdbc.spi.SqlExceptionHelper — ОШИБКА: синтаксическая ошибка на месте «:» или рядом с ним при использовании @Query
Как запустить приложение Spring Boot с распакованными зависимостями?
Существуют ли такие инструменты, как Jqwik, для простого тестирования класса времени Google API? (DateTime, EventDateTime... и т. д.)
Mockito выдает ошибку. Несоответствие аргументов строгой заглушки
Как настроить повторные попытки для неудачных событий приложения Spring, сохраненных в репозитории публикаций событий Spring Modulith?
Java.lang.NoClassDefFoundError: jakarta/servlet/SingleThreadModel — ошибка при использовании apache spark 4.0-preview1
Задержка запроса Spring WebClient из-за неактивного соединения
Какой неустаревший способ установки менеджера транзакций в контейнер прослушивателя - это Spring Kafka 3.2?