Делаю тут для ULCAMP 2024 бота с памятью. По идее, он должен отвечать на любые вопросы на тему конференции, показывать пользователю его покупки (билеты, палатки, автобус), и менять заказ (отправлять сообщение о необходимости изменений в поддержку).



Решил показать, как эта самая память работает.



Хранить/вводить информацию решили через Google таблицы — как самый простой и быстрый инструмент. Процесс понятен (на изображении справа):



1. Контент-менеджер вводит небольшие статьи в таблицу, которые состоят из заголовка и текста (но по факту все равно объединяются в один элемент контента). Решили сделать его в среднем 500-1000 символов длиной (но это не жестко).

2. Раз в 15 минут мой скрипт проходит по таблице и считывает все данные. Проверяет, чего у нас еще нет, а что изменилось. Далее все, что надо добавить/изменить, переводится в вектора — Embeddings и сохраняется в векторной базе данных Pinecone. Поскольку у OpenAI и Anthropic разные форматы векторов, то я делаю сразу обе версии, чтобы иметь возможность переключать модели.




Взаимодействие пользователя с ботом происходит через мою универсальную библиотеку AgentBot, над которой я работаю уже более полугода. Все мои боты работают сейчас на ней. Она позволяет взаимодействовать с разными моделями и отвечает за хранение контекста для каждого пользователя.



1. Пользователь отправляет запрос боту, он попадает сразу в дочерний класс AgentBot, который называется UlcampBot.

2. UlcampBot переводит запрос в Embeddings и отправляет запрос в Pinecone.

3. Pinecone подбирает несколько статей, наиболее близких по векторам (а значит наиболее релевантных по смыслу), и возвращает эти статьи боту.

4. В случае, если пользователь — участник, мы делаем запрос к информации о его покупках из личного кабинета.

5. Информация передается обратно боту.

6. Бот подмешивает в системное сообщение справочную информацию из Pinecone и личную информацию из кабинета и передает на обработку родительскому классу AgentBot.

7. AgentBot исполняет свою обычную работу, формируя контекст и используя системное сообщение, делает запрос к LLM модели.

8. LLM модель в свою очередь генерирует ответ, используя переданную информацию, и возвращает его.

9. Ответ отправляется пользователю.




Самое главное, что, с учетом того, что LLM модели не требуется широта знаний (ведь всю самую важную информацию мы уже ей отдаем в запросе), мы можем использовать самые дешевые модели, и они будут отлично справляться.



Можете попробовать сами: @ulcampbot (версия не финальная, но вполне рабочая, если у вас куплены билеты на Ulcamp, то обязательно свяжите личный кабинет). Название тоже не финальное. Уже неделю прошу организаторов придумать мне его. Буду рад любым баг-репортам.



Кстати, мне сделали код на скидку на билеты на ULCAMP — BIZNESBOT10.



@sergiobulaev - AI и всё такое.