AI в PHP-проекте – это не "магия модели", а инженерная система. Модель – лишь один из компонентов. Вокруг нее всегда есть данные, пайплайны, очереди, кэш, мониторинг, fallback-логика и бизнес-ограничения.
В этой главе мы разберем:
типовые архитектуры интеграции AI в PHP
orchestration – как управлять цепочками вызовов
математическую основу (что реально происходит под капотом)
практические PHP-примеры
где ставить границы и как не сломать прод
AI как слой над существующей архитектурой
Важно понимать: AI почти никогда не является "ядром" системы. Он – слой принятия решений.
Классическая web-архитектура:
User → Controller → Service → Repository → DB
С использованием AI:
User → Controller → AI Service → Orchestrator
↓
Vector DB / LLM / Classifier
↓
Cache / Queue
AI-сервис становится отдельным уровнем – с собственной логикой.
Основные архитектурные паттерны
Sync-интеграция (inline inference)
Самый простой вариант: при запросе вызываем модель и возвращаем результат.
Пример – модерация комментария.
Плюсы: просто.
Минусы: задержка, зависимость от внешнего сервиса.
Async-интеграция (через очередь)
Подходит для тяжелых задач: генерация отчета, анализ документа.
В PHP можно использовать:
Redis
RabbitMQ
Symfony Messenger
Асинхронность – ключ к масштабируемости.
AI как микросервис
Если проект растет, AI лучше вынести в отдельный сервис.
Плюсы:
изоляция
масштабирование отдельно
разные языки
Минусы:
DevOps сложнее
сеть добавляет latency
Математика под капотом (что происходит реально)
AI – это функция:
f(x;θ)→y
Где:
x – входные данные
θ – параметры модели
y – предсказание
В продакшене мы не обучаем θ. Мы используем уже обученную модель.
Вероятностная интерпретация
Большинство моделей возвращают:
P(y∣x)
Например:
P(spam∣email)=0.92
Решение:
Где threshold – бизнес-порог (например 0.8).
Эмбеддинги и косинусная близость
Векторизация текста:
text→embedding∈Rn
Сравнение:
cos(θ)=∥A∥∥B∥A⋅B
Где:
A⋅B– скалярное произведение
∥A∥ – длина вектора
Если cos ≈ 1 → тексты похожи.
Напомним в качестве примера PHP-реализацию косинусной близости:
Orchestration – управление AI-пайплайном
Orchestration – это управление шагами:
Принять запрос
Разбить на чанки
Создать эмбеддинги
Найти релевантные документы
Сформировать prompt
Вызвать LLM
Проверить ответ
Закэшировать
Это уже не "вызов модели", а workflow.
Простой Orchestrator в PHP
Каждый шаг изолирован.
Это уже архитектура, а не "AI-функция".
RAG в PHP-проекте
RAG – Retrieval Augmented Generation.
Связанные технологии:
LLPhant
OpenAI
Pinecone
Пайплайн:
[Placeholder – Diagram 1: RAG Pipeline]
Промпт для генерации картинки:
“Draw a clean architecture diagram of a RAG pipeline: user query → embedding model → vector database → context builder → large language model → answer. Minimalistic style, white background, arrows between blocks.”
Кэширование AI
AI дорогой. Поэтому:
кэшируйте ответы
кэшируйте эмбеддинги
кэшируйте промпты
Пример:
Guardrails и валидация
LLM может:
галлюцинировать
нарушать формат
давать неожиданные ответы
Поэтому:
Валидируйте JSON
Проверяйте confidence
Делайте fallback
Monitoring AI
Нужно измерять:
latency
error rate
average token usage
drift
Простейшая метрика drift:
D=∥μnew−μold∥
Где μ – средний embedding.
Если D растет – данные меняются.
Когда orchestration становится сложным
Если:
несколько моделей
цепочки инструментов
агентные сценарии
условия if/else
Тогда нужен state machine.
Упрощенная схема:
[Placeholder – Diagram 2: AI State Machine]
Промпт:
“Draw a state machine diagram for an AI agent: Start → Retrieve tool → LLM reasoning → Decision → either Call API or Return Answer. Clean, minimal, software architecture style.”
Типичные ошибки в PHP AI-проектах
Нет кэша
Нет лимитов
Нет retry
Нет логирования промптов (prompt)
Нет разделения ответственности (separation of concerns)
class CommentModerationService {
public function isToxic(string $text): bool {
$response = $this->callModel($text);
return $response['toxicity_score'] > 0.8;
}
private function callModel(string $text): array {
// HTTP-запрос к AI API
// или локальная модель
return [
'toxicity_score' => 0.91
];
}
}
User → API → Queue → Worker → AI → DB
class AnalyzeDocumentJob {
public function handle(Document $doc) {
$embedding = $this->embeddingService->vectorize($doc->text);
$this->vectorRepository->store($doc->id, $embedding);
}
}