Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
4.3 KiB
4.3 KiB
Решение проблемы пустого результата векторного поиска
Проблема
Нода "Postgres PGVector Store" иногда не возвращает результатов, что останавливает workflow.
Решения
Вариант 1: IF нода для проверки (простой)
Структура:
Postgres PGVector Store
↓
IF нода (проверка на пустоту)
├─ TRUE (пусто) → Обработка пустого результата
└─ FALSE (есть данные) → Продолжение workflow
IF нода настройки:
- Condition 1:
{{ $json.length }}equals0 - ИЛИ
- Condition 1:
{{ JSON.stringify($json) }}equals{}
В ветке TRUE:
- Code Node с обработкой пустого результата
- Или установка дефолтных значений
- Или переход на альтернативную логику
Вариант 2: Code Node для проверки (рекомендуется)
Добавьте Code Node ПОСЛЕ "Postgres PGVector Store":
// Проверяем результат
const inputData = $input.all();
if (inputData.length === 0 ||
!inputData[0].json ||
Object.keys(inputData[0].json).length === 0) {
// Если пусто - возвращаем структурированный ответ
return [{
json: {
isEmpty: true,
message: 'Результатов не найдено',
// Ваши исходные данные
chatInput: $('классификатор').item?.json?.chatInput || '',
problem: $('классификатор').item?.json?.output?.problem || '',
// Для продолжения workflow
useFallback: true
}
}];
}
// Если есть результаты - возвращаем как есть
return inputData;
Вариант 3: IF нода с проверкой на конкретное поле
Настройки IF ноды:
Condition 1: {{ $json.documents }} is empty
Condition 2: {{ $json.metadatas }} is empty
Combinator: OR
В ветке TRUE (пусто):
- Установите дефолтные значения
- Или используйте другую логику поиска
Вариант 4: Увеличить topK и добавить фильтр
В настройках "Postgres PGVector Store":
- Увеличьте
topKс 1 до 5-10 - Добавьте фильтр по
similarity_threshold(если поддерживается) - В следующей ноде берите только первый результат
Вариант 5: Try-Catch через Error Trigger
Настройка:
- Добавьте Error Trigger ноду
- Настройте продолжение workflow при ошибке
- В Error Handler установите дефолтные значения
Рекомендуемая структура workflow
1. Классификатор
↓
2. Postgres PGVector Store
↓
3. Code Node (проверка на пустоту) ← ДОБАВЬТЕ ЭТО
↓
4. IF нода (проверка isEmpty)
├─ TRUE → Fallback логика / Дефолтные значения
└─ FALSE → Продолжение с результатами
Быстрое решение (минимальные изменения)
Просто добавьте IF ноду:
- После "Postgres PGVector Store"
- Условие:
{{ $json.length }}equals0 - В ветке TRUE добавьте Set ноду с дефолтными значениями
- Используйте Merge ноду для объединения веток
Полезные проверки для Code Node
// Проверка разных вариантов структуры ответа
const hasDocuments = $json.documents && $json.documents.length > 0;
const hasMetadatas = $json.metadatas && $json.metadatas.length > 0;
const hasIds = $json.ids && $json.ids.length > 0;
const hasOutput = $json.output && $json.output.length > 0;
const isEmpty = !hasDocuments && !hasMetadatas && !hasIds && !hasOutput;
Используйте isEmpty для проверки и обработки.