# AIUI Chat AIUI Chat — это современный веб-интерфейс для общения с LLM (большими языковыми моделями), вдохновленный Open WebUI. Поддерживает любой OpenAI-compatible API (OpenAI, Ollama, LM Studio, vLLM и другие). ## Особенности - Чат с поддержкой **streaming** ответов - Управление **историей** диалогов - Настройки API, модели, temperature, max tokens - Загрузка файлов в чат - **Базы знаний** с ChromaDB — загружайте документы и получайте ответы с учетом контекста - Адаптивный дизайн (десктоп + мобильные) - Темная тема в стиле modern tech ## Структура проекта ``` AIUI/ ├── frontend/ # React + TypeScript + Tailwind CSS │ ├── src/ │ │ ├── components/ # UI компоненты │ │ │ ├── chat/ # Компоненты чата │ │ │ ├── layout/ # Layout компоненты │ │ │ └── knowledge/ # Компоненты баз знаний │ │ ├── services/ # API сервисы │ │ ├── stores/ # Zustand stores │ │ ├── types/ # TypeScript типы │ │ └── utils/ # Утилиты │ └── package.json ├── backend/ # Express.js proxy сервер │ └── src/ │ └── index.js # Основной сервер └── package.json # Root package.json ``` ## Быстрый старт ### 1. Установка зависимостей ```bash npm install ``` Это установит зависимости для root, frontend и backend. ### 2. Настройка API Запустите frontend и backend, затем откройте настройки (иконка шестеренки) и укажите: - **API Base URL** — например `https://api.openai.com/v1` или `http://localhost:11434/v1` (для Ollama) - **API Key** — ваш ключ - **Model** — например `gpt-4`, `gpt-3.5-turbo`, `llama2` и т.д. - **Temperature** и **Max Tokens** — по желанию - **System Prompt** — системный промпт - **Embedding Model** — для баз знаний (например `text-embedding-3-small`) - **ChromaDB Directory** — путь к хранилищу ChromaDB ### 3. Запуск ```bash # Запуск backend (порт 3001) npm run dev:backend # В другом терминале — запуск frontend (порт 3000) npm run dev:frontend ``` Frontend запустится на `http://localhost:3000` и будет проксировать API-запросы на backend. ### Production сборка ```bash # Сборка frontend npm run build:frontend # Запуск backend (раздает собранный frontend) npm run start:backend ``` ## Базы знаний (Knowledge Bases) Базы знаний позволяют загружать документы и использовать их как контекст для ответов LLM. ### Как использовать: 1. Откройте панель **Knowledge Bases** (иконка базы данных в сайдбаре) 2. Создайте новую базу знаний 3. Загрузите документы (`.txt`, `.md`, `.pdf`, `.docx`) 4. В сайдбаре выберите базу знаний для текущего диалога 5. Задавайте вопросы — LLM будет использовать контекст из документов ### Технические детали: - Документы разбиваются на **чанки** по ~500 символов с перекрытием - Для каждого чанка генерируется **embedding** через API - Чанки хранятся в **ChromaDB** (векторная база данных) - При отправке сообщения запрос эмбеддится и ищутся похожие чанки через semantic search - Найденный контекст добавляется к системному промпту ## API Endpoints Backend проксирует запросы к OpenAI-compatible API: | Endpoint | Method | Описание | |----------|--------|----------| | `/api/v1/chat/completions` | POST | Streaming чат | | `/api/v1/models` | POST | Список моделей | | `/api/files/upload` | POST | Загрузка файлов | | `/api/files` | GET | Список файлов | | `/api/files/:id` | DELETE | Удаление файла | | `/api/knowledge` | GET | Список баз знаний | | `/api/knowledge` | POST | Создать базу знаний | | `/api/knowledge/:id` | DELETE | Удалить базу знаний | | `/api/knowledge/:id/files` | POST | Добавить файл в базу | | `/api/knowledge/:id/files/:fileId` | DELETE | Удалить файл из базы | | `/api/knowledge/:id/query` | POST | Поиск по базе знаний | ## Технологии - **Frontend**: React 18, TypeScript, Tailwind CSS, Zustand, Lucide icons - **Backend**: Node.js, Express.js, ChromaDB, Multer - **Build**: Vite