Я создаю чат, который возвращает запросы на основе вопроса, который вы задаете, относительно конкретной базы данных. Для этого я использую 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));




Насколько я знаю, не существует способа заставить LLM (в данном случае Azure OpenAI) запоминать ваш контекст дешево, как вы сказали, отправка контекста (и огромной его части) при каждом вызове очень быстро становится дорогостоящей. Тем не менее, вы можете изменить подход и попробовать другие методы, чтобы имитировать память ИИ, например, суммировать предыдущие вопросы и отправить это как контент (вместо длинной строки с 20 вопросами/ответами вы отправляете краткое описание того, что пользователь запрашивал, это сделает ваше приглашение коротким и будет своего рода «осведомленным» о разговоре.
Существуют также буферы разговоров (сохраняющие историю чата в памяти и отправляющие ее в de llm каждый раз, как вы это делали), но она довольно быстро становится длинной, для этого вы можете настроить окно буфера (ограничивая память разговора тремя последними например, вопросы, которые должны помочь контролировать количество токенов).
Есть несколько способов справиться с этим, но, насколько мне известно, не существует «идеальной памяти», и ни один из них не стоит того, чтобы платить за него. Если бы вы могли рассказать нам немного больше о том, насколько хорошей должна быть память бота или о конкретном варианте использования, возможно, мы сможем быть более точными. Удачи!
вот несколько ссылок, которые вы можете использовать для начала:
Спасибо, Диего, ссылки, которые вы публикуете, к сожалению, относятся к LangChain, это библиотека Python, а я использую Java. Но я думаю, что уловлю основные мысли и подойду к проблеме, ограничив память разговора тремя последними вопросами, как вы сказали. Очень полезно, спасибо
Я думаю, вам нужно научиться использовать уценку для форматирования своих постов. Кстати, это I’m (сокращение от I am), а не im.