Комментарии 18
Тоже к такой схеме пришел, правда я использую https://memgraph.com/.
А какова схема взаимодействия с ботом? MCP? Shell скрипты? Как именно он ходит в эту базу?
Бот написал себе скилл, в котором прописана строка подключения к AlloyDB, скрипт на Python и инструкция по запуску в markdown. Когда я ему говорю что-то типа "занеси ключевые факты из такой-то статьи в omni-memory", он другим скиллом читает статью, выделяет там то, что посчитал интересным и отправляет в этот скилл, в котором абзац разбивается на subject->predicat->object и уже в виде json отправляется в базу.
Чтение статьи и выявление фактов не отлажено и пока больше похоже на аттракцион, потому что факты из статьи он выбирает довольно своеобразно. Но это всё допиливается. Сам скилл, если ему передать конкретный факт, отрабатывает хорошо.
Выглядит очень здорово. А может на github это всё вместе со скиллом оформить? Сразу готовый вариант и можно на clawhub выложить.
В скилле сидят строки подключения к SQL, и он подключается к уже созданной базе, так что выложить в таком виде я его не могу. А на github лежит весь проект со скриптами создания базы, правда, для AlloyDB Omni. это PostgreSQL от Гугла. Он opensource, я его на слабую виртуалку поставил в докере, его можно локально ставить себе на linux
Так ведь скилл вполне позволяет добавить конкретную директиву на создание базы данных при первом запросе к скиллу. Если честно, не вижу тут принципиальных ограничений. Наоборот не будет никаких внешних надстроек к боту, которые нужно отдельно руками разворачивать.
Или я что-то не так понял? Я могу и ошибаться)
Все правильно, на гитхабе есть скрипт на SQL для создания базы. Но я не пробовал его на стандартном postgres, а в AlloyDB уже встроены нужные расширения, там есть индексы для поиска приблизительным ближайшим соседям, которых не будет в postgres. AlloyDB Omni опенсорс, ставится на локальную машину, никаких проблем с ним нет, но его надо сначала ставить. А в скилл добавлять установку СУБД так себе идея)
"семантически близкие сущности и выдал структурированный ответ из базы с точностью совпадения 0.83. " если это не косинус, то поясните как определили эту цифирку?
почему не косинус, это косинус. косинусное расстояние вычисляется по формуле . Значок `<=>` -- это косинусное расстояние -- чем меньше угол, тем больше расстояние между точками в семантическом пространстве, тем они меньше похожи.
Там в скриптах на гитхабе прописано (1 - (f.embedding <=> query_embedding)), это более привычный подход: чем больше число, тем больше сходство. Поэтому 0.84 -- это большое сходство.
Что-то долго. Я за 25 справился
А почему вы не сравнили performance вашего агента с памятью и без?
На чем перфоманс, на сервере VPS c 8Гб ОЗУ с пингом в 150мс? С клиента, который к LLM через впн ходит? Ну вот потому наверное и не сравнил
А почему бы и нет, цель сравнительного теста - это показать, что даёт предлагаемое изменение, лучше на какой-нибудь численной метрике, точности whatever, те под перфомансом я имел в виду не количество токенов в секунду, а скорее качество ответов итп.
качество ответов зависти от модели LLM. Здесь на SQL сохраняется онтология фактов, причем делается это для того, чтобы сохранять факты, которых нет в интернете, а следовательно нет в памяти модели. Так что сравнивать "с памятью -- без памяти" вообще не получится. Система будет предсказуемо галлюцинировать о тех вещах, которых не знает. Измерять можно качество ответов существующей базы знаний и вновь создаваемой. А тут существующей базы по моим фактам еще нет. Следующую версию уже будет с чем сравнивать

Как мы с моим ботом OpenClaw сделали ему семантическую память на AlloyDB Omni за полчаса