Интеграция ИИ в Laravel
Большинство туториалов по ИИ предполагают, что вы используете Python.
После 12 лет разработки PHP-приложений я недавно добавил функции ИИ в рабочий Laravel-дашборд. Я использовал его для преобразования сырых данных в понятные человеку отчеты.
Сложность заключалась не в коде. Сложность была в поиске качественного контента по этой теме на PHP.
Вот как создать чистую, готовую к продакшену интеграцию ИИ в Laravel.
Архитектура
Не разбрасывайте вызовы API по контроллерам. Вместо этого используйте паттерн «драйвер» (driver pattern). Это позволит вам переключаться между Claude и OpenAI, изменив всего одну строку в вашем .env файле.
1. Определите контракт
Создайте AiClientInterface. Это гарантирует, что и Claude, и OpenAI будут следовать одним и тем же правилам.
2. Создайте драйверы
Создайте ClaudeClient и OpenAiClient. Используйте HTTP-клиент Laravel для обработки запросов. Это упростит работу с таймаутами и повторными попытками (retries).
3. Используйте Service Container
Привяжите ваш интерфейс к конкретному клиенту в AppServiceProvider. Используйте оператор match, чтобы выбирать провайдера на основе вашей конфигурации.
Различия
Чтобы избежать ошибок, вы должны знать эти пять нюансов:
• Claude использует x-api-key в заголовке. OpenAI использует Authorization: Bearer.
• Claude требует заголовок anthropic-version.
• Claude требует max_tokens. В OpenAI этот параметр необязателен.
• Claude использует поле system на верхнем уровне. OpenAI использует сообщение с role: system.
• Пути в JSON-ответах различаются. Claude использует content[0].text. OpenAI использует choices[0].message.content.
Советы для продакшена
• Используйте кэширование: вызовы ИИ работают медленно и стоят денег. Если данные не изменились, отдавайте результат из кэша. Это может снизить расходы на 70%.
• Используйте очереди: никогда не заставляйте пользователя ждать ответа API 10 секунд. Отправьте фоновую задачу (background job) и уведомьте пользователя, когда результат будет готов.
• Обрабатывайте ошибки: API могут давать сбои. Оборачивайте вызовы в блоки try-catch. Если ИИ не ответил, покажите сырые данные вместо сломанной страницы.
• Устанавливайте лимиты: всегда устанавливайте max_tokens, чтобы контролировать расходы. Используйте более компактные и дешевые модели для простых задач, таких как суммаризация.
Вам не нужно учить Python, чтобы создавать функции с ИИ. Ваши навыки PHP здесь работают идеально.
