Skip to main content
Glama
snehaharurkar

Agentic Support Agent MCP

Агентный ассистент поддержки клиентов (FastAPI + RAG + MCP)

Агент поддержки электронной коммерции, который ищет реальные данные о заказах, отвечает на вопросы о политике, используя FAQ через RAG, и автономно создаёт тикеты поддержки, когда не может решить проблему — всё это решается LLM в цикле использования инструментов, а не жёстко заданной логикой if/else.

Это намеренно другая область, чем обычный RAG-проект «вопрос-ответ по документам» (поиск заказов + создание тикетов — это действия, а не просто поиск), что полезно, если вы хотите два разных пункта в резюме, а не одну и ту же идею дважды.

Что демонстрирует

  • Agentic AI: многошаговое использование инструментов — модель объединяет check_order_status → faq_search → create_support_ticket в одном разговоре при необходимости.

  • FastAPI: REST-эндпоинты с валидацией запросов через Pydantic и автоматически сгенерированной документацией.

  • RAG: документы FAQ разбиваются на фрагменты и извлекаются по релевантности перед ответами на вопросы о политике.

  • MCP: те же инструменты заказов/тикетов/FAQ доступны в виде MCP-сервера (app/mcp_server.py) для использования вне этого API, например, из Claude Desktop.

Related MCP server: Commerce MCP Server

Установка

python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env   # add your GROQ_API_KEY

Запуск

uvicorn app.main:app --reload --port 8001

Документация по адресу http://localhost:8001/docs.

Пример: полный агентный сценарий

curl -X POST http://localhost:8001/agent/chat \
  -H "Content-Type: application/json" \
  -d '{"message": "My order ORD1002 seems delayed and I need it urgently, my email is a@b.com. What can you do?"}'

Ожидаемая цепочка рассуждений: check_order_status(ORD1002) → видит, что заказ всё ещё в обработке → faq_search("shipping delay") для контекста политики → решает, что клиенту нужна эскалация → create_support_ticket(...) → возвращает ID тикета и понятное объяснение.

Тестовые данные

  • data/faq.txt — политика возврата/доставки/отмены, из которой RAG-слой извлекает информацию.

  • app/tools.py — фейковая БД заказов в памяти (ORD1001, ORD1002, ORD1003) и хранилище тикетов. В продакшене замените на настоящую БД/CRM; сигнатуры функций инструментов останутся прежними.

Запуск в качестве MCP-сервера

python -m app.mcp_server

Предоставляет faq_search, check_order_status, create_support_ticket, get_ticket_status любому MCP-хосту.

Темы для обсуждения на собеседовании

  • Почему инструменты возвращают структурированные словари, а не свободный текст: LLM надёжнее рассуждает над структурированными данными, и это позволяет переиспользовать одни и те же функции для обычных REST-эндпоинтов (/orders/{id}) и цикла агента.

  • Системный промпт явно указывает модели, когда переводить запрос в тикет, а когда отвечать на основе FAQ/данных заказа — ключевое решение при проектировании агента (чрезмерно активное создание тикетов — распространённый сбойный сценарий, о котором стоит упомянуть).

  • max_steps защищает от бесконечных циклов вызова инструментов — реальная проблема надёжности в агентных системах.

Возможные расширения

  • Хранить тикеты/заказы в Postgres вместо словарей в памяти.

  • Добавить ID разговора /agent/chat и историю для многоходовых чатов поддержки.

  • Добавить эскалацию с участием человека (Slack webhook) при создании тикета.

  • Ограничить частоту запросов и добавить аутентификацию по API-ключам перед публичным развёртыванием.

Related MCP Connectors

Related MCP Servers