50 KiB
Настройка AI Ассистента в DLE
Временный документ для внутреннего анализа
📋 Содержание
- Обзор системы
- Архитектура настроек
- База данных
- Backend API
- Frontend страницы
- Настройка AI провайдеров
- Настройка AI ассистента
- Правила AI (Rules)
- Интеграции (Email, Telegram)
- RAG конфигурация
- Мониторинг системы
Обзор системы
Что это?
Система настройки AI ассистента в DLE — это модульная конфигурация для управления поведением искусственного интеллекта, интеграциями с провайдерами LLM, базами знаний (RAG), и каналами связи.
Ключевые компоненты
┌───────────────────────────────────────────────────────────┐
│ Настройка AI Ассистента в DLE │
├───────────────────────────────────────────────────────────┤
│ │
│ 🤖 AI Провайдеры: │
│ ├── OpenAI (GPT-4, GPT-3.5) │
│ ├── Anthropic (Claude) │
│ ├── Google (Gemini) │
│ └── Ollama (локальные модели) │
│ │
│ ⚙️ Настройки AI: │
│ ├── System Prompt │
│ ├── Выбор LLM модели │
│ ├── Выбор Embedding модели │
│ ├── Выбор RAG-таблиц │
│ ├── Правила (Rules) │
│ └── Настройки RAG поиска │
│ │
│ 📋 Правила (Rules): │
│ ├── JSON конфигурация поведения │
│ ├── Создание/редактирование/удаление │
│ └── Привязка к AI ассистенту │
│ │
│ 🔗 Интеграции: │
│ ├── Email (IMAP + SMTP) │
│ └── Telegram Bot │
│ │
│ 🔍 RAG: │
│ ├── Выбор таблиц для поиска │
│ ├── Настройки поиска (гибридный/семантический) │
│ ├── Порог релевантности │
│ └── Извлечение ключевых слов │
│ │
│ 📊 Мониторинг: │
│ ├── Статус сервисов (Backend, Ollama, Postgres) │
│ ├── Тест RAG-функциональности │
│ └── Отслеживание прогресса │
│ │
└───────────────────────────────────────────────────────────┘
Архитектура настроек
Иерархия настроек
Уровень 1: AI Провайдеры (ai_providers_settings)
├── OpenAI (API Key, Base URL, модели)
├── Anthropic (API Key, модели)
├── Google (API Key, модели)
└── Ollama (Base URL, локальные модели)
Уровень 2: AI Ассистент (ai_assistant_settings)
├── System Prompt
├── Выбранная LLM модель
├── Выбранная Embedding модель
├── Выбранные RAG-таблицы
├── Правила (Rules ID)
├── Telegram Bot ID
├── Email Settings ID
└── Настройки RAG поиска
Уровень 3: Правила AI (ai_assistant_rules)
├── Название
├── Описание
└── JSON конфигурация
Процесс обработки сообщения
1. Пользователь → Сообщение
↓
2. UnifiedMessageProcessor
↓
3. Проверка языка (только русский)
↓
4. Дедупликация (хеш сообщения)
↓
5. Загрузка настроек (aiAssistantSettingsService)
↓
6. Загрузка правил (aiAssistantRulesService)
↓
7. RAG поиск (ragService)
├── Семантический поиск (vector search)
├── Поиск по ключевым словам
└── Гибридный поиск
↓
8. Генерация ответа (generateLLMResponse)
├── System Prompt
├── История разговора
├── Контекст из RAG
└── Правила
↓
9. Ответ → Пользователь
База данных
Таблица: ai_providers_settings
Назначение: Хранение настроек для AI провайдеров (OpenAI, Anthropic, Google, Ollama).
CREATE TABLE IF NOT EXISTS ai_providers_settings (
id SERIAL PRIMARY KEY,
provider_encrypted TEXT, -- Провайдер: openai, anthropic, google, ollama
api_key_encrypted TEXT, -- API ключ (зашифрован)
base_url_encrypted TEXT, -- Base URL для API
selected_model_encrypted TEXT, -- Выбранная LLM модель
embedding_model_encrypted TEXT, -- Выбранная Embedding модель
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
Шифрование: Все чувствительные поля (provider, api_key, base_url, selected_model, embedding_model) зашифрованы с помощью AES-256.
Примеры записей:
[
{
"id": 1,
"provider": "ollama",
"base_url": "http://ollama:11434",
"selected_model": "qwen2.5:7b",
"embedding_model": "mxbai-embed-large:latest"
},
{
"id": 2,
"provider": "openai",
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1",
"selected_model": "gpt-4",
"embedding_model": "text-embedding-ada-002"
}
]
Таблица: ai_assistant_settings
Назначение: Глобальные настройки AI ассистента.
CREATE TABLE IF NOT EXISTS ai_assistant_settings (
id SERIAL PRIMARY KEY,
system_prompt_encrypted TEXT, -- Системный промт
selected_rag_tables INTEGER[], -- Массив ID RAG-таблиц
languages TEXT[], -- Массив поддерживаемых языков
model_encrypted TEXT, -- Выбранная LLM модель
embedding_model_encrypted TEXT, -- Выбранная Embedding модель
rules JSONB, -- Правила (DEPRECATED)
rules_id INTEGER REFERENCES ai_assistant_rules(id), -- Ссылка на правило
telegram_settings_id INTEGER, -- Ссылка на Telegram бота
email_settings_id INTEGER, -- Ссылка на Email настройки
rag_settings JSONB, -- Настройки RAG поиска (NEW)
updated_at TIMESTAMP DEFAULT NOW(),
updated_by INTEGER
);
Новое поле: rag_settings (JSONB)
{
"searchMethod": "hybrid", // "semantic", "keyword", "hybrid"
"maxResults": 5, // Максимальное количество результатов
"relevanceThreshold": 0.1, // Порог релевантности
"keywordExtraction": {
"enabled": true, // Включить извлечение ключевых слов
"minWordLength": 3, // Минимальная длина слова
"maxKeywords": 10, // Максимальное количество ключевых слов
"removeStopWords": true, // Удалять стоп-слова
"language": "ru"
},
"searchWeights": {
"semantic": 70, // Вес семантического поиска (%)
"keyword": 30 // Вес поиска по ключевым словам (%)
},
"advanced": {
"enableFuzzySearch": true, // Нечеткий поиск
"enableStemming": true, // Стемминг слов
"enableSynonyms": false // Поиск синонимов
}
}
Пример записи:
{
"id": 1,
"system_prompt": "Вы — полезный ассистент. Отвечайте на русском языке.",
"selected_rag_tables": [1, 3],
"languages": ["ru"],
"model": "qwen2.5:7b",
"embedding_model": "mxbai-embed-large:latest",
"rules_id": 2,
"telegram_settings_id": 1,
"email_settings_id": 1,
"rag_settings": { /* см. выше */ }
}
Таблица: ai_assistant_rules
Назначение: Наборы правил для управления поведением AI.
CREATE TABLE IF NOT EXISTS ai_assistant_rules (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL, -- Название набора правил
description TEXT, -- Описание правила
rules JSONB NOT NULL, -- JSON конфигурация
rules_encrypted TEXT, -- Зашифрованная версия правил (NEW)
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW()
);
Формат правил (JSON):
{
"checkUserTags": true, // Проверять теги пользователя
"searchRagFirst": true, // Искать в RAG сначала
"generateIfNoRag": true, // Генерировать ответ, если нет RAG
"requireAdminApproval": false, // Требовать одобрения админа
"maxTokens": 500, // Максимальное количество токенов
"temperature": 0.7, // Температура генерации
"customInstructions": "..." // Дополнительные инструкции
}
Примеры правил:
[
{
"id": 1,
"name": "Строгий режим",
"description": "Только ответы из базы знаний, без генерации",
"rules": {
"checkUserTags": true,
"searchRagFirst": true,
"generateIfNoRag": false
}
},
{
"id": 2,
"name": "Гибридный режим",
"description": "RAG + генерация при необходимости",
"rules": {
"checkUserTags": true,
"searchRagFirst": true,
"generateIfNoRag": true,
"temperature": 0.7
}
}
]
Backend API
1. Настройки AI провайдеров
GET /settings/ai-settings/:provider
Получить настройки провайдера (openai, anthropic, google, ollama).
Требования: Авторизация + Admin права
Ответ:
{
"success": true,
"settings": {
"provider": "ollama",
"api_key": null,
"base_url": "http://ollama:11434",
"selected_model": "qwen2.5:7b",
"embedding_model": "mxbai-embed-large:latest"
}
}
PUT /settings/ai-settings/:provider
Сохранить/обновить настройки провайдера.
Требования: Admin права (requireAdmin)
Тело запроса:
{
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1",
"selected_model": "gpt-4",
"embedding_model": "text-embedding-ada-002"
}
DELETE /settings/ai-settings/:provider
Удалить настройки провайдера.
Требования: Admin права
GET /settings/ai-settings/:provider/models
Получить список доступных моделей для провайдера.
Требования: Admin права
Ответ:
{
"success": true,
"models": [
{ "id": "gpt-4", "name": "GPT-4" },
{ "id": "gpt-3.5-turbo", "name": "GPT-3.5 Turbo" }
]
}
POST /settings/ai-settings/:provider/verify
Проверить валидность API ключа.
Требования: Admin права
Тело запроса:
{
"api_key": "sk-...",
"base_url": "https://api.openai.com/v1"
}
Ответ:
{
"success": true
}
2. Настройки AI ассистента
GET /settings/ai-assistant
Получить настройки AI ассистента.
Требования: Admin права
Ответ:
{
"success": true,
"settings": {
"id": 1,
"system_prompt": "Вы — полезный ассистент.",
"selected_rag_tables": [1, 3],
"model": "qwen2.5:7b",
"embedding_model": "mxbai-embed-large:latest",
"rules_id": 2,
"telegram_settings_id": 1,
"email_settings_id": 1,
"ragSettings": {
"searchMethod": "hybrid",
"maxResults": 5
}
}
}
PUT /settings/ai-assistant
Сохранить/обновить настройки AI ассистента.
Требования: Admin права
Тело запроса:
{
"system_prompt": "Вы — полезный ассистент.",
"selected_rag_tables": [1],
"model": "qwen2.5:7b",
"embedding_model": "mxbai-embed-large:latest",
"rules_id": 2,
"telegram_settings_id": 1,
"email_settings_id": 1,
"ragSettings": {
"searchMethod": "hybrid",
"maxResults": 5,
"relevanceThreshold": 0.1
}
}
Обработка на Backend:
// Преобразование selected_rag_tables в массив
let { selected_rag_tables, ...rest } = req.body;
if (typeof selected_rag_tables === 'string') {
try {
selected_rag_tables = JSON.parse(selected_rag_tables);
} catch {
selected_rag_tables = [Number(selected_rag_tables)];
}
}
if (!Array.isArray(selected_rag_tables)) {
selected_rag_tables = [Number(selected_rag_tables)];
}
selected_rag_tables = selected_rag_tables.map(Number);
3. Правила AI
GET /settings/ai-assistant-rules
Получить все наборы правил.
Требования: Admin права
Ответ:
{
"success": true,
"rules": [
{
"id": 1,
"name": "Строгий режим",
"description": "Только ответы из базы знаний",
"rules": { "checkUserTags": true, "generateIfNoRag": false },
"created_at": "2025-01-15T10:00:00Z",
"updated_at": "2025-01-15T10:00:00Z"
}
]
}
GET /settings/ai-assistant-rules/:id
Получить правило по ID.
Требования: Admin права
POST /settings/ai-assistant-rules
Создать новое правило.
Требования: Admin права
Тело запроса:
{
"name": "Новое правило",
"description": "Описание правила",
"rules": {
"checkUserTags": true,
"searchRagFirst": true,
"generateIfNoRag": true
}
}
PUT /settings/ai-assistant-rules/:id
Обновить правило.
Требования: Admin права
DELETE /settings/ai-assistant-rules/:id
Удалить правило.
Требования: Admin права
4. Ollama (локальные модели)
GET /ollama/status
Проверить статус Ollama.
Требования: Авторизация
Ответ:
{
"connected": true,
"message": "Ollama is running",
"models": 3,
"availableModels": ["qwen2.5:7b", "llama2:7b", "mistral:7b"]
}
GET /ollama/models
Получить список установленных моделей.
Требования: Авторизация
Ответ:
{
"models": [
{
"name": "qwen2.5:7b",
"id": "qwen2.5:7b",
"size": 4500000000,
"modified": "2025-01-15T10:00:00Z"
}
]
}
POST /ollama/install
Установить модель.
Требования: Авторизация
Тело запроса:
{
"model": "llama2:7b"
}
Ответ (немедленный):
{
"success": true,
"message": "Installation of llama2:7b started",
"processId": 12345
}
Примечание: Установка происходит в фоне, не блокирует запрос.
DELETE /ollama/models/:modelName
Удалить модель.
Требования: Авторизация
5. Интеграции
GET /settings/email-settings — Получить настройки Email
PUT /settings/email-settings — Обновить настройки Email
DELETE /settings/email-settings — Удалить настройки Email
POST /settings/email-settings/test-smtp — Тест SMTP
POST /settings/email-settings/test-imap — Тест IMAP
GET /settings/email-settings/list — Список всех Email настроек
Telegram
GET /settings/telegram-settings — Получить настройки Telegram
PUT /settings/telegram-settings — Обновить настройки Telegram
DELETE /settings/telegram-settings — Удалить настройки Telegram
GET /settings/telegram-settings/list — Список всех Telegram ботов
Frontend страницы
1. Главная страница интеграций
Путь: /settings/ai
Компонент: AiSettingsView.vue
Блоки интеграций:
┌─────────────────────────────────────────────────────┐
│ Интеграции │
├─────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│
│ │ OpenAI │ │ Ollama │ │ Telegram ││
│ │ │ │ │ │ ││
│ │ [Подробнее]│ │ [Подробнее]│ │ [Подробнее]││
│ └─────────────┘ └─────────────┘ └─────────────┘│
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│
│ │ Email │ │База данных │ │ИИ-ассистент ││
│ │ │ │ │ │ ││
│ │ [Подробнее]│ │ [Подробнее]│ │ [Подробнее]││
│ └─────────────┘ └─────────────┘ └─────────────┘│
│ │
└─────────────────────────────────────────────────────┘
Навигация:
/settings/ai/openai→ Настройки OpenAI/settings/ai/ollama→ Настройки Ollama/settings/ai/telegram→ Настройки Telegram/settings/ai/email→ Настройки Email/settings/ai/database→ Настройки БД/settings/ai/assistant→ Настройки AI ассистента
2. Настройки AI провайдера
Путь: /settings/ai/:provider
Компонент: AIProviderSettings.vue
Форма настроек:
┌──────────────────────────────────────────────────────────┐
│ OpenAI [×] │
├──────────────────────────────────────────────────────────┤
│ │
│ Введите OpenAI API Key и (опционально) Base URL. │
│ │
│ API Key: │
│ ┌────────────────────────────────────────────────────┐ │
│ │ sk-... │ │
│ └────────────────────────────────────────────────────┘ │
│ [Verify] ✔️ │
│ │
│ Base URL: │
│ ┌────────────────────────────────────────────────────┐ │
│ │ https://api.openai.com/v1 │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Модель (LLM): │
│ ┌────────────────────────────────────────────────────┐ │
│ │ gpt-4 ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Embeddings-модель: │
│ ┌────────────────────────────────────────────────────┐ │
│ │ text-embedding-ada-002 ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ [Сохранить] [Удалить ключ] [Закрыть] │
│ │
│ ✅ Сохранено! │
└──────────────────────────────────────────────────────────┘
Логика работы:
-
Загрузка настроек: При монтировании компонента загружаются сохраненные настройки через
GET /settings/ai-settings/:provider. -
Verify: Проверка валидности API ключа через
POST /settings/ai-settings/:provider/verify. -
Загрузка моделей: После успешной верификации загружаются доступные модели через
GET /settings/ai-settings/:provider/modelsили/ollama/models(для Ollama). -
Сохранение: Сохранение настроек через
PUT /settings/ai-settings/:provider. -
Удаление: Удаление настроек через
DELETE /settings/ai-settings/:provider.
Особенности Ollama:
- Не требуется API Key
- Только Base URL
- Модели загружаются через
/ollama/models
3. Настройки AI ассистента
Путь: /settings/ai/assistant
Компонент: AiAssistantSettings.vue
Основная форма настроек:
┌──────────────────────────────────────────────────────────┐
│ ИИ-ассистент: интеграция и настройки [×] │
├──────────────────────────────────────────────────────────┤
│ │
│ Системный промт │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Вы — полезный ассистент. Отвечайте на русском. │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ 📋 Плейсхолдеры пользовательских таблиц │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Плейсхолдер | Столбец | Таблица │ │
│ ├────────────────────────────────────────────────────┤ │
│ │ { email } | Email | Контакты [Ред.] │ │
│ │ { phone } | Телефон | Контакты [Ред.] │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ LLM-модель │
│ ┌────────────────────────────────────────────────────┐ │
│ │ qwen2.5:7b (ollama) ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Embedding-модель │
│ ┌────────────────────────────────────────────────────┐ │
│ │ mxbai-embed-large:latest (ollama) ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Выбранные RAG-таблицы │
│ ┌────────────────────────────────────────────────────┐ │
│ │ FAQ (ID: 1) ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Набор правил │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Гибридный режим ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ [Создать] [Редактировать] [Удалить] │
│ │
│ Описание: RAG + генерация при необходимости │
│ ┌────────────────────────────────────────────────────┐ │
│ │ { │ │
│ │ "checkUserTags": true, │ │
│ │ "searchRagFirst": true, │ │
│ │ "generateIfNoRag": true │ │
│ │ } │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Telegram-бот │
│ ┌────────────────────────────────────────────────────┐ │
│ │ @mybot ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Email для связи │
│ ┌────────────────────────────────────────────────────┐ │
│ │ support@example.com ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ 🔍 Настройки RAG поиска │
│ (см. ниже) │
│ │
│ [Сохранить] [Отмена] │
└──────────────────────────────────────────────────────────┘
Настройки RAG поиска
Блок в форме AI ассистента:
┌──────────────────────────────────────────────────────────┐
│ 🔍 Настройки RAG поиска │
├──────────────────────────────────────────────────────────┤
│ │
│ Метод поиска │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Гибридный поиск ▼ │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Максимальное количество результатов поиска │
│ ┌─────┐ │
│ │ 5 │ │
│ └─────┘ │
│ │
│ Порог релевантности (0.1) │
│ ├───────────●──────────────────────────────────────┤ │
│ 0.01 1.0 │
│ │
│ 🔑 Извлечение ключевых слов │
│ ☑ Включить извлечение ключевых слов │
│ │
│ Минимальная длина слова: 3 │
│ Максимальное количество ключевых слов: 10 │
│ ☑ Удалять стоп-слова │
│ │
│ ⚖️ Веса поиска (для гибридного) │
│ Семантический поиск: 70% │
│ ├───────────────●────────────────────────────────┤ │
│ │
│ Поиск по ключевым словам: 30% │
│ ├───────●────────────────────────────────────────┤ │
│ │
│ ⚙️ Дополнительные настройки │
│ ☑ Нечеткий поиск │
│ ☑ Стемминг слов │
│ ☐ Поиск синонимов │
│ │
└──────────────────────────────────────────────────────────┘
Параметры RAG настроек:
| Параметр | Тип | Значение по умолчанию | Описание |
|---|---|---|---|
searchMethod |
string |
"hybrid" |
Метод поиска: semantic, keyword, hybrid |
maxResults |
number |
5 |
Максимальное количество результатов (1-20) |
relevanceThreshold |
number |
0.1 |
Порог релевантности (0.01-1.0) |
keywordExtraction.enabled |
boolean |
true |
Включить извлечение ключевых слов |
keywordExtraction.minWordLength |
number |
3 |
Минимальная длина слова (2-10) |
keywordExtraction.maxKeywords |
number |
10 |
Максимальное количество ключевых слов (5-20) |
keywordExtraction.removeStopWords |
boolean |
true |
Удалять стоп-слова |
searchWeights.semantic |
number |
70 |
Вес семантического поиска (%) |
searchWeights.keyword |
number |
30 |
Вес поиска по ключевым словам (%) |
advanced.enableFuzzySearch |
boolean |
true |
Нечеткий поиск |
advanced.enableStemming |
boolean |
true |
Стемминг слов |
advanced.enableSynonyms |
boolean |
false |
Поиск синонимов |
Сохранение на Backend:
const settingsToSave = { ...settings.value };
settingsToSave.ragSettings = ragSettings.value;
await axios.put('/settings/ai-assistant', settingsToSave);
Правила AI (Rules)
Редактор правил
Компонент: RuleEditor.vue
Модальное окно:
┌──────────────────────────────────────────────────────────┐
│ Создать набор правил │
├──────────────────────────────────────────────────────────┤
│ │
│ Название │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Строгий режим │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Описание │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Только ответы из базы знаний, без генерации │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ Правила (JSON) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ { │ │
│ │ "checkUserTags": true, │ │
│ │ "searchRagFirst": true, │ │
│ │ "generateIfNoRag": false │ │
│ │ } │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ [Сохранить] [Отмена] │
└──────────────────────────────────────────────────────────┘
Логика работы:
- Создание:
POST /settings/ai-assistant-rulesс{ name, description, rules } - Редактирование:
PUT /settings/ai-assistant-rules/:idс{ name, description, rules } - Валидация: Проверка JSON перед сохранением
async function save() {
let rules;
try {
rules = JSON.parse(rulesJson.value);
} catch (e) {
error.value = 'Ошибка в формате JSON!';
return;
}
if (props.rule && props.rule.id) {
await axios.put(`/settings/ai-assistant-rules/${props.rule.id}`, { name, description, rules });
} else {
await axios.post('/settings/ai-assistant-rules', { name, description, rules });
}
emit('close', true);
}
Примеры правил
1. Строгий режим (только RAG)
{
"checkUserTags": true,
"searchRagFirst": true,
"generateIfNoRag": false,
"maxTokens": 300
}
Применение: Когда нужны только точные ответы из базы знаний.
2. Гибридный режим (RAG + генерация)
{
"checkUserTags": true,
"searchRagFirst": true,
"generateIfNoRag": true,
"temperature": 0.7,
"maxTokens": 500
}
Применение: Баланс между точностью и гибкостью.
3. Креативный режим
{
"checkUserTags": false,
"searchRagFirst": false,
"generateIfNoRag": true,
"temperature": 0.9,
"maxTokens": 1000,
"customInstructions": "Будьте креативны и дружелюбны"
}
Применение: Для общения с пользователями, когда нужна более свободная генерация.
Мониторинг системы
Компонент: SystemMonitoring.vue
Интерфейс мониторинга:
┌──────────────────────────────────────────────────────────┐
│ 🔍 Мониторинг системы │
│ [🔄 Обновить статус] Последнее обновление: 12:34:56 │
├──────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ ● Backend │ │ ● Postgres │ │ ● Ollama │ │
│ │ │ │ │ │ │ │
│ │ Статус: │ │ Статус: │ │ Статус: │ │
│ │ Работает │ │ Работает │ │ Работает │ │
│ │ │ │ │ │ Модели: 3 │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ │
│ │ ● Vector │ │
│ │ Search │ │
│ │ │ │
│ │ Статус: │ │
│ │ Работает │ │
│ └──────────────┘ │
│ │
│ 🧠 Тест RAG-функциональности │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Выберите RAG-таблицу: │ │
│ │ FAQ (ID: 1) ▼ [🔄] │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Как работает ИИ-ассистент? │ │
│ └────────────────────────────────────────────────────┘ │
│ [Тестировать RAG] │
│ │
│ 🔍 Ищем ответ в базе знаний... │
│ ├──────────────────────────●───────────────────────┤ │
│ 75% │
│ │
│ ✅ Успешно! │
│ Таблица: FAQ │
│ Вопрос: "Как работает ИИ-ассистент?" │
│ Ответ: "ИИ-ассистент использует..." │
│ Score: -120 │
│ │
└──────────────────────────────────────────────────────────┘
Статусы сервисов
Backend: GET /monitoring
{
"services": {
"backend": {
"status": "ok"
},
"postgres": {
"status": "ok"
},
"ollama": {
"status": "ok",
"models": 3
},
"vectorSearch": {
"status": "ok"
}
}
}
Цвета статусов:
- 🟢
ok/healthy— Зеленый - 🟡
warning— Желтый - 🔴
error— Красный - ⚫
unknown— Серый
Тест RAG
Логика теста:
- Выбор таблицы: Загружаются все таблицы с
is_rag_source_id === 1 - Ввод вопроса: Пользователь вводит тестовый вопрос
- Запрос:
POST /rag/answerс{ tableId, question, product: null } - Прогресс-бар: Симуляция прогресса для UX
- Результат: Отображение ответа и score
const testRAG = async () => {
ragTesting.value = true;
ragResult.value = null;
ragProgress.value = 0;
ragStatus.value = '🔍 Ищем ответ в базе знаний...';
const progressInterval = setInterval(() => {
if (ragProgress.value < 90) {
ragProgress.value += Math.random() * 15;
}
}, 1000);
try {
ragStatus.value = '🤖 Генерируем ответ с помощью ИИ...';
const response = await axios.post('/rag/answer', {
tableId: selectedRagTable.value,
question: ragQuestion.value,
product: null
});
clearInterval(progressInterval);
ragProgress.value = 100;
ragStatus.value = '✅ Готово!';
ragResult.value = {
success: true,
answer: response.data.answer,
score: response.data.score
};
} catch (error) {
clearInterval(progressInterval);
ragProgress.value = 0;
ragResult.value = {
success: false,
error: error.response?.data?.error || error.message
};
}
ragTesting.value = false;
};
Заключение
Система настройки AI ассистента в DLE — это комплексная платформа для управления:
✅ AI провайдерами (OpenAI, Anthropic, Google, Ollama)
✅ Настройками ассистента (промты, модели, RAG-таблицы)
✅ Правилами поведения (JSON конфигурация)
✅ Интеграциями (Email, Telegram)
✅ RAG конфигурацией (гибридный поиск, ключевые слова)
✅ Мониторингом (статусы сервисов, тестирование)
Все настройки зашифрованы (AES-256), имеют детальные права доступа (только админы), и предоставляют гибкую конфигурацию для различных сценариев использования.
© 2024-2025 Тарабанов Александр Викторович. Все права защищены.
Версия документа: 1.0.0
Дата создания: October 25, 2025
Статус: Временный (для внутреннего использования)