Files
DLE/backend/tests/ragService.test.js

72 lines
3.6 KiB
JavaScript
Raw Permalink 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.

/**
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
* All rights reserved.
*
* This software is proprietary and confidential.
* Unauthorized copying, modification, or distribution is prohibited.
*
* For licensing inquiries: info@hb3-accelerator.com
* Website: https://hb3-accelerator.com
* GitHub: https://github.com/HB3-ACCELERATOR
*/
// Принудительно устанавливаем URL для Docker-сети
process.env.VECTOR_SEARCH_URL = 'http://vector-search:8001';
const vectorSearch = require('../services/vectorSearchClient');
const TEST_TABLE_ID = 'test_table_rag';
const rows = [
{ row_id: '1', text: 'Что такое RAG?', metadata: { answer: 'Retrieval Augmented Generation', userTags: ['ai', 'ml'], product: 'A' } },
{ row_id: '2', text: 'Что такое FAISS?', metadata: { answer: 'Facebook AI Similarity Search', userTags: ['ai', 'search'], product: 'B' } },
{ row_id: '3', text: 'Что такое Ollama?', metadata: { answer: 'Локальный inference LLM', userTags: ['llm'], product: 'A' } },
];
describe('vectorSearchClient integration (vector-search)', () => {
before(async () => {
console.log('Загружаем тестовые данные...');
console.log('VECTOR_SEARCH_URL:', process.env.VECTOR_SEARCH_URL);
await vectorSearch.rebuild(TEST_TABLE_ID, rows);
console.log('Тестовые данные загружены');
});
after(async () => {
console.log('Очищаем тестовые данные...');
await vectorSearch.remove(TEST_TABLE_ID, rows.map(r => r.row_id));
console.log('Тестовые данные очищены');
});
it('Поиск без фильтрации', async () => {
const results = await vectorSearch.search(TEST_TABLE_ID, 'Что такое RAG?', 1);
console.log('Результаты поиска:', results);
if (!results || results.length === 0) throw new Error('Нет результатов поиска');
if (results[0].metadata.answer !== 'Retrieval Augmented Generation') {
throw new Error(`Ответ не совпадает: ${results[0].metadata.answer}`);
}
});
it('Поиск с фильтрацией по продукту (должен найти Ollama)', async () => {
const results = await vectorSearch.search(TEST_TABLE_ID, 'Что такое Ollama?', 3);
console.log('Результаты поиска Ollama:', results);
if (!results || results.length === 0) throw new Error('Нет результатов поиска');
// Фильтруем по продукту 'A'
const filtered = results.filter(r => r.metadata.product === 'A');
if (filtered.length === 0) throw new Error('Нет результатов с продуктом A');
if (filtered[0].metadata.answer !== 'Локальный inference LLM') {
throw new Error(`Ответ не совпадает: ${filtered[0].metadata.answer}`);
}
});
it('Проверка порога score', async () => {
const results = await vectorSearch.search(TEST_TABLE_ID, 'Что такое Ollama?', 3);
console.log('Результаты поиска с порогом:', results);
if (!results || results.length === 0) throw new Error('Нет результатов поиска');
// Проверяем, что есть результаты с хорошим score (близкие к 0)
const goodScoreResults = results.filter(r => Math.abs(r.score) < 10);
if (goodScoreResults.length === 0) throw new Error('Нет результатов с хорошим score');
console.log('Результаты с хорошим score:', goodScoreResults.length);
});
});