#!/usr/bin/env node
// Тест векторного RAG с OpenAI эмбеддингами
import { VectorRAGService } from '../dist/rag/vector-rag-service.js';
async function testVectorRAG() {
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: Добавление документа с векторами...');
await vectorRAG.addDocument(
'file:///test/vector-rag-test.md',
`# Векторный RAG тест
Это тестовый документ для проверки работы векторного RAG с OpenAI эмбеддингами.
## Основные функции
- Семантический поиск через векторные эмбеддинги
- Автоматическое разбиение на чанки
- OpenAI text-embedding-3-small модель
- Косинусное сходство для ранжирования
## Технологии
- OpenAI Embeddings API
- SQLite с векторными данными
- Docker контейнер
- Node.js интеграция
## Преимущества векторного поиска
- Понимает семантику, а не только ключевые слова
- Находит похожие концепции
- Работает с синонимами и перефразировками
- Высокая точность результатов
Этот документ демонстрирует возможности современного RAG с векторами.`,
'Векторный RAG тест'
);
console.log('✅ Документ добавлен с векторами\n');
// Тест 2: Семантический поиск
console.log('🔍 Тест 2: Семантический поиск...');
const searchResults = await vectorRAG.search('семантический поиск и векторы', 3);
console.log(`✅ Найдено результатов: ${searchResults.length}`);
searchResults.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title} (${result.uri})`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
console.log(` Текст: ${result.text.substring(0, 100)}...`);
console.log('');
});
// Тест 3: Поиск по концепции
console.log('🧠 Тест 3: Поиск по концепции...');
const conceptResults = await vectorRAG.search('искусственный интеллект и машинное обучение', 2);
console.log(`✅ Найдено результатов: ${conceptResults.length}`);
conceptResults.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title}`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
console.log(` Текст: ${result.text.substring(0, 80)}...`);
console.log('');
});
// Тест 4: Статистика документов
console.log('📊 Тест 4: Статистика документов...');
const stats = await vectorRAG.getDocumentStats();
console.log('✅ Статистика получена:');
console.log(` Документов: ${stats.totalDocuments}`);
console.log(` Чанков: ${stats.totalChunks}`);
console.log(` Эмбеддингов: ${stats.totalEmbeddings}`);
console.log(` Модель: ${stats.modelName}`);
console.log('');
// Тест 5: Обновление документа
console.log('✏️ Тест 5: Обновление документа...');
await vectorRAG.addDocument(
'file:///test/vector-rag-test.md',
`# Обновленный векторный RAG тест
Это обновленный тестовый документ для проверки работы векторного RAG.
## Новые функции
- Автоматическое обновление эмбеддингов при изменении
- Улучшенный семантический поиск
- Поддержка различных языков
- Гибридный поиск (векторный + текстовый)
## Технологии
- OpenAI Embeddings API v4
- SQLite с оптимизированными индексами
- Docker контейнер
- Node.js интеграция
- TypeScript типизация
## Расширенные возможности
- Мультиязычная поддержка
- Контекстный поиск
- Ранжирование по релевантности
- Кэширование эмбеддингов
Документ теперь содержит расширенную информацию о возможностях системы.`,
'Обновленный векторный RAG тест'
);
console.log('✅ Документ обновлен с новыми векторами\n');
// Тест 6: Поиск по обновленному контенту
console.log('🔍 Тест 6: Поиск по обновленному контенту...');
const updatedSearchResults = await vectorRAG.search('мультиязычная поддержка', 2);
console.log(`✅ Найдено результатов: ${updatedSearchResults.length}`);
updatedSearchResults.forEach((result, index) => {
console.log(` ${index + 1}. ${result.title}`);
console.log(` Сходство: ${result.similarity.toFixed(4)}`);
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');
}
}
}
testVectorRAG().catch(console.error);