Способы подключения шлюза¶
AppSec.AIGate можно встроить в LLM-стек тремя способами. Они отличаются тем, кто вызывает модель и где стоит точка контроля. Эта страница даёт обзор со схемами; ссылки ведут на пошаговые инструкции.
Как выбрать за 10 секунд
- Уже есть LLM Gateway (LiteLLM, Portkey)? → подключайте AppSec.AIGate как guardrail (способ 3).
- Пишете приложение и можете добавить пару строк кода? → Python SDK (способ 2).
- Нужен контроль на уровне сети без правки кода? → прозрачный прокси (способ 1).
flowchart TD
start{"Что у вас есть?"}
start -->|"Готовый LLM Gateway<br/>(LiteLLM / Portkey)"| m3["Способ 3<br/>Guardrail-адаптер"]
start -->|"Свой код приложения,<br/>можно менять"| m2["Способ 2<br/>Python SDK"]
start -->|"Хочу контроль на уровне сети,<br/>код не трогаю"| m1["Способ 1<br/>Прозрачный прокси"]
classDef m fill:#e8f0fe,stroke:#4285f4,color:#111;
class m1,m2,m3 m;
Способ 1. Прозрачный прокси (reverse-proxy)¶
Приложение обращается не к адресу модели, а к адресу шлюза. AppSec.AIGate проверяет
запрос, проксирует его в реальный LLM-backend, проверяет ответ и возвращает его
клиенту. Код приложения менять не нужно — меняется только адрес (base_url).
flowchart LR
app["Приложение<br/>base_url = адрес шлюза"]
nginx["Nginx / Ingress<br/>(TLS + заголовки)"]
gw["API Gateway"]
llm["LLM backend"]
app -->|"LLM-запрос"| nginx -->|"+ X-Original-URI,<br/>X-Real-Backend, …"| gw
gw -->|"если ALLOW/SANITIZE"| llm
llm --> gw --> nginx --> app
Два варианта:
- Напрямую на шлюз — в клиенте указываете
base_urlшлюза. Куда проксировать запрос, AppSec.AIGate определяет по сконфигурированному провайдеру в Profiles Registry (по URL, хосту или заголовкуX-LLM-Provider). Активный провайдер должен быть заведён заранее — иначе шлюз вернётNO_BACKEND_CONFIGURED. - Через обратный прокси перед шлюзом — рекомендуется для продакшена. Роль прокси
играет Nginx (Docker Compose) или Ingress-контроллер (Kubernetes): он
терминирует TLS и проставляет служебные заголовки маршрутизации (
Host,X-Original-URI,X-Real-Backend,X-Real-Backend-Path).
Пример (клиент OpenAI SDK смотрит на шлюз вместо api.openai.com):
from openai import OpenAI
# было: base_url="https://api.openai.com/v1"
client = OpenAI(base_url="https://llm-gw.company.com/v1", api_key="...")
Когда подходит
Готовые OpenAI-совместимые клиенты (OpenWebUI, LibreChat, Continue.dev), единая точка входа для нескольких LLM-провайдеров, минимум изменений в коде.
Ключи и поведение при сбое
Клиентский заголовок Authorization шлюз прозрачно пробрасывает в LLM-backend —
ключи провайдеров остаются на своей стороне. Аутентификация и rate-limit самого
шлюза включаются в проде (Kubernetes), в dev-режиме выключены. Если задан
fallback X-Real-Backend, при недоступности AppSec.AIGate трафик идёт в модель без
инспекции (fail-open) — это сетевое решение для отказоустойчивости.
📄 Подробно: Настройка перенаправления трафика (Nginx) · Ingress в Kubernetes · Провайдеры · Профили безопасности.
Способ 2. Python SDK — встраивание в приложение¶
Защита встраивается прямо в код. LLM вызывает само приложение, а к AppSec.AIGate оно обращается за вердиктом — отдельно по входу и по выходу. ML-модели в процесс приложения не загружаются: вся детекция на сервере.
flowchart LR
subgraph A["Приложение"]
code["ваш код<br/>aigate.scan_input() / scan_output()"]
end
gw["API Gateway<br/>POST /_aigate/v1/scan"]
llm["LLM backend"]
code -->|"1 · проверить запрос"| gw
gw -->|"вердикт ALLOW/BLOCK/SANITIZE"| code
code -->|"2 · если разрешено — вызвать LLM"| llm
llm -->|"ответ"| code
code -->|"3 · проверить ответ"| gw
from aigate import AIGate
ai = AIGate() # конфигурация из переменных AIGATE_*
verdict = ai.scan_input("Мой ИНН 7707083893") # перед вызовом LLM
if verdict.is_blocked:
raise RuntimeError(verdict.human_reason)
Есть готовые обёртки для OpenAI, Anthropic, LangChain, LlamaIndex (включаются явным вызовом, без monkey-patching).
Когда подходит
Кастомные приложения и агенты, где нужен тонкий контроль и доступ к коду.
📄 Подробно: Интеграция через Python SDK.
Способ 3. Внешний LLM Gateway как guardrail¶
Если у вас уже развёрнут LLM Gateway (LiteLLM, Portkey, Kong AI Gateway), он продолжает проксировать LLM-трафик, а AppSec.AIGate подключается как guardrail-backend. Внешний Gateway сам вызывает AppSec.AIGate (через адаптер) webhook'ом — до обращения к модели и после ответа.
flowchart LR
client["Клиент"]
lg["LiteLLM / Portkey"]
ad["llm-gateway-adapter"]
gw["API Gateway<br/>/_aigate/v1/adapters/litellm"]
llm["LLM backend"]
client --> lg
lg -->|"pre_call webhook"| ad --> gw
gw -->|"ALLOW / BLOCK / SANITIZE"| ad --> lg
lg -->|"если разрешено"| llm
llm -->|"ответ"| lg
lg -->|"post_call webhook"| ad
lg --> client
Адаптер llm-gateway-adapter переводит native-формат внешнего Gateway (LiteLLM
Generic Guardrail API / Portkey Webhook) в канонический scan-вызов AppSec.AIGate и обратно.
Контракт fail-secure: при недоступности AppSec.AIGate запрос блокируется.
Когда подходит
У вас уже есть LLM Gateway и вы не хотите менять точку входа или код клиентов.
📄 Подробно: Интеграция с LiteLLM · Пошаговое руководство.
Сравнение¶
| Прозрачный прокси | Python SDK | Guardrail-адаптер | |
|---|---|---|---|
| Кто вызывает LLM | AppSec.AIGate (проксирует) | Приложение | Внешний LLM Gateway |
| Менять код приложения | Нет (только base_url) |
Да (1–3 строки) | Нет |
| Точка контроля | Сетевой прокси | Внутри приложения | Уровень LLM Gateway |
| Точка входа клиента | Адрес шлюза / Nginx / Ingress | LLM-провайдер напрямую | Внешний Gateway |
| Поведение при сбое AppSec.AIGate | fail-open (если задан X-Real-Backend) |
настраивается (по умолчанию fail-open) | fail-secure (блокировка) |
| Лучше всего для | Готовых OpenAI-клиентов | Кастомных приложений, агентов | Уже развёрнутого LLM Gateway |
| Инструкция | Nginx · Ingress | Python SDK | LiteLLM |
Стриминг (SSE)
Потоковые ответы поддерживаются во всех способах. В режиме прокси поведение
задаётся профилем (passthrough / buffer_and_scan / realtime_scan); в SDK
ответ сканируется по мере поступления. Подробнее — в инструкциях по каждому способу.
Браузерный трафик SaaS — отдельный случай
Эти три способа интегрируют AppSec.AIGate в LLM-стек приложения. Для трафика, когда
сотрудник просто открывает chatgpt.com или claude.ai в браузере, нужен
отдельный контроль — браузерное расширение AIGate Browser Edge. Оно работает
только при принудительной установке на управляемую технику (само по себе,
«прозрачно», такой трафик не перехватывается). Как развернуть и настроить —
см. Инспекция браузерного трафика.