О себе Портфолио Кейсы Услуги Блог Контакт 🎙 Поговорить с AI
EN DE RU
🎙 Поговорить с AI
August 23, 2026 · 3 min read

Как объединить базы данных, файлы и API в один управляемый граф для AI-агентов: реальный опыт внедрения GraphJin MCP

Я — Denis Shokhirev, архитектор агентных AI-систем из Фрайбурга. В DennisCraft AI Studio мы внедряем автономные мультиагентные решения для B2B-клиентов в Германии, Австрии и Швейцарии. Мой стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. В реальном проде у меня стояла задача: как собрать разрозненные базы данных, файлы и внешние API в один управляемый граф, чтобы агенты могли работать по-настоящему автономно и безопасно? Зачем агентам нужен единый граф данных Текущая реальность: у

Denis Shokhirev
Denis Shokhirev
Agentic AI Systems Architect
Telegram LinkedIn

Я — Denis Shokhirev, архитектор агентных AI-систем из Фрайбурга. В DennisCraft AI Studio мы внедряем автономные мультиагентные решения для B2B-клиентов в Германии, Австрии и Швейцарии. Мой стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. В реальном проде у меня стояла задача: как собрать разрозненные базы данных, файлы и внешние API в один управляемый граф, чтобы агенты могли работать по-настоящему автономно и безопасно?

Зачем агентам нужен единый граф данных

Текущая реальность: у клиентов десятки источников данных — Postgres, Supabase, внутренние REST/GraphQL API, S3-хранилища, PDF- и CSV-файлы. Каждый новый AI-агент требует отдельной интеграции, прописывания схем и парсинга. Это не масштабируется: сложность растет экспоненциально, а контроль над доступами и логированием расползается.

В продакшене это превращается в хаос: каждый агент либо получает слишком много прав, либо падает на «permission denied», когда доступ к нужному API или таблице не был заранее прописан.

GraphJin MCP: что реально решает, а что нет

Я выбрал GraphJin MCP как инструмент, который позволяет собрать разрозненные источники данных в единый управляемый граф. Почему не PostgREST или Hasura? GraphJin умеет маппить SQL-структуру в GraphQL-запросы, поддерживает RBAC-политику на уровне отдельных полей и может работать поверх существующего Postgres без миграции схем.

ИнструментGraphQL LayerRBACПоддержка файловAPI Gateway
GraphJin MCPДаГибкая (через YAML)Косвенно (через внешние плагины)Частично
HasuraДаСредняя (через роли)НетНет
SupabaseДаПростаяНетНет

У GraphJin, в отличие от Hasura, можно гибко описывать права для разных агентов через YAML-политику, а не только через роли. Но из коробки он не умеет маппить файловые хранилища — для этого пришлось городить отдельный слой на n8n и Supabase Storage, чтобы агенты могли работать с файлами как с частью графа.

Болевые точки внедрения

1. Интеграция файлов и blob-объектов

Самая большая боль — подключить S3 или Supabase Storage так, чтобы файлы были частью графа, а не отдельным API. Решил так:

  • В GraphJin описал виртуальные таблицы, которые маппятся на endpoint n8n для работы с файлами.
  • n8n выступает прокси: принимает GraphQL-запрос от агента, дергает Supabase Storage, возвращает ссылку или файл.

type File {
  id: ID!
  filename: String!
  url: String!
  metadata: JSON
}

# Пример запроса через GraphJin
query {
  files(where: {filename: {_ilike: "%invoice%"}}) {
    id
    url
  }
}

Но latency выросла: каждый вызов — это цепочка GraphJin → n8n → Storage API. В тестах на 1000 файловых запросов средняя задержка — 700 мс (по сравнению с 120 мс на «чистых» SQL-запросах).

2. RBAC и контроль доступа

В продакшене без fine-grained RBAC никак: один неправильный запрос — и агент получает доступ к «чужим» данным. В GraphJin права описываются в YAML:


roles:
  agent_read:
    tables:
      files:
        select: true
        insert: false
        update: false
        delete: false
      sensitive_table:
        select: false

При малейшей ошибке в YAML — агент либо падает с 403, либо получает лишние права. В одном проекте агент случайно получил доступ к сервисным логам — пришлось срочно пересматривать политики. Совет: всегда валидируйте YAML через CI-пайплайн (semgrep отлично находит дырки в политике).

3. Логирование и аудит

В Европе контроль аудита — не абстракция, а требование. В связке GraphJin + n8n логирование разносится по слоям: одни события пишутся в Postgres, другие — в отдельном логе n8n. Для полной трассировки пришлось собирать все логи в Grafana Loki через централизованный sink.


docker run -d \
  -p 3100:3100 \
  -v ./loki-config.yaml:/etc/loki/local-config.yaml \
  grafana/loki:2.9.0

Только после этого стало реально отслеживать, какой агент и когда обращался к каким данным — иначе на аудит NIS2 и ISO 27001 не выйти.

Связка с AI-агентами: как не получить RCE и SQLi

LLM-агенты любят генерировать «странные» запросы, особенно если промптинг не ограничен. В 3 последних деплоях я ловил одни и те же баги: агенты пытались делать SELECT * FROM sensitive_table или пробовали инжектить подзапросы через OpenAI Function calling.

Без валидации на уровне n8n и GraphJin можно легко получить SQL-инъекцию. Совет: обязательно прогоняйте все запросы через semgrep или bandit (оба инструмента реально находят CWE-89 паттерны, см. OWASP SQL Injection).

FAQ

Как быстро добавить новый источник данных в граф?

В GraphJin — за 30-40 минут: описать connection string, схему, права в YAML, добавить маппинг в n8n, если это API или файловое хранилище.

Что делать, если нужен audit log каждого действия агента?

Я собираю все логи из GraphJin, n8n и Supabase через Grafana Loki. Важно унифицировать формат логов и указывать agent_id во всех событиях.

Можно ли использовать GraphJin для RAG-агентов?

Да, если хранить embeddings в Postgres и описать их как часть графа. Но latency на больших данных может быть проблемой — лучше использовать faiss или pgvector.

Как ограничить права агента на уровне отдельных полей?

В GraphJin можно задавать права на level поля через YAML, например, скрыть поле email для агента с ролью agent_read.

Что делать, если агент пытается выполнить несанкционированный запрос?

Валидация запросов на уровне GraphJin и прокси через n8n, плюс ручное ревью логов — это must have для продакшена.

В каком слое вашей AI-пайплайна чаще всего всплывают критичные баги: интеграция файлов, RBAC или аудит логов? Я реально хочу узнать.

Я делаю бесплатный 30-мин аудит стека для DACH-команд, строящих AI в регулируемых рынках. Напишите в LinkedIn или @ger_dennis_ai.

Читать дальше
Открытый AI-кодовый агент в терминале: как Qwen-Code меняет работу с кодом и CI/CD без подписок
1000+ реальных AI-скиллов для агентов: что реально работает в проде и как быстро интегрировать
Почему 80% open-source AI-чатов для бизнеса не доходят до продакшена: реальные грабли self-hosted LibreChat (интеграции, безопасность, авторизация, API, memory, multi-agent)
Почему ваши AI-агенты не масштабируются: CowAgent — open-source harness с памятью и автоскиллами для реальных задач
Все статьи →
Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles