Стратегии уменьшения размера контекста - MCP: Создание ИИ-агентов на практике (Python & TypeScript) - Qpel.AI

Стратегии уменьшения размера контекста

Вы уже знаете: чем лучше контекст, тем умнее LLM. Но большой контекст — это не только больше информации, но и выше расходы на токены, а ещё медленнее ответы. Поэтому уметь управлять размером контекста — ключевой навык для разработчика MCP-агентов.

Зачем управлять контекстом?

Представьте, что вы общаетесь с очень умным, но немного забывчивым человеком. Чем больше нужной информации вы дадите сразу, тем лучше он поймёт задачу. Но если вы будете повторяться или давать лишние детали, он может «утонуть» в информации, а вы потратите время и силы на объяснения. С LLM похожая ситуация:

  • Деньги: Большинство LLM берут плату за токены. Больше токенов в запросе и ответе — выше стоимость.
  • Скорость: Обработка больших текстов занимает больше времени.
  • Лимиты: У каждой LLM есть максимальный размер контекстного окна. Превысите лимит — получите ошибку.
  • Качество: Лишний или нерелевантный контекст может «запутать» LLM, снижая точность ответов.

Как уменьшить контекст: 5 стратегий

Давайте разберём практические подходы, которые помогут оптимизировать контекст без потери важной информации.

1. Выбирайте только нужное (RAG)

Вместо того чтобы передавать LLM все данные, динамически выбирайте только релевантную информацию для текущего запроса. Это основа подхода RAG (Retrieval Augmented Generation), который активно используют в современных агентах.

Как это работает:

  1. Храните данные: Ваши документы, статьи, записи из баз данных лежат в векторной базе (например, Chroma, Pinecone, Weaviate).
  2. Векторизуйте: Каждый фрагмент данных превращается в числовой вектор (эмбеддинг).
  3. Ищите по запросу: Когда пользователь делает запрос, он тоже векторизуется.
  4. Извлекайте релевантное: Векторный поиск находит фрагменты данных, чьи векторы наиболее близки к вектору запроса.
  5. Формируйте контекст: Извлечённые фрагменты добавляются в промпт для LLM.

Пример: Если ваш агент отвечает на вопросы по документации, он извлекает только те разделы, которые касаются конкретного вопроса пользователя, а не передаёт всю документацию.

2. Суммируйте и сжимайте

Иногда нужна только суть большого текста. Здесь поможет суммаризация.

  • Автоматическая суммаризация: Используйте LLM, чтобы кратко изложить большие текстовые блоки, прежде чем передавать их в основной промпт. Это полезно для логов, длинных переписок или объёмных документов.
  • Извлечение фактов: Вместо суммаризации попросите LLM извлечь конкретные факты или сущности из текста, которые затем будут использоваться в контексте.

3. Управляйте историей диалога

История диалога — важный источник контекста, но она быстро растёт.

  • Ограничьте длину: Храните только последние N сообщений. Это просто, но не всегда эффективно.
  • Суммируйте историю: Периодически суммируйте старые части диалога, превращая их в краткое резюме. Например, после 5–10 сообщений попросите LLM создать «краткое содержание предыдущих бесед».
  • Выделяйте ключевое: Сохраняйте только те сообщения, которые содержат важные решения, задачи или изменения в состоянии диалога.

4. Добавляйте детали постепенно

Начинайте с минимального контекста и добавляйте детали только по мере необходимости.

  • Первый запрос: Отправляйте LLM только основной запрос пользователя.
  • Дополнительный контекст: Если LLM не хватает информации, она может запросить дополнительные данные через инструменты или попросить пользователя уточнить. Только тогда вы добавляете нужный контекст.

5. Удаляйте лишнее

В работе агента может накапливаться много «шума»:

  • Фильтруйте логи: Если используете логи для отладки, убедитесь, что в контекст LLM попадают только релевантные записи.
  • Удаляйте дубликаты: Проверяйте, нет ли в контексте повторяющейся информации.
  • Избавляйтесь от «воды»: Обучайте агента или используйте предварительную обработку для удаления вводных фраз, приветствий и другой информации, которая не несёт смысловой нагрузки.

Пример: Управление контекстом в MCP-сервере

Представим, что ваш MCP-сервер обрабатывает запросы на поддержку клиентов.

  1. Начало диалога: Агент получает первый запрос. В контекст добавляется сам запрос и, возможно, ID клиента.
  2. Поиск информации: Если запрос касается продукта, агент ищет информацию о нём в базе знаний (RAG). Извлекаются 2–3 наиболее релевантных абзаца.
  3. История диалога: Если диалог становится длинным, агент суммирует предыдущие 5 сообщений в одно краткое резюме. Это резюме заменит старые сообщения в контексте.
  4. Инструменты: Если клиенту нужна помощь с настройкой, агент вызывает инструмент, который передаст LLM только необходимые параметры настройки, а не всю инструкцию.

Совет: Всегда спрашивайте себя: «Действительно ли эта информация нужна LLM прямо сейчас, чтобы ответить на текущий запрос?» Если нет, сокращайте или откладывайте её.

Оптимизация контекста — это непрерывный процесс, который требует экспериментов и тонкой настройки. Но освоив эти стратегии, вы сможете создавать более эффективных, экономичных и быстрых MCP-агентов.

Теперь, когда вы знаете, как управлять размером контекста, давайте перейдём к не менее важной теме — как эффективно управлять токенами и использовать кэширование, чтобы сделать ваших агентов ещё производительнее и экономичнее.