Современное приложение для чата с AI, построенное на Next.js 16, Vercel AI SDK и Bun SQLite. Интерфейс в стиле ChatGPT с управлением беседами, сохранением сообщений и интеграцией с Excel.
- AI чат с поддержкой потоковых ответов
- Управление несколькими беседами (threads)
- Сохранение всех сообщений в локальной базе данных SQLite
- Интеграция с Excel файлами: чтение, запись, обновление данных
- Система упоминаний ячеек через синтаксис @Sheet!A1
- Визуальный интерфейс для выбора диапазонов в таблицах
- Подтверждение опасных операций через UI диалоги
- Обработка ошибок и таймаутов
- Next.js 16 (App Router)
- TypeScript
- Bun 1.1+
- SQLite (bun:sqlite)
- Vercel AI SDK
- Tailwind CSS
- Lucide React (иконки)
- SheetJS (работа с Excel)
- Установленный Bun (https://bun.sh)
- API ключ Google AI
- Клонируйте репозиторий:
git clone https://github.com/firdavsdev07/chat-ai
cd chat-ai- Установите зависимости:
bun install- Создайте файл
.env.localи добавьте ваш API ключ:
OPENAI_API_KEY=your_api_key_here- Убедитесь, что файл
data/example.xlsxсуществует в корне проекта.
Запустите development сервер:
bun devОткройте http://localhost:3000 в браузере.
src/
├── app/
│ ├── api/ # API маршруты (Chat, Threads, Excel)
│ └── page.tsx # Главная страница
├── components/ # React компоненты
│ ├── ChatArea.tsx # Основной чат
│ ├── MentionInput.tsx # Ввод с поддержкой @mentions
│ ├── TableModal.tsx # Модальное окно с таблицей Excel
│ └── tools/ # Компоненты для инструментов AI
├── hooks/ # Пользовательские хуки
├── lib/
│ ├── db.ts # Подключение к SQLite
│ ├── excel.ts # Функции для работы с Excel
│ ├── actions.ts # Server Actions
│ └── tools.ts # Определения инструментов (Zod схемы)
- confirmAction - запрос подтверждения перед критическими операциями
- listSheets / getRange - чтение данных из Excel
- updateExcelCell - изменение данных в Excel (с подтверждением)
- showTable - визуальное отображение данных в таблице
- Список бесед в левой панели с возможностью переключения
- Создание, переименование и удаление бесед
- Сохранение всех сообщений в SQLite базе данных
- Загрузка истории сообщений при переключении беседы
- Интеграция с Vercel AI SDK (useChat) для потоковых ответов
- confirmAction - диалог подтверждения опасных операций
- listSheets - получение списка листов Excel файла
- getRange - чтение диапазона ячеек из таблицы
- updateExcelCell - обновление ячейки (с подтверждением)
- showTable - визуальное отображение таблицы в UI
- Перед update/delete операциями отображается UI диалог
- Кнопки "Подтвердить" / "Отмена"
- Операция выполняется только после явного подтверждения пользователем
- Все изменения в Excel требуют подтверждения
- Подготовлен файл
data/example.xlsxс тремя листами:- Сотрудники - данные о сотрудниках (5 записей)
- Продажи - данные о продажах с формулами (SUM, умножение)
- Склад - остатки товаров с IF формулами
- Чтение данных через tool getRange
- Запись данных через tool updateExcelCell
- Модальное окно для просмотра таблиц
- Выбор ячеек мышью (drag-select)
- Система упоминаний: @Сотрудники!A1:B5
- Вставка упоминаний в поле ввода через Ctrl+M
- Четкое разделение слоев: API / UI / DB / Excel
- Строгая типизация TypeScript для всех компонентов
- Server Actions для выполнения операций
- Zod схемы для валидации параметров tools
- Обработка ошибок и таймаутов
- Русский язык интерфейса
Автоматически создаются две таблицы:
threads- хранение бесед (id, title, created_at, updated_at)messages- хранение сообщений (id, thread_id, role, content, created_at)
Инициализация происходит автоматически при первом запуске.
- Используется локальная SQLite база данных (не подходит для serverless окружений типа Vercel)
- Excel файл захардкожен (
data/example.xlsx) - Для деплоя рекомендуется использовать платформы с поддержкой Bun (Railway, Fly.io)
- Используется встроенная в Bun база данных SQLite, внешняя установка БД не требуется
- Весь код строго типизирован с помощью TypeScript
- Реализована надежная обработка ошибок сети и таймаутов