Исправить ошибки в работе ИИ агента с векторной базой
Привет.
Делаю приложение. Система построена таким образом: Пользователь задает запрос в чате приложения - Агент ИИ ищет информацию в БД и дает ответ. Если запрос пользователя выходит за рамки БД, тогда агент обращается к Gemini.
БД - Supabase. Туда загружены данные с двух государственных сайтов по API.
В бэкенде построен флоу в n8n (тот же агент). Он бегает по базе и дает ответы и комментарии.
В Supabase созданы таблицы с данными с 2 сайтов. Они объединены в 1 таблицу document_chunks
Проблема - Агент ИИ находит информацию только в 1 таблице, а данные второй как бы не видит. Даже если дать запрос и скопировать данные, которые нужно найти (мы знаем, что эти данные там есть), то агент не находит.
Также необходимо построить алгоритм для поиска для агента. База информации огромная, и я так понимаю, агент не знает, что является релевантным, а что нет. Не хватает системы "кластеров" поиска.
Что касается различной метадаты. это не ошибка, а архитектурное решение. В одной таблице хранятся два принципиально разных типа документов:
Законодательство (Sejm) - имеет структуру "Статья/Параграф".
Судебные решения (SAOS) - имеют структуру "Номер дела/Суд". То, что в одних строках есть одни поля, а в других они NULL — это нормальная практика для смешанных баз данных. Это позволяет Агенту понимать, цитирует ли он закон или судебный приговор. Унифицировать их невозможно, так как это разные сущности.
Что касается «записываем одни векторы, ищем другие».
И для записи в базу (парсинг), и для поиска (агент) используется одна и та же модель — Google Gemini Embeddings.
Размерность вектора фиксирована — 768.
Если бы размеры отличались, база данных выдала бы ошибку транзакции еще на этапе записи или поиска, и система не работала бы вообще.
Что касается "поиска в несколько этапов" - а вот тут, наверное, согласен, так как других вариантов я не нашел, вероятно, нужно реализовать гибридный поиск
Векторы формирует модель Google Gemini Embeddings через API.
Технически это реализовано через ноду Google Gemini Embeddings в n8n, она отправляет текст на серверы Google, получает в ответ векторный массив embedding и передает его для записи в базу данных.
Входной запрос преобразуется в вектор с помощью модели Google Gemini.
В Supabase вызывается функция, которая сравнивает вектор запроса с векторами документов в базе.
Результаты сортируются по коэффициенту схожести (от наибольшего к наименьшему).
База возвращает установленное количество Top-K наиболее релевантных фрагментов текста, независимо от того, является ли это законом Sejm или судебным решением SAOS, которые затем передаются в контекст ИИ.
Физически в базе данные есть. Я проверил это через прямые запросы к базе данных — записи судебных решений SAOS загружены корректно.
Агент не видит этих решений в момент формирования ответа. ИИ-агент при поиске не может правильно сопоставить человеческий вопрос с юридическими текстами судебных решений. Он видит законы Sejm, но «пропускает» приговоры SAOS, и именно это главная проблема.
Вся логика и структура проекта реализованы стандартно в рамках вашего аккаунта Supabase (PostgreSQL). Ничего внешнего или скрытого там нет.
Функции поиска — это стандартные SQL-функции, они находятся непосредственно в схеме базы данных.
Размер вектора — этот параметр четко определен в типах данных колонок таблицы с документами.
Любой разработчик, имея доступ к базе, может получить эту информацию за минуту, просто просмотрев структуру Schema и список функций через SQL-запрос или интерфейс Supabase.
Строки, где sejm_id есть, а saos_id — NULL, это законодательные акты. Они приходят из базы польского Сейма. Поскольку это закон, у него есть номер в реестре Сейма, но он не является судебным решением, поэтому он не может иметь saos_id.
Строки, где saos_id есть, а sejm_id — NULL, это судебные решения из базы SAOS. У каждого приговора есть свой уникальный номер в системе судов. Но приговор — это не закон, Сейм его не принимал, поэтому он не имеет и не может иметь sejm_id.
Щодо різної метадати. це не помилка, а архітектурне рішення. В одній таблиці зберігаються два принципово різні типи документів:
Законодавство (Sejm) - має структуру "Артикул/Параграф".
Судові рішення (SAOS) - мають структуру "Номер справи/Суд". Те, що в одних рядках є одні поля, а в інших вони NULL — це нормальна практика для змішаних баз даних. Це дозволяє Агенту розуміти, чи цитує він закон, чи вирок суду. Уніфікувати їх неможливо, бо це різні сутності.
Щодо «записуємо одні вектори, шукаємо інші».
І для запису в базу (парсинг), і для пошуку (агент) використовується одна й та сама модель — Google Gemini Embeddings.
Розмірність вектора фіксована — 768.
Якби розміри відрізнялися, база даних видала б помилку транзакції ще на етапі запису або пошуку, і система не працювала б взагалі.
Щодо "пошуку в декілька етапів" - а ось тут мабуть погоджуюсь, бо інших варіантів я не знайшов, напевно треба реалізовувати гібрідний пошук
Вектори формує модель Google Gemini Embeddings через API.
Технічно це реалізовано через ноду Google Gemini Embeddings у n8n вона відправляє текст на сервери Google, отримує у відповідь векторний масив embedding і передає його для запису в базу даних.
Вхідний запит перетворюється на вектор за допомогою моделі Google Gemini.
У Supabase викликається функція, яка порівнює вектор запиту з векторами документів у базі.
Результати сортуються за коефіцієнтом схожості (від найбільшого до найменшого).
База повертає встановлену кількість Top-K найбільш релевантних фрагментів тексту, незалежно від того, чи це закон Sejm, чи судове рішення SAOS, які далі передаються в контекст ШІ.
Фізично в базі дані є. Я перевірив це через прямі запити до бази даних — записи судових рішень SAOS завантажені коректно.
Агент не бачить цих рішень у момент формування відповіді. ШІ-агент при пошуку не може правильно зіставити людське питання із юридичними текстами судових рішень. Він бачить закони Sejm, але «пропускає» вироки SAOS і саме це головна проблема.
Вся логіка та структура проекту реалізована стандартно в межах вашого акаунта Supabase (PostgreSQL). Нічого зовнішнього чи прихованого там немає.
Функції пошуку це стандартні SQL-функції, вони знаходяться безпосередньо в схемі бази даних.
Розмір вектора цей параметр чітко визначений у типах даних колонок таблиці з документами.
Будь-який розробник, маючи доступ до бази, може отримати цю інформацію за хвилину, просто переглянувши структуру Schema та список функцій через SQL-запит або інтерфейс Supabase.
Рядки, де sejm_id є, а saos_id — NULL це законодавчі акти. Вони приходять з бази польського Сейму. Оскільки це закон, у нього є номер у реєстрі Сейму, але він не є судовим рішенням, тому він не може мати saos_id.
Рядки, де saos_id є, а sejm_id — NULL це судові рішення з бази SAOS. У кожного вироку є свій унікальний номер у системі судів. Але вирок — це не закон, Сейм його не ухвалював, тому він не має і не може мати sejm_id.
Приложения 1
-
2 дня12 124 UAH
272 1 2 дня12 124 UAHДобрый день,
Я проанализировал проблему с вашим AI-агентом и выявил основную причину — векторная конкуренция между двумя разными типами документов в одном пространстве. Документы Сейма (структурированные статьи) всегда выигрывают у решений SAOS (неструктурированный юридический текст) при стандартном векторном поиске.
Решение
Архитектура с двумя независимыми потоками поиска:
Классификатор запроса — определяет тип поиска (закон/прецедент/оба)
Параллельный поиск — отдельные запросы с оптимальной конфигурацией
Интеллектуальное объединение — слияние с перекрестной ссылкой (решения → законы)
… Оптимизация затрат API
Текущая система: ~$0.20-$0.25/запрос
Новая система: ~$0.03-$0.04/запрос
Снижение: 85% (при 1000 запросов/мес = экономия ~800 PLN/мес)
Объем работ
Я выполню удаленно (9-10ч):
Анализ и технический план (2-3ч)
Функции SQL + конфигурация (2-2.5ч)
Классификатор запросов (2ч)
Основной рабочий процесс n8n (3-3.5ч)
Вы выполните самостоятельно (экономия ~4-5ч):
Миграция данных (готовый SQL-скрипт с инструкцией)
Импорт рабочего процесса + конфигурация учетных данных
Тестирование по контрольному списку
Тонкая настройка параметров
Вы получите: SQL-скрипты, JSON рабочего процесса n8n, пошаговые инструкции, контрольный список, поддержку в Telegram
Оценка
Стандартный расчет: 1000-1350 PLN (9-10ч × 25-30 EUR)
Предложение: 990 PLN
Скидка ~30% от стандартной ставки
По желанию: полное внедрение "под ключ" +200 PLN (отладка TeamViewer, расширенные тесты)
Если предложение устраивает, мы можем начать с анализа (2-3ч) — вы получите конкретный план и подтверждение осуществимости.
С уважением,
Евгений
-
1 день6123 UAH
1562 7 0 1 день6123 UAHя вхожу в топ-5 разработчиков в категории «Искусственный интеллект и машинное обучение» среди ~2100 специалистов на платформе.
Гарантирую:
- Быстрое и качественное выполнение задания
- Четкое соблюдение дедлайнов
- Регулярная связь на протяжении всего процесса
Буду рад обсудить детали вашего проекта в личных сообщениях.
цена условная
-
3 дня6123 UAH
1539 4 0 1 3 дня6123 UAHДоброго дня. Подивився опис проблеми типовий кейс
Схоже, що частина даних або не проіндексована через embeddings, або просто не потрапляє в пошук. Плюс зараз у агента немає нормальної логіки відбору, тому він губиться у великій базі і не розуміє, де що шукати.
Я працював із Supabase, vector search і RAG-системами. Можу знайти, чому друга частина даних не знаходиться. Перебудувати логіку пошуку. Зробити так, щоб Gemini підключався тільки коли в БД реально немає відповіді. У результаті агент почне стабільно знаходити дані і відповідати адекватно.
Готовий подивитись на вашу поточну реалізацію і запропонувати рішення.
-
15 дней61 235 UAH
12784 4 2 15 дней61 235 UAHЗдравствуйте,
Я очень заинтересован в том, чтобы помочь улучшить возможности поиска вашего AI-агента и обеспечить надежное извлечение как законодательства Сейма, так и решений судов SAOS. У меня есть обширный опыт в создании и оптимизации бэкенд-систем с большими многосущностными базами данных, включая Supabase/PostgreSQL, и интеграции рабочих процессов поиска на основе векторов.
Я могу реализовать надежный гибридный алгоритм поиска, который учитывает несколько типов документов, улучшает рейтинг релевантности в больших наборах данных и вводит кластеризацию или извлечение с учетом сущностей, чтобы гарантировать, что AI-агент не пропустит ни один источник. Мне комфортно работать с рабочими процессами n8n, внедрять модели, такие как Google Gemini, и разрабатывать масштабируемые решения для высокообъемных структурированных данных.
Я уверен, что смогу улучшить логику поиска, повысить точность результатов и гарантировать, что AI-агент полностью использует ваш объединенный набор данных.
С наилучшими пожеланиями,
… Джо Винсент Карретас
-
5 дней12 247 UAH
3160 23 1 3 5 дней12 247 UAHЗдравствуйте, Максимилиан! Понимая вашу ситуацию, предлагаю интегративный подход для решения проблемы с АИ агентом. Сначала займусь детальным аудитом существующего флоу в n8n и структуры вашей базы Supabase. Опираясь на мой опыт в проектировании архитектур систем, быстро выявлю и решу проблему с поиском среди "document_chunks". Кроме того, разработаю оптимальный алгоритм кластеризации, который повысит точность и релевантность результатов агента. Настрою систему для бесперебойной и масштабируемой работы. Обсудим проект дальше?
-
1 день6123 UAH
2236 46 0 1 день6123 UAHДобрый день. Без реального понимания что у вас там сделано, трудно сказать реальные сроки и стоимость. Пишите в ЛС, обсудим подробнее. Пока только предварительные вопросы.
Вы уверены, что у вас две таблицы? Или может у вас две БД? По картинке ни чего не понятно, кроме того что есть одна таблица. Что в этой таблице означает столбец chunk_index?
Какой размерности ембединги? Какие размеры чанков? Почему сапбейс а не специализированные решения?