Инструменты18 июля 2026 г., 05:17 МСК🤖 Auto

Grok Build: Как BM25 решает проблему масштабирования MCP-агентов

xAI представила паттерн поиска инструментов для AI-агентов через BM25, устраняя перерасход токенов и нестабильность KV-кэша при работе с сотнями MCP-серверов.

Баннер новости 3865

Проблема масштабирования MCP

Большинство современных MCP-хостов (Model Context Protocol) работают по принципу «всё или ничего»: при запуске они загружают JSON-схемы всех доступных инструментов и внедряют их в системный промпт. Этот подход критически ломается при переходе от 5 к 50 и более инструментам. Возникают две фундаментальные проблемы:

  • Токен-перерасход: Каждая схема занимает 200–400 токенов. При 100 инструментах это 20 000–40 000 токенов только на определения, которые сжигаются на каждом шаге, даже если агенту они не нужны.
  • Нестабильность KV-кэша: Любое изменение системного промпта (например, добавление нового сервера) инвалидирует кэш, заставляя модель пересчитывать префикс с нуля. Garry Tan ранее отмечал это как ключевую причину проблем MCP при масштабировании.

Решение Grok Build: BM25 вместо промпта

В открытом коде Grok Build найден элегантный паттерн: модели никогда не показываются полные схемы. Вместо этого в системный промпт внедряются только два инструмента:

  1. search_tool(query) — ищет по скрытому каталогу, возвращая краткие имена и описания кандидатов.
  2. use_tool(tool_name, arguments) — выполняет вызов, после чего хост подставляет полную JSON-схему только для выбранного инструмента.

Системный промпт остается константой. Добавление нового сервера обновляет только индекс BM25, сохраняя валидность KV-кэша.

Почему BM25 лучше эмбеддингов для поиска инструментов

BM25 (Best Matching 25) — классический алгоритм ранжирования, который идеально подходит для технических каталогов благодаря трем принципам:

  • Частота терминов (TF): Учитывает повторения, но с убывающей полезностью.
  • Обратная частота документов (IDF): Редкие технические термины (например, «telemetry») дают больший вес, чем общие («data»).
  • Нормализация длины: Краткие, точные описания ранжируются выше размытых длинных текстов.

Для запроса «create github issue» алгоритм четко выделяет инструмент create_issue в сервере github без необходимости в ресурсоемких векторных эмбеддингах.

Сравнение подходов

Критерий Традиционный подход (Dumping) Паттерн Grok Build (BM25)
Размер промпта Растет линейно с числом инструментов (до 40k+ токенов) Постоянный (фиксированное число токенов)
Стабильность KV-кэша Низкая (инвалидация при любом изменении) Высокая (промпт не меняется)
Масштабируемость Проблематична после 50 инструментов Легко масштабируется до сотен серверов
Сложность реализации Низкая (прямая инъекция) Средняя (требуется индексация и поиск)

Как это реализовать

Для внедрения паттерна необходимо «сплющить» каждую схему инструмента в текстовый документ, объединив имя сервера, имя инструмента, описание и параметры. Затем этот текст индексируется через библиотеку BM25 (например, rank-bm25 в Python). При запросе агента система возвращает топ-N кандидатов, и только после выбора агента полная схема загружается в контекст для выполнения вызова.

Источник: Towards AI pub ↗