Предметная областьМодулиAI-ассистентСтатус

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.tsAPI: GET история, POST чат, DELETE сброс
app/api/chat/models/route.tsAPI: список моделей по провайдеру
app/api/chat/export/route.tsAPI: экспорт истории чата в JSON
components/workspace/chat-view.tsxUI компонент чата
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.tsxDispatch actions → React state
prisma/schema.prismaМодель ChatMessage

Переменные окружения

ПеременнаяОписание
OPENAI_API_KEYКлюч OpenAI API
OPENAI_PROXY_URLHTTP прокси для OpenAI (опционально)
OPENAI_CHAT_MODELМодель для Cloud (по умолчанию gpt-4o-mini)
LMSTUDIO_BASE_URLURL LM Studio (по умолчанию http://localhost:1234/v1)
OLLAMA_BASE_URLURL 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)

ПровайдерМодельКачествоПримечание
OllamaQwen3 4B Instruct (Q6_K)ХорошоОсновная, 45K контекст
Cloudgpt-5-nanoОтличноDEPRECATED — будет удалён
LM StudioDEPRECATED — будет удалён

Следующие шаги

  • Расширить actions: календарный план, персонал, общие издержки (реализовано)
  • Расширить actions: займы, материалы и комплектующие (реализовано)
  • update_loan — редактирование существующего займа (сумма, ставка, срок). Сейчас модель пытается использовать update_loan, но такого action нет — создаётся дубликат через create_loan
  • update_employee, update_expense, update_material — аналогичные actions для редактирования
  • Расширить actions: план сбыта
  • Посимвольный стриминг (частичный парсинг JSON)
  • Undo для применённых actions
  • Markdown рендеринг в пузырях чата