К документации
Руководство 01

Начало работы

Simmetric Chat — это локальная AI-чат-платформа, способная работать автономно (air-gap): она работает без подключения к внешним облачным сервисам, с локальной LLM (Ollama), локальными эмбеддингами (Xenova) и локальной векторной базой (LanceDB). При настр…

3 мин чтения

Simmetric Chat — это локальная AI-чат-платформа, способная работать автономно (air-gap): она работает без подключения к внешним облачным сервисам, с локальной LLM (Ollama), локальными эмбеддингами (Xenova) и локальной векторной базой (LanceDB). При настройке она также может использовать облачных провайдеров (OpenAI, Anthropic, OpenRouter) и удалённую векторную базу (Qdrant).

Предварительные требования

  • Node.js ≥ 24 и pnpm 11.24.0 (менеджер монорепозитория; `corepack enable && corepack prepare [email protected] --activate`)
  • PostgreSQL 16 (основная база данных)
  • Ollama (необязательно, но рекомендуется для локальной LLM) - https://ollama.com
  • Docker + Docker Compose (для контейнерного развёртывания, см. 09 - Deployment)

Проверка:

bash
node -v && pnpm -v && psql --version

Установка (локальная разработка)

bash
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm install

Монорепозиторий использует pnpm workspaces + Turborepo. Пакеты находятся в packages/: shared, server, frontend, collector, widget, плюс десктопное приложение src-tauri/.

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

Все пакеты читают `.env` в корне репозитория (единственный файл конфигурации времени выполнения; старый уровень .env на пакет удалён: приоритет process.env > корневой .env > значения по умолчанию в коде). Создайте минимальный файл:

bash
cp .env.example .env

Обязательные секреты (JWT_SECRET, COLLECTOR_SECRET) и ключ виджета:

env
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434

WIDGET_API_KEY требуется сервису виджета (собственная Zod-схема завершает процесс без него); сервер регистрирует его как API-ключ учётной записи widget-service при запуске (идемпотентно). Опционально в разработке: API_KEY_HMAC_SECRET (ключи API sk- остаются непригодными, пока он не задан) и ENCRYPTION_KEY (запасной вариант scryptSync(JWT_SECRET); обязателен в продакшене). Отсутствие LICENSE_KEY означает Community-сборку.

Полная таблица переменных окружения: 03 - Configuration.

База данных

Создайте базу данных PostgreSQL (например, docker compose -f docker/docker-compose.infra.yml up -d postgres), затем сгенерируйте клиент Prisma, примените миграции и сид:

bash
pnpm db:generate                  # генерирует клиент Prisma (+ исправление symlink Prisma 7/pnpm)
pnpm --filter server db:migrate   # применяет миграции (интерактивно)
pnpm --filter server db:seed      # роли по умолчанию (Admin, Superuser, User), разрешения, конфиг, шаблоны

Альтернатива ручному сиду: на пустой базе фронтенд показывает мастер настройки из 4 шагов (админ, LLM-провайдер, векторная база) - либо сервер автоматически сидит bootstrap-админа (SEED_BOOTSTRAP_ADMIN=true по умолчанию, настраивается через SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL, по умолчанию admin / admin123 / [email protected] с mustChangePassword=true). Самостоятельная регистрация закрыта по умолчанию (ALLOW_REGISTRATION=false): пользователей создаёт админ из Settings или через POST /api/auth/admin-register.

Запуск разработки

Одна команда запускает все сервисы через Turborepo:

bash
pnpm dev

Порты по умолчанию:

ServiceПортОписание
frontend5173Vite SPA (React 19), прокси /api → server
server3000Express API + Swagger на /api-docs
collector3210Микросервис приёма документов
widget3211Встраиваемый сервис виджета (Preact)

Откройте http://localhost:5173, войдите под admin / admin123, смените пароль.

Если Ollama не запущена, чаты завершаются ошибкой подключения. Скачайте модель с помощью
ollama pull gemma4:latest && ollama serve или настройте облачного провайдера в
Settings → Providers.

Краткий обзор интерфейса

  • Sidebar - группы, отфильтрованные по ролям: Overview (дашборд), Chat (чаты, проекты, рабочие пространства), Knowledge (документы, база знаний, загрузки), Platform (виджеты, маркетплейс, аналитика - админ), System (журнал событий, SSO - админ/enterprise). Пункты следуют 13 разделам меню RBAC.
  • Chat - потоковая передача токен за токеном, выбор модели на чат (палитра Cmd+K), сравнение бок о бок (Cmd+Shift+M), цитирование RAG, слэш-команда /model.
  • Documents - загрузка перетаскиванием (PDF, DOCX, XLSX, PPTX, TXT, MD, CSV, изображения с OCR), статус pending → processing → completed → failed.
  • Settings - 5 основных вкладок (Профиль, LLM-провайдеры, Оформление, Безопасность, Дополнительно), вложенные подразделы: Providers, LLM & Embedding, Vector DB, API Keys, Roles, Users, MCP Connections, Maintenance, Backups, DLP, Widget (отдельная страница), OCR и т.д.
  • Maintenance - переиндексация RAG в один клик после смены модели эмбеддингов.

Рекомендуемые первые шаги

  1. Настройте провайдера - Settings → Providers: добавьте Ollama (локально) или OpenAI/Anthropic.
  2. Создайте рабочее пространство и проект - документы и чаты привязаны к рабочему пространству.
  3. Загрузите документ - Documents → загрузка; дождитесь статуса completed.
  4. Общайтесь - откройте чат в рабочем пространстве и задавайте вопросы о документе (гибридный RAG).
  5. (Админ) Изучите маркетплейс - установите MCP-сервер, чтобы расширить агента инструментами.

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