TKBK Studio
TKBK Studio
Внутренний чат с Claude по документам компании: ответы со ссылками на источники и скрытие персональных данных
Закрытый веб-чат для сотрудников: вход по общему паролю (и при желании только для списка email), выбор модели — Claude Sonnet 5 для сложных задач или Claude Haiku 4.5 для быстрых ответов. Работает через TKBK API, никаких зарубежных карт и VPN.
Загрузите регламенты, инструкции, прайсы и договоры в форматах .txt, .md и .pdf — ассистент найдёт нужные фрагменты и ответит со ссылками вида [1], [2] на документ и страницу. Новые сотрудники перестают отвлекать коллег одними и теми же вопросами.
Перед отправкой в нейросеть телефоны, email и номера карт заменяются метками, а в ответе подставляются обратно — данные клиентов не покидают ваш сервер. Переключатель в интерфейсе, включён по умолчанию. История диалогов каждого сотрудника хранится в SQLite на вашем сервере.
Для кого: Компании 5–200 человек: офис, поддержка, продажи, HR, юристы
Ключи и токены не вводятся на сайте — их кладут в файл .env на своём сервере.
TKBK_API_KEYКлюч TKBK API — Получите ключ на https://tkbk.onlineTEAM_PASSWORDПароль для входа — Общий пароль сотрудников, не короче 8 символовALLOWED_EMAILSСписок email сотрудников — Через запятую; пусто — войти может любой, кто знает парольSESSION_SECRETСекрет сессий — Случайная строка от 32 символов; по умолчанию вычисляется из пароля и ключа# {{ASSISTANT_NAME}} — AI-ассистент {{COMPANY}}
Закрытый веб-чат для сотрудников на нейросетях Claude через TKBK API. Отвечает по документам
компании со ссылками на источник и не отправляет в нейросеть персональные данные клиентов.
## Что умеет
- Вход по общему паролю; если задан `ALLOWED_EMAILS`, войти могут только перечисленные сотрудники.
- Выбор модели в интерфейсе: **Claude Sonnet 5** (точнее) или **Claude Haiku 4.5** (быстрее и дешевле).
- База знаний: загрузите `.txt`, `.md`, `.pdf` — ассистент найдёт нужные фрагменты (поиск BM25)
и сошлётся на них: «[1] Регламент отпусков.pdf, стр. 3».
- Маскирование персональных данных: телефоны, email и номера банковских карт заменяются метками
(`[ТЕЛЕФОН_1]`, `[EMAIL_1]`, `[КАРТА_1]`) до отправки в нейросеть и подставляются обратно в ответ.
Переключатель «Скрывать персональные данные» — в шапке чата.
- История диалогов у каждого сотрудника своя, хранится в SQLite на вашем сервере.
## Как устроено
```
public/ интерфейс: index.html, app.js, styles.css (без сборщика)
src/config.js название, имя ассистента, цвет, контекст компании — меняйте здесь
src/server.js API: вход, чат, диалоги, документы
src/assistant.js промпт с источниками и клиент TKBK API
src/knowledge.js загрузка документов (pdf-parse) и поиск
src/pii.js маскирование персональных данных (покрыто тестами)
src/auth.js сессии и проверка пароля
src/db.js SQLite: диалоги, сообщения, документы (файл data/assistant.db)
```
## Запуск за 5 минут (Docker)
1. Получите ключ TKBK API на [tkbk.online](https://tkbk.online).
2. Скопируйте `.env.example` в `.env`, впишите `TKBK_API_KEY` и `TEAM_PASSWORD`.
3. Запустите:
```bash
docker compose up -d --build
```
4. Откройте http://localhost:3000, войдите и загрузите документы в разделе «База знаний».
## Запуск без Docker
Нужен Node.js 20.16 или новее (рекомендуем 22 LTS). Пакет `better-sqlite3` ставит готовую сборку
под вашу систему; если её нет, понадобятся Python и компилятор C++.
```bash
npm install
cp .env.example .env # впишите TKBK_API_KEY и TEAM_PASSWORD
npm start
```
Тесты: `npm test`.
## Доступ из интернета
Поставьте перед сервером Caddy — он сам выпустит HTTPS-сертификат:
```
ai.example.ru {
reverse_proxy localhost:3000
}
```
и укажите `TRUST_PROXY=1` в `.env`. Без HTTPS не открывайте ассистента в интернет: пароль и документы
передавались бы открытым текстом.
## Где взять ключ
**TKBK_API_KEY** — личный кабинет на [tkbk.online](https://tkbk.online). Расход зависит от модели
и длины документов в ответе: Haiku в разы дешевле Sonnet, для простых вопросов его достаточно.
## Как работает маскирование
Перед отправкой в нейросеть текст вопроса, история диалога и найденные фрагменты документов
проверяются регулярными выражениями: российские и международные телефоны, email, номера карт
(13–19 цифр с проверкой по алгоритму Луна). Совпадения заменяются метками, соответствие хранится
только в памяти сервера на время запроса. Это простая защита от случайной утечки, а не
сертифицированное средство защиты ПДн: паспорта, адреса и ФИО она не распознаёт.
## FAQ
**Ассистент не находит ответ в документе.** Проверьте, что из PDF извлёкся текст: сканы без текстового
слоя не читаются — сначала распознайте их (OCR). Формулируйте вопрос словами из документа.
**Как сменить пароль?** Измените `TEAM_PASSWORD` в `.env` и перезапустите сервер — все сессии
закончатся, сотрудники войдут с новым паролем.
**Кто может загружать и удалять документы?** Любой вошедший сотрудник; в списке видно, кто загрузил файл.
**Где хранятся данные?** В `data/assistant.db` (в Docker — том `assistant-data`). Резервная копия:
`docker compose cp assistant:/app/data/assistant.db ./backup.db`.
**Какой максимальный размер файла?** 15 МБ по умолчанию, меняется в `MAX_UPLOAD_MB`.
Чат-виджет одной строкой: отвечает по вашей базе знаний, а сложные вопросы передаёт человеку в Telegram
Отвечает клиентам по вашим документам через Claude, а сложные вопросы передаёт операторам в Telegram
Клиенты, проекты, счета и акты в PDF с вашими реквизитами, НДС и напоминания о неоплатах в Telegram