Skip to main content
Glama
dsoziev1

Ticket Support MCP Server

by dsoziev1

День 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)

Компоненты

Файл

Роль

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 не делает).

Документация