Files
crm.clientright.ru/n8n_workflow_with_empty_handle.md
Fedor 01c4fe80b5 chore: snapshot current working tree changes
Save all currently accumulated repository changes as a backup snapshot for Gitea so no local work is lost.
2026-03-26 14:19:01 +03:00

4.3 KiB
Raw Blame History

Решение проблемы пустого результата векторного поиска

Проблема

Нода "Postgres PGVector Store" иногда не возвращает результатов, что останавливает workflow.

Решения

Вариант 1: IF нода для проверки (простой)

Структура:

Postgres PGVector Store 
  ↓
IF нода (проверка на пустоту)
  ├─ TRUE (пусто) → Обработка пустого результата
  └─ FALSE (есть данные) → Продолжение workflow

IF нода настройки:

  • Condition 1: {{ $json.length }} equals 0
  • ИЛИ
  • 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

Настройка:

  1. Добавьте Error Trigger ноду
  2. Настройте продолжение workflow при ошибке
  3. В Error Handler установите дефолтные значения

Рекомендуемая структура workflow

1. Классификатор
   ↓
2. Postgres PGVector Store
   ↓
3. Code Node (проверка на пустоту) ← ДОБАВЬТЕ ЭТО
   ↓
4. IF нода (проверка isEmpty)
   ├─ TRUE → Fallback логика / Дефолтные значения
   └─ FALSE → Продолжение с результатами

Быстрое решение (минимальные изменения)

Просто добавьте IF ноду:

  1. После "Postgres PGVector Store"
  2. Условие: {{ $json.length }} equals 0
  3. В ветке TRUE добавьте Set ноду с дефолтными значениями
  4. Используйте 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 для проверки и обработки.