Забудьте про спагетти-код в AI-агентах с помощью Plano

29 Jul, 2026
6,911
🔱 474
👥 51

Знакомая ситуация: вы собрали крутое демо с парой AI-агентов на популярном фреймворке, всё работает, и пора катить в продакшн. И тут начинается «веселье». Нужно прикрутить нормальный роутинг запросов, добавить фильтры безопасности (Guardrails), настроить логирование и обсервабилити, а ещё желательно не разориться на вызовах GPT-4 для управления логикой. В итоге ваш чистый код обрастает тоннами инфраструктурной «лапши», которая не имеет отношения к бизнес-логике.

Интересно, что именно эту проблему — переход от эффектных демо к надежным серийным приложениям — решает проект Plano. Это специализированный прокси-сервер и дата-плейн для AI-агентов, который берет на себя всю грязную работу по доставке и оркестрации.

Plano Logo

Что такое Plano и зачем он разработчику

Если вкратце, Plano — это как Envoy или Nginx, но созданный специально для мира больших языковых моделей (LLM). Вместо того чтобы вшивать логику выбора моделей или цепочки вызовов агентов прямо в код приложения, вы выносите это на уровень инфраструктуры.

В моей практике часто встречается проблема «привязки к фреймворку». Выбрали LangChain или AutoGen, а потом поняли, что они слишком тяжеловесны или диктуют свои правила. Plano же работает как внешний слой. Вы можете писать своих агентов на любом языке (Python, Go, Rust), использовать любые библиотеки, а Plano будет стоять «сверху», управляя трафиком и обеспечивая безопасность.

Почему это удобно?

  1. Разделение ответственности: Вы пишете логику агента, Plano занимается маршрутизацией.
  2. Экономия: Для роутинга Plano использует собственные легковесные модели (например, 4-миллиардный оркестратор), что на порядок дешевле и быстрее, чем гонять каждый запрос через тяжелую LLM.
  3. Готовое обсервабилити: Трейсинг и метрики вы получаете «из коробки» без вставки OpenTelemetry в каждый метод.

Как это устроено внутри

Plano построен на базе Envoy — проверенного временем прокси, который используют в Google и Netflix. Но ребята из Katanemo добавили туда «мозги».

high-level network plano architecture

В основе лежат четыре столпа:

  • Оркестрация: 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 вы сразу видите, как прошел запрос, на каком этапе возникла задержка и что ответил каждый конкретный агент. В продакшене, когда у вас десятки микро-агентов, это спасает часы отладки.

Automatic Tracing

Кому стоит попробовать Plano?

Если вы делаете простого чат-бота для Telegram, возможно, Plano будет избыточным. Но проект станет незаменимым, если:

  • У вас мультиагентная система, где разные компоненты решают разные задачи.
  • Вы хотите безопасно использовать LLM в корпоративной среде (нужна модерация, фильтрация данных).
  • Вам нужна независимость от провайдеров: сегодня GPT-4, завтра локальная Llama, послезавтра Claude — и всё это без переписывания половины проекта.
  • Вы цените производительность: Plano написан на Rust, что гарантирует минимальные задержки на уровне проксирования.

Plano — это отличный пример того, как AI-разработка становится всё более «инженерной». Мы уходим от хаотичных скриптов к стройной архитектуре. Проект активно развивается, у него сильное комьюнити (почти 5000 звезд на GitHub!) и за ним стоят контрибьюторы Envoy, которые знают толк в высоконагруженных системах.

Если вы устали бороться с хрупкостью ваших AI-фреймворков, определенно стоит заглянуть в репозиторий Plano и попробовать поднять их демо-кейс.

А как вы решаете вопрос оркестрации агентов в своих проектах? Пишите в комментариях!

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.