← Cloudflare AI Gateway / ai-gateway / features / dynamic-routing
JSON Configuration
Вместо использования интерфейс редактора в панели управления чтобы определить граф Routes, это можно сделать через REST API. Внутренне Routes представлены в виде простой JSON структуры:
{
"id": "<route id>",
"name": "<route name>",
"elements": [<array of elements>]
}Поддерживаемые элементы
Dynamic routing поддерживает несколько типов элементов, которые можно объединять для создания сложных потоков маршрутизации. У каждого элемента есть свои входы, выходы и параметры настройки.
Start Element
Обозначает начало маршрута. Каждый маршрут должен начинаться с элемента Start.
- Входные данные: Нет
- Выходные данные:
next: Передает запрос без изменений следующему элементу
{
"id": "<id>",
"type": "start",
"outputs": {
"next": { "elementId": "<id>" }
}
}Conditional Element (If/Else)
Оценивает условие на основе параметров запроса и соответствующим образом маршрутизирует его.
- Входные данные: Запрос
- Выходные данные:
true: Перенаправляет запрос указанному элементу, если условие принимает значение truefalse: Перенаправляет запрос указанному элементу, если условие принимает значение false
conditions поддерживает операторы в стиле MongoDB, такие как $eq, $ne, $in, $and, а также $or.
{
"id": "<id>",
"type": "conditional",
"properties": {
"conditions": {
"metadata.plan": { "$eq": "free" }
}
},
"outputs": {
"true": { "elementId": "<id>" },
"false": { "elementId": "<id>" }
}
}Percentage Split
Распределяет запросы вероятностным образом между несколькими выходами, что полезно для A/B-тестирования и постепенного развёртывания.
- Входные данные: Запрос
- Выходные данные: До 5 именованных процентных выходов
- Каждый выходной ключ (например,
"10%"), это вероятность для данной ветви, и сумма ключей должна составлять 100%
- Каждый выходной ключ (например,
{
"id": "<id>",
"type": "percentage",
"outputs": {
"10%": { "elementId": "<id>" },
"40%": { "elementId": "<id>" },
"50%": { "elementId": "<id>" }
}
}Лимит скорости или бюджета запросов
Применяйте лимиты на основе метаданных запроса. Поддерживаются лимиты как по количеству, так и по стоимости.
- Входные данные: Запрос
- Выходные данные:
success: Перенаправляет запрос указанному элементу, если для запроса не действует ограничение скоростиfallback: Необязательный выход для запросов с ограничением скорости (при отсутствии маршрут завершается)
Свойства:
limitType: "count" или "cost"key: Поле запроса, используемое для ограничения скорости (например, "metadata.user_id")limit: Максимально допустимое количество запросов/стоимостьwindow: Временное окно в секундах
{
"id": "<id>",
"type": "rate",
"properties": {
"limitType": "count",
"key": "metadata.user_id",
"limit": 100,
"window": 3600
},
"outputs": {
"success": { "elementId": "node_model_workers_ai" },
"fallback": { "elementId": "node_model_openai_mini" }
}
}Модель
Выполняет инференс с использованием указанной модели и провайдера с настраиваемыми параметрами тайм-аута и повторных попыток.
- Входные данные: Запрос
- Выходные данные:
success: Перенаправляет запрос указанному элементу, если модель успешно начинает передавать ответ потокомfallback: Необязательный выход на случай сбоя модели после всех попыток повтора или истечения времени ожидания
Свойства:
provider: AI-провайдер (например, "openai", "anthropic")model: Конкретное название моделиtimeout: Тайм-аут запроса в миллисекундахretries: Количество попыток повтора
{
"id": "<id>",
"type": "model",
"properties": {
"provider": "openai",
"model": "gpt-4o-mini",
"timeout": 60000,
"retries": 4
},
"outputs": {
"success": { "elementId": "<id>" },
"fallback": { "elementId": "<id>" }
}
}End element
Обозначает конец маршрута. Возвращает последний успешный ответ модели или ошибку, если ни один ответ модели не был сгенерирован.
- Входные данные: Запрос
- Выходные данные: Нет (укажите пустой
outputsобъект)
{
"id": "<id>",
"type": "end",
"outputs": {}
}