Ваш AI-агент тормозит на инструменте «summarize». Две секунды испаряются. В чём засада — в коде? В API? Или в LLM, куда сервер незаметно скинул работу?
Для девелоперов, собирающих агентные workflow’ы, это рутина с MCP-серверами. Нет видимости в семплирующих вызовах — значит, гадаешь на производительности. Теперь трассы высвечивают эти призраки, метрики рисуют правду на дашборде, а оптимизация перестаёт быть колдовством.
Почему семплирование MCP ломало ваши трассы
Спецификация MCP позволяет серверам — без ключей API — перекидывать LLM-работу обратно клиентам. Умно, да? Оркестратор бьёт по «summarize»; серверу нужен GPT-4o, чтоб пережевать текст; он семплирует клиентский LLM. Ответ течёт назад. Чистая делегация.
А трассы? Тишина. Middleware ловит вызовы инструментов без проблем. Семплирование? Метод глубоко в нутре хендлера. Ни спана. Инструмент на 2,1 секунды, из которых 1,8 сгорело на генерации — не видно. Тюкаешь не туда, лишние 300 мс.
«Вызов инструмента запускает LLM-вызов, невидимый в трассе. Middleware из статьи №7 трассирует tools/call summarize — но семплирующий вызов внутри? Призрак. Ни спана, ни длительности, ни имени модели.»
Это чёрный ящик, который раскололи в прошлый раз. А это — сиквел, готовый к демо.
Мы это кино видели. Ранние микросервисы задыхались от нетрассированных RPC — помните триумф Zipkin? Семплирование MCP — это RPC для агентного ИИ. Игнорируешь — твои инструменты превращаются в распределённые загадки. Чиним сейчас — опережаем рой мультиагентов.
Как они обуздали призрачные вызовы
Четыре правки. Просто до безобразия.
Сначала toadEyeMiddleware для базы — спаны на каждом инструменте.
Потом traceSampling-обёртка вокруг ctx.mcpReq.requestSampling(). Передаём модель, токены. Бум: SpanKind.CLIENT с именем «chat gpt-4o». Ловит длительность (1834 мс!), gen_ai.request.model, даже mcp.server.name.
Вложенность идеальна:
tools/call summarize 2.1с └── chat gpt-4o (семплирование) 1.8с
Реальная логика? 300 мс. Оптимизируй её, а не фантомы.
Код — импорт в одну строку. В хендлере: оберни семплирование. Пять минут на тест — сервер поднят, клиентский агент стучит, трассы льются в OTel-бэкенд.
А метрики? Тут уже как в Bloomberg. Запросы Prometheus из коробки. Никаких размытых счётчиков.
Дашборд, который отвечает: «Что ломается?»
Сверху — таблица на один взгляд:
Частота вызовов инструментов | Ср. длительность | Ошибок | Чтений ресурсов 12.4 req/s | 45.2 мс | 2.3% | 3.1 req/s
Ошибки в красном? Копаем глубже.
Таймсерии частот по инструментам. Агент переключается с calculate на search? Линии покажут. P50/P95 по инструментам — P95 search подскочил до 2 с? Пейджер в деле.
Ошибки в стеке: RateLimitError на search (8.7%), Validation на calculate (0%). Ресурсы по URI — горячие источники данных воют.
Внизу: сводная таблица по инструментам.
| Инструмент | Частота | Ср. (мс) | P95 (мс) | Ошибки |
|---|---|---|---|---|
| calculate | 8.2 | 12.3 | 24.1 | 0% |
| get-weather | 3.1 | 145.2 | 312.8 | 3.2% |
| search | 1.1 | 890.4 | 2134 | 8.7% |
Это не понты. Это вид для совета директоров: затраты коррелируют с задержками, ошибки — с утечками выручки. Масштабируешь агентов? Поблагодаришь эти четыре метрики.
Это Zipkin-момент для AI-агентов?
Мой козырь: никто не говорит вслух, но наблюдаемость MCP отстаёт от LangChain на мили — те экосистемы трассируют всё подряд, хайп или нет. Чистая спецификация MCP блестит, но инструменты прятали такие жемчужины, как семплирование.
Прогноз? Когда агенты начнут цеплять серверы (multi-MCP на подходе), такая трассировка станет базой. Игнорируешь — прод-агенты ослепнут под нагрузкой. Ставлю: toad-eye форкнут везде к Q2, стандарты кивнут, клиенты OpenAI потребуют.
Скептик? Не корпоративный PR — open source, воспроизводимо. Но смотрите: вендоры переименуют в «enterprise agent mesh» за 10к$/мес. Хватайте фри-версию заранее.
Зачем полная трассировка MCP нужна вашему стеку?
Девелоперы на Claude или GPT-аг