Инициализация RAG с использованием векторного хранилища без дубликатовJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Инициализация RAG с использованием векторного хранилища без дубликатов

Сообщение Anonymous »

Я создаю небольшое приложение, используя Spring-AI с mongodb-atlas (локальным контейнером докеров) для хранения данных RAG.
Я хочу «заполнить» mongoDB некоторым содержимым при запуске службы. Содержимое представляет собой список документов с метаданными.
Проблема в том, что этот контент будет вставляться каждый раз при запуске приложения, и я не нашел способа предотвратить вставку дублирующихся данных.
Я могу не просто удалить все данные из базы данных, так как я хочу добавить данные позже, которые должны быть сохранены и сохранены там, даже когда служба будет перезапущена и, возможно, заполнена другими/новыми пресетами.
Сейчас я пробую что-то вроде это:

Код: Выделить всё

    @Autowired
public void init(VectorStore vectorStore) {
List documents = List.of(
new Document("Once there was a little Girl",
Map.of("type", "init", "pos", "1", "plot", "1")),
new Document("The girls name was Mary",
Map.of("type", "init", "pos", "2", "plot", "1")),
new Document("Once there was a little Boy",
Map.of("type", "init", "pos", "1", "plot", "2")),
new Document("The boys name was Peter",
Map.of("type", "init", "pos", "2", "plot", "2")),
new Document("Peter was a wild kid",
Map.of("type", "init", "pos", "3", "plot", "2"))
);

List collect = vectorStore.similaritySearch("type == 'init'")
.stream().map(Document::getId).collect(Collectors.toList());
vectorStore.delete(
collect
);

vectorStore.add(documents);
}
Это не работает, потому что есть одна карта метаданных, которая хранится немного по-другому (в mongoDB я вижу, что порядок полей в карте метаданных каким-то образом отличается), и эта строка не удаляется на этапе удаления. Таким образом, при каждом запуске эта строка дублируется.
Поведение довольно стабильное. Когда я меняю значение типа с init на Story, другая строка избежит удаления. Это сводит меня с ума...
Мне хотелось бы иметь способ предоставлять в БД исходные данные, которые могут меняться по мере развития сервиса, не заполняя БД дополнительным мусором, который предположительно приведет к проблемам позже. (Я предполагаю, что так и будет, но я еще не на стадии подтверждения того, что это будет проблемой, тем не менее, это раздражает)
Кто-нибудь решил что-то подобное?

Подробнее здесь: https://stackoverflow.com/questions/792 ... duplicates
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»