#!/usr/bin/env node
// Тест обновленного векторного RAG с OpenAI эмбеддингами
import { VectorRAGService } from '../dist/rag/vector-rag-service.js';
async function testVectorRAGV2() {
console.log('🧪 Тестирование обновленного векторного RAG с OpenAI...\n');
const vectorRAG = new VectorRAGService();
try {
// Тест подключения
console.log('🔌 Тест подключения...');
const isConnected = await vectorRAG.testConnection();
if (!isConnected) {
throw new Error('Нет подключения к OpenAI API или базе данных');
}
console.log('✅ Подключение установлено\n');
// Тест 1: Добавление документа с векторами
console.log('📄 Тест 1: Добавление документа с векторами...');
const addResult = await vectorRAG.addDocument({
uri: 'file:///test/vector-rag-test.md',
title: 'Векторный RAG тест',
content: `# Векторный RAG тест
Это тестовый документ для проверки работы векторного RAG с OpenAI эмбеддингами.
## Основные функции
- Семантический поиск через векторные эмбеддинги
- Автоматическое разбиение на чанки
- OpenAI text-embedding-3-small модель
- Косинусное сходство для ранжирования
## Технологии
- OpenAI Embeddings API
- SQLite с векторными данными
- Docker контейнер
- Node.js интеграция
## Преимущества векторного поиска
- Понимает семантику, а не только ключевые слова
- Находит похожие концепции
- Работает с синонимами и перефразировками
- Высокая точность результатов
Этот документ демонстрирует возможности современного RAG с векторами.`,
metadata: {
category: 'test',
language: 'ru',
tags: ['rag', 'vectors', 'openai']
}
});
if (addResult.isErr()) {
throw new Error(`Ошибка добавления документа: ${addResult.error.message}`);
}
console.log(`✅ Документ добавлен с векторами (ID: ${addResult.value})\n`);
// Тест 2: Семантический поиск
console.log('🔍 Тест 2: Семантический поиск...');
const searchResult = await vectorRAG.search({
query: 'семантический поиск и векторы',
limit: 3,
threshold: 0.5
});
if (searchResult.isErr()) {
throw new Error(`Ошибка поиска: ${searchResult.error.message}`);
}
const results = searchResult.value;
console.log(`✅ Найдено результатов: ${results.length}`);
results.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title} (${result.uri})`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
console.log(` Объяснение: ${result.explanation}`);
console.log(` Текст: ${result.text.substring(0, 100)}...`);
console.log('');
});
// Тест 3: Поиск по концепции
console.log('🧠 Тест 3: Поиск по концепции...');
const conceptResult = await vectorRAG.search({
query: 'искусственный интеллект и машинное обучение',
limit: 2,
threshold: 0.3
});
if (conceptResult.isErr()) {
throw new Error(`Ошибка поиска по концепции: ${conceptResult.error.message}`);
}
const conceptResults = conceptResult.value;
console.log(`✅ Найдено результатов: ${conceptResults.length}`);
conceptResults.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title}`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
console.log(` Объяснение: ${result.explanation}`);
console.log(` Текст: ${result.text.substring(0, 80)}...`);
console.log('');
});
// Тест 4: Статистика документов
console.log('📊 Тест 4: Статистика документов...');
const statsResult = await vectorRAG.getDocumentStats();
if (statsResult.isErr()) {
throw new Error(`Ошибка получения статистики: ${statsResult.error.message}`);
}
const stats = statsResult.value;
console.log('✅ Статистика получена:');
console.log(` Документов: ${stats.totalDocuments}`);
console.log(` Чанков: ${stats.totalChunks}`);
console.log(` Эмбеддингов: ${stats.totalEmbeddings}`);
console.log(` Модель: ${stats.modelName}`);
console.log(` Здоровье индекса: ${stats.indexHealth}`);
console.log(` Последняя индексация: ${stats.lastIndexed.toISOString()}`);
console.log('');
// Тест 5: Health Check
console.log('🏥 Тест 5: Health Check...');
const health = await vectorRAG.healthCheck();
console.log('✅ Health Check:');
console.log(` Статус: ${health.status}`);
console.log(` База данных: ${health.checks.database ? '✅' : '❌'}`);
console.log(` Эмбеддинги: ${health.checks.embedding ? '✅' : '❌'}`);
console.log(` Память: ${health.checks.memory ? '✅' : '❌'}`);
console.log(` Время: ${health.timestamp.toISOString()}`);
console.log('');
// Тест 6: Обновление документа
console.log('✏️ Тест 6: Обновление документа...');
const updateResult = await vectorRAG.addDocument({
uri: 'file:///test/vector-rag-test.md',
title: 'Обновленный векторный RAG тест',
content: `# Обновленный векторный RAG тест
Это обновленный тестовый документ для проверки работы векторного RAG.
## Новые функции
- Автоматическое обновление эмбеддингов при изменении
- Улучшенный семантический поиск
- Поддержка различных языков
- Гибридный поиск (векторный + текстовый)
## Технологии
- OpenAI Embeddings API v4
- SQLite с оптимизированными индексами
- Docker контейнер
- Node.js интеграция
- TypeScript типизация
## Расширенные возможности
- Мультиязычная поддержка
- Контекстный поиск
- Ранжирование по релевантности
- Кэширование эмбеддингов
Документ теперь содержит расширенную информацию о возможностях системы.`,
metadata: {
category: 'test',
language: 'ru',
tags: ['rag', 'vectors', 'openai', 'updated'],
version: '2.0'
}
});
if (updateResult.isErr()) {
throw new Error(`Ошибка обновления документа: ${updateResult.error.message}`);
}
console.log(`✅ Документ обновлен с новыми векторами (ID: ${updateResult.value})\n`);
// Тест 7: Поиск по обновленному контенту
console.log('🔍 Тест 7: Поиск по обновленному контенту...');
const updatedSearchResult = await vectorRAG.search({
query: 'мультиязычная поддержка',
limit: 2,
threshold: 0.4
});
if (updatedSearchResult.isErr()) {
throw new Error(`Ошибка поиска по обновленному контенту: ${updatedSearchResult.error.message}`);
}
const updatedResults = updatedSearchResult.value;
console.log(`✅ Найдено результатов: ${updatedResults.length}`);
updatedResults.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title}`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
console.log(` Объяснение: ${result.explanation}`);
console.log(` Метаданные: ${JSON.stringify(result.metadata)}`);
console.log(` Текст: ${result.text.substring(0, 80)}...`);
console.log('');
});
console.log('✨ Все тесты обновленного векторного RAG завершены успешно!');
} catch (error) {
console.error('❌ Ошибка в тестах обновленного векторного RAG:', error.message);
if (error.message.includes('OPENAI_API_KEY')) {
console.log('\n💡 Убедитесь, что OPENAI_API_KEY установлен в .env файле');
}
if (error.message.includes('Нет подключения к базе данных')) {
console.log('\n💡 Убедитесь, что SQLite контейнер запущен:');
console.log(' ./scripts/db.sh start');
console.log(' ./scripts/db.sh init');
}
}
}
testVectorRAGV2().catch(console.error);