Ticket Support MCP Server
by dsoziev1
README.md
# День 33 — AI-ассистент поддержки пользователей
Мини-сервис поддержки: отвечает на вопросы о продукте (sso-auth0), используя
**RAG (FAQ + документация)** и **контекст тикета/пользователя**, который берёт
**через MCP** (локальный JSON тикетов или **ServiceNow**). Веб-чат на FastAPI,
генерация — DeepSeek, retrieval — локальный fastembed (офлайн).
```
вопрос + выбранный тикет
├─ MCP ticket_get / user_get (контекст тикета и пользователя)
├─ RAG retrieve (FAQ + docs) (база знаний, локально)
└─ DeepSeek → ответ с цитатами [Sn], адаптированный под тикет
```
Пример из задания: тикет **T-1001** («Callback URL mismatch», SPA) + вопрос
«Почему не работает авторизация?» → ассистент отвечает про пустой Allowed Callback
URLs **для этого приложения**, со ссылками на FAQ.
**Эскалация:** если ответа в базе знаний нет, ассистент честно говорит об этом и
**автоматически создаёт тикет** для инженера (через MCP-тул `ticket_create`, в JSON
или ServiceNow). Также есть ручная кнопка «Создать тикет».
## Быстрый старт
```bash
cp .env.example .env # впиши DEEPSEEK_API_KEY
pip install -r requirements.txt
python3 ingest.py # собрать базу знаний (FAQ + docs sso-auth0)
bash run.sh # http://localhost:8050 (или: python3 support.py "вопрос" --ticket T-1001)
```
## Компоненты
| Файл | Роль |
|---|---|
| `data/faq.md` | support-FAQ по подключению к Auth0 (источник RAG) |
| `data/tickets.json`, `users.json` | сид-тикеты и пользователи (JSON-бэкенд) |
| `ticketstore.py` | интерфейс `TicketStore` + `JsonStore` + `ServiceNowStore` |
| `crm_servicenow.py` | адаптер ServiceNow Table API (Incident → тикет) |
| `ticket_server.py` | **MCP-сервер**: `ticket_list/ticket_get/ticket_search/user_get` |
| `ingest.py`, `rag.py` | индекс базы знаний + retrieve |
| `support.py` | ядро: контекст тикета (MCP) + RAG + DeepSeek → ответ |
| `web.py`, `run.sh` | веб-чат support-desk |
## Бэкенд тикетов (через MCP)
Доступ к тикетам идёт **только через MCP** (`ticket_server.py` поднимается
stdio-подпроцессом). Бэкенд выбирается `TICKET_BACKEND`:
- `json` (по умолчанию) — `data/tickets.json` + `users.json`, работает офлайн;
- `servicenow` — живые Incident из ServiceNow (см. `docs/USAGE.md` по регистрации
бесплатного Personal Developer Instance и `.env`).
## Безопасность
`DEEPSEEK_API_KEY` (и при использовании — `SERVICENOW_*`) в `.env` (gitignored),
публикуется только `.env.example`. `index/`+`cache/` gitignored (пересобираются
`ingest.py`). Ассистент только читает тикеты (write в CRM не делает).
## Документация
- [Руководство и настройка ServiceNow](docs/USAGE.md)
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues