AI чат-помощник — текущее состояние
Актуально на: 2026-04-13
Архитектура
Пользователь → ChatView → POST /api/chat → OpenAI / LM Studio / Ollama
↓
JSON structured output
{ text, actions, quickActions }
↓
SSE events → ChatView → подтверждение → React state → автосохранение → БД- Три провайдера: Cloud (OpenAI), LM Studio (локальный), Ollama (локальный/удалённый)
- Один вызов API с
response_format: { type: "json_schema" } - Ответ модели — строгий JSON: текст + действия + кнопки
- Actions показываются как карточки с кнопками “Применить” / “Отклонить”
- Автосохранение workspace (900ms/5s) пишет изменения в БД
- Динамический контекст проекта —
buildProjectContext()формирует актуальное состояние при каждом запросе
Что работает
Действия (actions)
Создание:
add_product— добавить продукт (название, единица, цена)create_employee— добавить должность в план по персоналу (роль, группа, кол-во, зарплата, дата найма)create_expense— добавить статью общих расходов (название, группа, сумма, периодичность)create_investment_stage— добавить этап в календарный план инвестиций (название, стоимость, даты начала/конца)create_material— добавить материал/комплектующее (название, единица, категория)create_loan— добавить займ (название, тип, сумма, ставка, срок)
Редактирование:
update_project_info— обновить название, компанию, отрасль, регион, дату, длительностьupdate_product— переименовать/изменить продукт (oldName → name, unit, price)update_investment_stage— переименовать/изменить этап инвестиций (oldStageName → stageName, stageCost, даты)
Навигация:
navigate_to_section— перейти к разделу бизнес-модели
Контекст проекта (buildProjectContext)
- Статус проекта: прошло X из Y мес., процент выполнения
- Итоги: инвестиции (~2.7 млн), ФОТ (~2.9 млн/мес.), издержки (~1.3 млн/мес.)
- Форматирование чисел: ~2.7 млн вместо 2700000, 8.24% вместо 8.2431999…
- Автоматические warnings: тестовые названия продуктов, займы без суммы, и т.д.
UI
- Чат с историей (хранится в БД, таблица
ChatMessage) - Typing indicator (три точки) пока AI думает
- Карточки подтверждения actions с деталями изменений
- Quick action кнопки от AI
- Кнопка “Начать заново” (soft delete —
deletedAt) - Пустое состояние с подсказками
- Индикатор контекстного окна (круговой прогресс + tooltip со статистикой)
- Экспорт истории чата в JSON
Для админов (role = ADMIN)
- Debug панель: модель, провайдер, токены, latency, сырой ответ, ошибки парсинга
- Переключатель Cloud / LM Studio / Ollama
- Выбор модели из списка (загрузка через GET /api/chat/models)
- Judge score — автооценка качества ответа
Файлы
| Файл | Назначение |
|---|---|
app/api/chat/route.ts | API: GET история, POST чат, DELETE сброс |
app/api/chat/models/route.ts | API: список моделей по провайдеру |
app/api/chat/export/route.ts | API: экспорт истории чата в JSON |
components/workspace/chat-view.tsx | UI компонент чата |
components/workspace/chat/context-indicator.tsx | Индикатор использования контекстного окна |
lib/ai/system-prompt.ts | Системный промпт + buildProjectContext |
lib/ai/action-types.ts | Типы, JSON schema для structured output |
lib/ai/validate-action.ts | Валидация actions перед применением |
app/workspace-client-legacy.tsx | Dispatch actions → React state |
prisma/schema.prisma | Модель ChatMessage |
Переменные окружения
| Переменная | Описание |
|---|---|
OPENAI_API_KEY | Ключ OpenAI API |
OPENAI_PROXY_URL | HTTP прокси для OpenAI (опционально) |
OPENAI_CHAT_MODEL | Модель для Cloud (по умолчанию gpt-4o-mini) |
LMSTUDIO_BASE_URL | URL LM Studio (по умолчанию http://localhost:1234/v1) |
OLLAMA_BASE_URL | URL Ollama API (например https://llms.basegrid.tech/v1) |
OLLAMA_API_KEY | Ключ Ollama (по умолчанию “ollama”) |
OLLAMA_MODEL | Модель Ollama по умолчанию |
Известные ограничения
- Маленькие модели (< 7B) плохо следуют structured output и инструкциям
- DeepSeek R1 — reasoning модель, путается с JSON форматом
- Стриминг текста — не посимвольный, текст появляется целиком после завершения (ограничение json_schema)
- Нет undo — после применения action откатить можно только вручную
- Нет update actions — для займов, персонала, расходов, материалов нет update — модель создаёт дубликаты
- План сбыта — actions пока не поддерживаются
- Ollama context_length — реальный размер контекста доступен только для запущенных моделей (через /api/ps)
Рекомендуемые модели
Основной провайдер: Ollama (серверная установка на llms.basegrid.tech)
| Провайдер | Модель | Качество | Примечание |
|---|---|---|---|
| Ollama | Qwen3 4B Instruct (Q6_K) | Хорошо | Основная, 45K контекст |
| gpt-5-nano | Отлично | DEPRECATED — будет удалён | |
| — | — | DEPRECATED — будет удалён |
Следующие шаги
Расширить actions: календарный план, персонал, общие издержки(реализовано)Расширить actions: займы, материалы и комплектующие(реализовано)- update_loan — редактирование существующего займа (сумма, ставка, срок). Сейчас модель пытается использовать
update_loan, но такого action нет — создаётся дубликат черезcreate_loan - update_employee, update_expense, update_material — аналогичные actions для редактирования
- Расширить actions: план сбыта
- Посимвольный стриминг (частичный парсинг JSON)
- Undo для применённых actions
- Markdown рендеринг в пузырях чата