81 lines
2.8 KiB
JavaScript
81 lines
2.8 KiB
JavaScript
|
|
// 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
|
|||
|
|
}
|
|||
|
|
}));
|