Как быстро интегрировать любую ML-модель в LLM-агентов: фреймворк Predikit для вызова моделей через LLM
Я — Денис Шохирев, архитект AI-решений в Erlangen. За последние полгода я внедрил 14 production LLM-агентов для клиентов DACH на стеке Claude, Supabase, n8n, Doppler и локальный Postgres. Главная боль: интеграция своих ML-моделей в пайплайн LLM-агентов для живых B2B-кейсов, а не демо. Почему интеграция ML-моделей в LLM-агентов — это всегда боль В реальных проектах, где LLM-агенты работают с чувствительными данными (финтех, логистика, индустриальная автоматизация), часто требуется встроить сво
Я — Денис Шохирев, архитект AI-решений в Erlangen. За последние полгода я внедрил 14 production LLM-агентов для клиентов DACH на стеке Claude, Supabase, n8n, Doppler и локальный Postgres. Главная боль: интеграция своих ML-моделей в пайплайн LLM-агентов для живых B2B-кейсов, а не демо.
Почему интеграция ML-моделей в LLM-агентов — это всегда боль
В реальных проектах, где LLM-агенты работают с чувствительными данными (финтех, логистика, индустриальная автоматизация), часто требуется встроить свои ML-модели: скоринг, валидация, классификация событий, прогнозы. LLM сам по себе не может напрямую вызвать вашу модель: нужен внешний вызов, правильная оркестрация, валидация и логгирование. Без универсального подхода каждая интеграция — ручная сборка, хаос в API, разное качество логирования и сложная поддержка.
Паттерн: ML-модель как callable endpoint для LLM
Фреймворк Predikit: как работает
Я использую паттерн, который назвал Predikit: обертка вокруг ML-модели, которая превращает её в стандартный callable endpoint (HTTP/gRPC), с четкой схемой input/output и встроенным контролем доступа. LLM-агент вызывает этот endpoint через функцию или tool-call, получает результат в структурированном формате и использует дальше по цепочке.
Преимущества такого подхода
- Любая ML-модель (Python, Torch, sklearn, CatBoost) превращается в сервис с единым протоколом вызова.
- Вся логика контроля доступа, валидации, rate-limiting и аудита централизована.
- Легко масштабировать и заменять backend без изменений в LLM-промптах и пайплайне.
Реализация Predikit: детали на Python
Базовая структура сервиса на FastAPI
Самый быстрый способ — FastAPI + pydantic схемы. Пример: у вас есть ML-модель для скоринга транзакций (fraud detection). Создается endpoint /predict, который принимает input (например, JSON с транзакцией), валидирует, вызывает модель, возвращает результат и логирует вызов.
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import joblib
app = FastAPI()
model = joblib.load("fraud_model.pkl")
class Transaction(BaseModel):
amount: float
sender_id: str
receiver_id: str
class Prediction(BaseModel):
is_fraud: bool
score: float
@app.post("/predict", response_model=Prediction)
def predict(tx: Transaction):
# Схема input/output согласована с LLM prompt
features = [tx.amount, hash(tx.sender_id), hash(tx.receiver_id)]
score = float(model.predict_proba([features])[0][1])
return {"is_fraud": score > 0.7, "score": score}
Интеграция с LLM через function calling (на примере Claude или OpenAI)
В prompt LLM добавляется описание функции, которую можно вызвать:
# Пример schema для function calling OpenAI
{
"name": "predict_transaction",
"description": "Классификация транзакции на мошенничество",
"parameters": {
"type": "object",
"properties": {
"amount": {"type": "number"},
"sender_id": {"type": "string"},
"receiver_id": {"type": "string"}
},
"required": ["amount", "sender_id", "receiver_id"]
}
}
LLM-агент автоматически вызывает ваш Predikit endpoint при необходимости.
Безопасность: контроль доступа и аудит
В production нельзя просто публиковать endpoint без авторизации. Я добавляю JWT или API-key и обязательно логирую все вызовы через отдельную таблицу в Postgres (audit trail). Это позволяет отслеживать все запросы и связанных пользователей.
Сравнение подходов интеграции
| Подход | Время на интеграцию | Контроль доступа | Масштабируемость |
|---|---|---|---|
| Прямой импорт ML-кода в LLM pipeline | 3-5 дней | Ручная | Плохо |
| Predikit Endpoint | 1 день | Централизованный | Отлично |
| Внешний ML API (SageMaker, Vertex AI) | 2-4 дня | Управляется провайдером | Хорошо, но дорого |
Ошибки и ловушки: что не делать
- Не оставляйте endpoint открытым для всех — всегда проверяйте авторизацию.
- Не пропускайте валидацию input: LLM может генерировать некорректные параметры.
- Не используйте pickle для передачи модели между сервисами — используйте joblib или ONNX.
- Не логируйте чувствительные данные в явном виде — только хэши/идентификаторы.
FAQ
Можно ли использовать этот паттерн для моделей на других языках (например, Java)?
Да, Predikit — это не привязка к Python. Важно обеспечить стандартный API (REST/gRPC) и четкую схему input/output.
Как тестировать интеграцию LLM ↔ ML endpoint?
Я использую unit-тесты на FastAPI endpoint (pytest), плюс end-to-end тесты с реальным LLM через n8n workflow.
Что делать, если модель требует GPU?
Поднимайте Predikit endpoint на отдельном сервере с доступом к GPU, используйте очередь через Celery или Redis, если вызовы долгие.
Как логировать и аудировать вызовы?
Создайте отдельную таблицу в Postgres (audit_logs), сохраняйте время, параметры (обфусцированные), user_id и результат.
Можно ли использовать Predikit с self-hosted LLM?
Да, LLM просто вызывает endpoint по стандарту (OpenAI function calling, Claude tool use, свой custom function) — неважно, где хостится LLM.
Ваша команда интегрирует ML-модели в LLM-агентов через прямой импорт кода или через отдельные сервисы? На каком этапе чаще всего возникают production-ошибки: валидация input, контроль доступа или логирование? Я провожу бесплатный разовый аудит стека для DACH-компаний, которые строят AI-системы в регулируемых отраслях. Пишите в LinkedIn или на @ger_dennis_ai.
Turn your process into an AI system
Fixed price. Production quality. DACH B2B focus.