Узнайте, как изоляция контекста улучшает работу AI-агентов. Разделяйте задачи, избегайте загрязнения промптов и повышайте точность. Попробуйте на практике!
Вы когда-нибудь просили AI-агента написать код и тут же составить письмо клиенту, а в результате получали SQL-запрос с извинениями? Знакомая проблема: один агент пытается делать всё, но ничего не получается хорошо. Изоляция контекста — это принцип, который даёт каждой задаче свой «чистый стол»: отдельные инструкции, инструменты и информацию. В этой статье я покажу, как реализовать изоляцию на Python, и вы сразу сможете применить это в своих проектах.
Представьте, что вы даёте агенту один гигантский системный промпт, десятки инструментов и полную историю диалога. Агент путается: инструкции для SQL просачиваются в генерацию писем, нужный инструмент теряется среди девяти ненужных, а информация из одной задачи загрязняет другую. В результате агент становится посредственным во всём. Изоляция решает это радикально: каждому заданию — свой контекст.
Самый очевидный вариант — создавать суб-агентов с собственным окном контекста. Оркестратор даёт суб-агенту сжатое задание (например, «найди все API-эндпоинты, которые изменяют данные пользователя»), а не всю историю беседы. Суб-агент получает свежий контекст, исследует код, читает файлы, делает запросы — и возвращает только краткий ответ. Оркестратор видит лишь 500 токенов результата, а не 30 файлов. Шумные, дорогие исследования остаются внутри контекста, который потом выбрасывается.
Пример на Python с использованием библиотеки openai:
import openai
# Функция-суб-агент для поиска эндпоинтов
def find_user_data_endpoints(codebase_files):
"""Анализирует файлы и возвращает список эндпоинтов."""
# Собираем контекст только из файлов, без истории
context = "Проанализируй следующий код и найди все эндпоинты, " \
"которые изменяют данные пользователя (POST, PUT, DELETE). " \
"Верни только список имён эндпоинтов."
for file_name, content in codebase_files.items():
context += f"\nФайл {file_name}:\n{content}"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": context}]
)
# Возвращаем только короткий ответ
return response.choices[0].message.content
# Оркестратор: вызывает суб-агента и использует результат
files = {"routes.py": "@app.post('/users')\ndef create_user(): pass\n@app.get('/users')\ndef get_users(): pass"}
endpoints = find_user_data_endpoints(files)
print("Найденные эндпоинты:", endpoints)
# Вывод: Найденные эндпоинты: POST /usersВ этом примере суб-агент получает только код, а не всю историю чата. Результат — чистый список эндпоинтов, без лишнего шума.
Не всегда нужно создавать отдельного агента. Иногда достаточно просто убрать тяжёлые объекты из поля зрения модели. Вместо того чтобы передавать модели 5 МБ изображение или гигантский лог, дайте ей ссылку или дескриптор. Например, в HuggingFace CodeAgent вызовы инструментов выполняются в песочнице, а модель получает только handle на данные.
Реализация на Python с использованием runtime-объекта:
class RuntimeState:
"""Хранит тяжёлые данные, но модель видит только нужные поля."""
def __init__(self):
self._large_data = {} # скрыто от модели
self.visible = {} # то, что видит модель
def store_large(self, key, data):
"""Сохраняет большой объект, не показывая его модели."""
self._large_data[key] = data
# Модель получает только короткое описание
self.visible[key] = f"[Large data: {len(data)} bytes stored]"
def get_large(self, key):
"""Может быть вызвано инструментом, но не моделью напрямую."""
return self._large_data.get(key)
# Пример использования
state = RuntimeState()
# Допустим, у нас есть большой JSON-лог
log_data = {"entries": [{"id": i} for i in range(10000)]}
state.store_large("log", str(log_data))
# Модель видит только: "[Large data: 123456 bytes stored]"
print(state.visible["log"])Таким образом, модель не отвлекается на гигантские данные, а при необходимости инструмент может их обработать.
Изоляция — мощный инструмент, но у неё есть цена. Во-первых, она расходует больше токенов: исследование Anthropic показало, что мульти-агентные системы могут жечь до 15× больше токенов, чем один чат. Во-вторых, нужна координация: оркестратор должен планировать работу суб-агентов и склеивать результаты. И главное: изоляция отлично работает для независимых задач, но ломается для взаимозависимых. Если два суб-агента пишут код, который должен стыковаться, и каждый не видит решений другого, на этапе интеграции возникнет конфликт.
Правило простое: изолируйте по независимости, а не по загруженности. Если две задачи должны быть согласованы — пусть работают за одним столом. Если они действительно не пересекаются (параллельное исследование, read-only анализ) — дайте каждой свой контекст.
Прямо сейчас вы можете применить изоляцию в своих AI-агентах. Начните с малого: выделите в отдельный контекст задачи, которые не влияют друг на друга. Например, если ваш агент и пишет код, и отвечает на вопросы по документации — создайте два отдельных промпта с разными наборами инструментов. Используйте суб-агентов для дорогих операций (поиск по коду, анализ логов) и возвращайте только краткие результаты. А для тяжёлых данных применяйте runtime-объекты, скрывая их от модели. Попробуйте прямо сейчас — и вы увидите, как повысится качество ответов.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →