Files
crm.clientright.ru/n8n_empty_vector_check_code.js

81 lines
2.8 KiB
JavaScript
Raw Normal View History

// 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
}
}));