Перейти к содержанию

Способы подключения шлюза

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. Оно работает только при принудительной установке на управляемую технику (само по себе, «прозрачно», такой трафик не перехватывается). Как развернуть и настроить — см. Инспекция браузерного трафика.