Ticket Support MCP Server
День 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). Также есть ручная кнопка «Создать тикет».
Быстрый старт
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)Компоненты
Файл | Роль |
| support-FAQ по подключению к Auth0 (источник RAG) |
| сид-тикеты и пользователи (JSON-бэкенд) |
| интерфейс |
| адаптер ServiceNow Table API (Incident → тикет) |
| MCP-сервер: |
| индекс базы знаний + retrieve |
| ядро: контекст тикета (MCP) + RAG + DeepSeek → ответ |
| веб-чат 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 не делает).