Files
crm.clientright.ru/n8n_empty_vector_check_code.js
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

81 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Code Node для проверки и обработки пустого результата векторного поиска
// Добавьте этот Code Node ПОСЛЕ "Postgres PGVector Store"
// Получаем все данные из предыдущей ноды
const inputData = $input.all();
// Проверяем, есть ли результаты
const hasResults = inputData.length > 0 &&
inputData.some(item => {
// Проверяем разные возможные структуры ответа
const data = item.json;
// Если есть поле с результатами
if (data.documents && Array.isArray(data.documents) && data.documents.length > 0) {
return true;
}
// Если есть поле с метаданными
if (data.metadatas && Array.isArray(data.metadatas) && data.metadatas.length > 0) {
return true;
}
// Если есть поле ids
if (data.ids && Array.isArray(data.ids) && data.ids.length > 0) {
return true;
}
// Если есть поле output (для langchain)
if (data.output && Array.isArray(data.output) && data.output.length > 0) {
return true;
}
// Если данные сами по себе есть
if (data && typeof data === 'object' && Object.keys(data).length > 0) {
// Проверяем, что это не пустой объект
if (Object.values(data).some(val => val !== null && val !== undefined && val !== '')) {
return true;
}
}
return false;
});
if (!hasResults) {
// Если результатов нет - возвращаем структурированный ответ с флагом
return [{
json: {
// Флаги для обработки
isEmpty: true,
hasResults: false,
error: 'no_vector_results',
// Сообщение для логирования
message: 'Векторный поиск не нашел похожих документов',
// Сохраняем исходные данные для дальнейшей обработки
originalChatInput: $('классификатор')?.item?.json?.chatInput || '',
originalProblem: $('классификатор')?.item?.json?.output?.problem || '',
// Пустые массивы для совместимости с дальнейшими нодами
documents: [],
metadatas: [],
ids: [],
output: [],
// Метаданные для fallback логики
useFallback: true,
fallbackReason: 'no_vector_match'
}
}];
}
// Если есть результаты - возвращаем как есть, но добавляем флаг
return inputData.map(item => ({
json: {
...item.json,
isEmpty: false,
hasResults: true
}
}));