Российская библиотека redb.Route, позиционирующая себя как Apache Camel для.NET, в версии 3.1.0 добавила поддержку языковых моделей как полноценного транспорта. Вызов LLM теперь записывается как шаг.To("llm://claude") в той же DSL, где живут Kafka, RabbitMQ и HTTP — с теми же механизмами retry, circuit breaker, throttle и аудита.
Apache Camel — это устоявшийся Java-фреймворк для построения интеграционных маршрутов между системами. Он реализует паттерны Enterprise Integration Patterns (EIP): маршрутизацию сообщений, трансформацию, агрегацию, обработку ошибок. redb.Route переносит эту модель в экосистему.NET и добавляет к ней поддержку языковых моделей. Суть подхода: вместо того чтобы писать отдельный ИИ-агент со своей инфраструктурой, разработчик встраивает вызов модели в уже существующий интеграционный пайплайн.
| Провайдер | Идентификатор | Примечание |
|---|---|---|
| OpenAI | openai | |
| Anthropic / Claude | anthropic | Через официальный OpenAI-compat endpoint |
| Groq | groq | |
| Cerebras | cerebras | |
| OpenRouter | openrouter | |
| Gemini | gemini | OpenAI-compat |
| GitHub Models | github-models | |
| Mistral | mistral | |
| Together | together | |
| HuggingFace | huggingface | |
| DeepSeek | deepseek | |
| Ollama | ollama | Self-hosted |
| LM Studio | lmstudio | Self-hosted |
| Custom | custom | Универсальный для self-hosted шлюзов |
Одна строка From("kafka://orders").To(Llm.Factory("claude").Temperature(0.2).MaxTokens(1024).AsUri()).To("kafka://orders.translated") описывает полный цикл: тело входящего сообщения уходит как user-промпт, модель выполняет итерации (включая опциональный tool-use), ответ ложится в exchange.Out.Body, а метаданные — использование токенов, id модели, причина остановки — попадают в заголовки. OpenTelemetry-трейсы и метрики поднимаются без дополнительной конфигурации.
Инструмент агента (.AsLlmTool) — это обычный маршрут с DSL-аспектом; внутри доступны все 30+ EIP-паттернов: retry, circuit breaker, throttle.
Архитектурно значимое решение в 3.1.0 — инструменты агента реализованы как обычные маршруты с DSL-аспектом.AsLlmTool("name"). Это означает, что внутри инструмента доступны все 30+ EIP-паттернов библиотеки. Tool, который обращается к базе данных, можно обернуть в Transaction(), circuit breaker и retry без написания runtime-кода вручную. Любой существующий маршрут — From("http://...") или From("sql://...") — превращается в инструмент агента добавлением одного аспекта; авторизация, аудит и метрики при этом уже есть, потому что это просто маршрут.
Второй новый транспорт, redb.Route.Exec, — спавнер процессов с allowlist разрешённых команд, рабочей директорией и таймаутом. Он работает как backend для shell-инструментов агента и как самостоятельный scheduled consumer: cron-less health-probe или резервное копирование описываются тем же From("exec://...") без внешнего планировщика.
По части совместимости с провайдерами: один универсальный OpenAiProvider покрывает 14 API — OpenAI, Anthropic (через OpenAI-совместимый endpoint), Groq, Cerebras, OpenRouter, Gemini, GitHub Models, Mistral, Together, HuggingFace, DeepSeek, Ollama, LM Studio и кастомные self-hosted шлюзы. Смена провайдера — одна строка в конфигурации DI; DSL маршрутов не меняется ни на символ. Нативный AnthropicProvider через Messages API заявлен как следующий шаг — для функций, недоступных через OpenAI-совместимый интерфейс.
Автор честно обозначает ограничения текущей версии: conversation memory в standalone-демо держится в памяти процесса, нативный Anthropic API ещё не реализован, подробный разбор внутреннего устройства вынесен в отдельную статью. Это анонс версии, а не финальная документация. Тем не менее подход — встраивание LLM-вызовов в существующую интеграционную инфраструктуру вместо параллельного ИИ-фреймворка — представляет практический интерес для.NET-команд, у которых уже есть ESB-слой и которые хотят добавить агентную логику без дублирования инфраструктурного кода.