Забудьте про спагетти-код в AI-агентах с помощью Plano
Знакомая ситуация: вы собрали крутое демо с парой AI-агентов на популярном фреймворке, всё работает, и пора катить в продакшн. И тут начинается «веселье». Нужно прикрутить нормальный роутинг запросов, добавить фильтры безопасности (Guardrails), настроить логирование и обсервабилити, а ещё желательно не разориться на вызовах GPT-4 для управления логикой. В итоге ваш чистый код обрастает тоннами инфраструктурной «лапши», которая не имеет отношения к бизнес-логике.
Интересно, что именно эту проблему — переход от эффектных демо к надежным серийным приложениям — решает проект Plano. Это специализированный прокси-сервер и дата-плейн для AI-агентов, который берет на себя всю грязную работу по доставке и оркестрации.
Что такое Plano и зачем он разработчику
Если вкратце, Plano — это как Envoy или Nginx, но созданный специально для мира больших языковых моделей (LLM). Вместо того чтобы вшивать логику выбора моделей или цепочки вызовов агентов прямо в код приложения, вы выносите это на уровень инфраструктуры.
В моей практике часто встречается проблема «привязки к фреймворку». Выбрали LangChain или AutoGen, а потом поняли, что они слишком тяжеловесны или диктуют свои правила. Plano же работает как внешний слой. Вы можете писать своих агентов на любом языке (Python, Go, Rust), использовать любые библиотеки, а Plano будет стоять «сверху», управляя трафиком и обеспечивая безопасность.
Почему это удобно?
- Разделение ответственности: Вы пишете логику агента, Plano занимается маршрутизацией.
- Экономия: Для роутинга Plano использует собственные легковесные модели (например, 4-миллиардный оркестратор), что на порядок дешевле и быстрее, чем гонять каждый запрос через тяжелую LLM.
- Готовое обсервабилити: Трейсинг и метрики вы получаете «из коробки» без вставки OpenTelemetry в каждый метод.
Как это устроено внутри
Plano построен на базе Envoy — проверенного временем прокси, который используют в Google и Netflix. Но ребята из Katanemo добавили туда «мозги».

В основе лежат четыре столпа:
- Оркестрация: Plano сам понимает, какому агенту отправить запрос на основе описания на естественном языке.
- Model Agility: Вы можете менять модели (OpenAI на Claude и обратно) через конфиг, не трогая код.
- Filter Chains: Позволяет вешать «хуки» для проверки на джейлбрейки, модерацию контента или добавление памяти.
- Agentic Signals: Автоматический сбор логов и специфических для агентов сигналов для последующего обучения и отладки.
Практический пример: создаем тревел-ассистента
Давайте посмотрим, как собрать систему из двух агентов (погода и поиск авиабилетов), которые будут бесшовно работать вместе.
Шаг 1: Конфигурация в YAML
Вместо написания сложных классификаторов интентов, мы просто описываем агентов в файле config.yaml:
version: v0.3.0
agents:
- id: weather_agent
url: http://localhost:10510
- id: flight_agent
url: http://localhost:10520
listeners:
- type: agent
name: travel_assistant
port: 8001
router: plano_orchestrator_v1 # Та самая умная модель для роутинга
agents:
- id: weather_agent
description: "Узнает погоду и прогнозы в любой точке мира."
- id: flight_agent
description: "Ищет рейсы между аэропортами и расписания."
Шаг 2: Код агента
Ваш агент — это просто HTTP-сервер, совместимый с API OpenAI. Вот пример на FastAPI:
from fastapi import FastAPI, Request
from openai import AsyncOpenAI
app = FastAPI()
# Ключевой момент: агент обращается к Plano как к шлюзу
llm = AsyncOpenAI(base_url="http://localhost:12001/v1", api_key="EMPTY")
@app.post("/v1/chat/completions")
async def chat(request: Request):
# Логика получения данных о погоде...
# И отправка ответа обратно через прокси Plano
stream = await llm.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "system", "content": "Данные о погоде..."}, ...],
stream=True
)
return StreamingResponse(generate_stream(stream))
Шаг 3: Магия в действии
Теперь вы просто отправляете один запрос на порт Plano:
"Я хочу улететь из Москвы в Париж на следующей неделе. Какая там будет погода и найди мне билеты?"
Plano сам поймет, что нужно сначала спросить weather_agent, затем flight_agent, объединит ответы и выдаст результат. Вам не пришлось писать ни строчки кода для этого «склеивания».
Обсервабилити без боли
Одна из самых крутых фишек — автоматический трейсинг. В консоли Plano вы сразу видите, как прошел запрос, на каком этапе возникла задержка и что ответил каждый конкретный агент. В продакшене, когда у вас десятки микро-агентов, это спасает часы отладки.

Кому стоит попробовать Plano?
Если вы делаете простого чат-бота для Telegram, возможно, Plano будет избыточным. Но проект станет незаменимым, если:
- У вас мультиагентная система, где разные компоненты решают разные задачи.
- Вы хотите безопасно использовать LLM в корпоративной среде (нужна модерация, фильтрация данных).
- Вам нужна независимость от провайдеров: сегодня GPT-4, завтра локальная Llama, послезавтра Claude — и всё это без переписывания половины проекта.
- Вы цените производительность: Plano написан на Rust, что гарантирует минимальные задержки на уровне проксирования.
Plano — это отличный пример того, как AI-разработка становится всё более «инженерной». Мы уходим от хаотичных скриптов к стройной архитектуре. Проект активно развивается, у него сильное комьюнити (почти 5000 звезд на GitHub!) и за ним стоят контрибьюторы Envoy, которые знают толк в высоконагруженных системах.
Если вы устали бороться с хрупкостью ваших AI-фреймворков, определенно стоит заглянуть в репозиторий Plano и попробовать поднять их демо-кейс.
А как вы решаете вопрос оркестрации агентов в своих проектах? Пишите в комментариях!