Архив рубрики ~Лента новостей~

Как я добавил систему рекомендаций контента в легаси-проект на PHP 7.2

Как я добавил систему рекомендаций контента в легаси-проект на PHP 7.2

Привет, хабр! Хочу поделиться историей о том, как столкнулся с проблемой, возможно знакомой многим разработчикам: необходимость внедрить систему рекомендаций в проект, который все еще работает на старой версии php 7.2

Обновление версии php в legacy-проекте — это часто настоящий квест. То времени нет, то бизнес-фичи надо пилить, то еще какие-то причины. И часто бывает, что обновление версии php в командах откладывается на потом. Так проекты, даже очень большие живут годами на старых версиях php.

Для наших задач подходила база qdrant, но все вменяемые клиенты для php 7.2 отсутствовали. Мир уже давно ушел вперед, а в php сложно найти что-то толковое для работы с современным стеком. Есть несколько клиентов для php, но там версии от 8.1

Вместо того чтобы грустить о недостаточной поддержке php в ai-сообществе, я просто написал свой клиент. И сегодня хочу рассказать о нем.

Что такое векторный поиск и при чем здесь AI?

Если вы не сталкивались с векторным поиском, то представьте себе, что вы смотрите контент в блоге, а на основе смысла статьи вам предлагают похожие статьи.

Как это работает?

  1. Векторизация: текст, изображение или другие данные с помощью нейросетевой модели превращаются в набор чисел — вектор. Это как цифровое представление смысла.

  2. Поиск по близости: Векторы помещаются в многомерное пространство, где семантически близкие объекты находятся рядом. Поиск сводится к нахождению «соседей» для вашего вектора-запроса.

Никакой магии, чистая математика. Вместе с вектором в базу можно сохранить полезные данные, по которым можно достать информацию из других источников.

С помощью этой связки — моей библиотеки и Qdrant — вы можете добавить в свой «старый» проект такие современные фичи:

  • Умный поиск по документации или товарам, который понимает, что вы имеете в виду, а не просто ищет совпадения слов.

  • Рекомендательная система «похожие товары/контент», которая работает на основе семантического сходства, а не просто просмотренных категорий.

  • Поиск дубликатов — находить почти идентичные статьи, товары или пользовательские запросы.

  • Автоматическая категоризация контента — когда система сама понимает, к каким темам относится текст.

  • Построение полноценного RAG для поддержки.

Откуда брать векторы?

Ключевой момент в этом всём — векторизация. Есть несколько путей:

  • API популярных сервисов, например OpenAI. Качество векторов высокое, но платные запросы.

  • Локальные модели, например nomic-embed-text поставить можно с помощью ollama. Рекомендую мою библиотеку для работы c ollama сервер на php 7.2 и выше

Есть и свои нюансы, с которыми стоит поэкспериментировать. Например, какой именно контент превращать в вектор — весь текст целиком, отдельные абзацы или может быть ключевые фразы? Разные подходы дают разный результат.

Но в целом пайплайн работы выглядит так:

  1. Индексируем данные: Берем весь наш контент (статьи, товары, документы), превращаем его в векторы и сохраняем в Qdrant.

  2. Ищем по запросу: Когда пользователь что-то ищет, мы превращаем его запрос в вектор и ищем самые близкие по смыслу вектора в базе.

Технически это не сложнее работы с обычной базой данных.

Быстрый старт

Установка библиотеки:

composer require tenqz/qdrant

А вот минимальный пример, как это работает:

<?php require_once ‘vendor/autoload.php’; use TenqzQdrantQdrantClient; use TenqzQdrantTransportInfrastructureFactoryCurlHttpClientFactory; // Создаем клиента $factory = new CurlHttpClientFactory(); $httpClient = $factory->create(«localhost», 6333); $client = new QdrantClient($httpClient); // Создаем коллекцию $client->createCollection(«articles», 384, «Cosine»); // Добавляем векторы статей $client->upsertPoints(«articles», [ [ «id» => 1, «vector» => [0.12, 0.34, 0.56, /* … */], // ваш вектор «payload» => [ «title» => «Векторный поиск для PHP», «url» => «/blog/vector-search-php» ] ] ]); // Ищем похожие статьи $results = $client->search( «articles», [0.11, 0.35, 0.55, /* … */], // вектор запроса 5 // количество похожих записей );

В реальном проекте размер вектора будет 384, 768 или больше — в зависимости от модели. И конечно, вам нужно где-то получать эти векторы, но как я писал выше — это отдельная, решаемая задача.

А вам приходилось в легаси проекты внедрять AI? Буду рад услышать ваши кейсы и опыт в комментариях!

Ссылки:

  • GitHub библиотеки для работы с Qdrant

  • GitHub библиотеки для работы с Ollama

  • Документация Qdrant

Источник: habr.com

Оцените материал:

Поделиться
Понравилась статья? Расскажите другим
ВКонтакте
Читайте также
Архив рубрики ~Коротко из Telegram~ Нейронку БЕЗ ЦЕНЗУРЫ выпустили в открытый доступ — Gemma 4… Архив рубрики ~Коротко из Telegram~ Нашли комбайн для скачивания видео и музыки практически отовсюду —… Архив рубрики ~Коротко из Telegram~ Инструменты дня 🔍 Кьюи Перепроверяет ChatGPT, Claude и Gemini перед отправкой, потому… Архив рубрики ~Коротко из Telegram~ Kimi K3 нашла уязвимость в Redis за 27 минут Исследователь… Архив рубрики ~Коротко из Telegram~ Alibaba представила мощный движок синтеза речи Qwen-Audio-3.0-TTS Команда Qwen выпустила… Архив рубрики ~Коротко из Telegram~ Lightricks научила ИИ убирать лишних людей и машины с видео… Архив рубрики ~Коротко из Telegram~ Copilot теперь живет в «Проводнике» Windows 11 Microsoft продолжает встраивать… Архив рубрики ~Коротко из Telegram~ GitHub Copilot теперь поддерживает модель Gemini 3.6 Flash GitHub начал… Архив рубрики ~Коротко из Telegram~ Anthropic представила плагин Claude Security для поиска уязвимостей Anthropic выпустила… Архив рубрики ~Коротко из Telegram~ Cursor Router: снижение стоимости запросов к ИИ на 60% Команда… Архив рубрики ~Коротко из Telegram~ Российский разработчик СУБД Postgres Pro может сократить до 30% сотрудников…. Архив рубрики ~Коротко из Telegram~ Veon досрочно выкупил облигации на $886 млн, одновременно разместив новый… Архив рубрики ~Коротко из Telegram~ 💢 Иван Паломарес Каррaскоса (Machine Learning Mastery) разбирает пять стратегий… Архив рубрики ~Коротко из Telegram~ ✅ CEO Cloudflare Мэттью Принс на мероприятии Axios в Каннах… Архив рубрики ~Коротко из Telegram~ Нейронку БЕЗ ЦЕНЗУРЫ выпустили в открытый доступ — Gemma 4… Архив рубрики ~Коротко из Telegram~ Нашли комбайн для скачивания видео и музыки практически отовсюду —… Архив рубрики ~Коротко из Telegram~ Инструменты дня 🔍 Кьюи Перепроверяет ChatGPT, Claude и Gemini перед отправкой, потому… Архив рубрики ~Коротко из Telegram~ Kimi K3 нашла уязвимость в Redis за 27 минут Исследователь… Архив рубрики ~Коротко из Telegram~ Alibaba представила мощный движок синтеза речи Qwen-Audio-3.0-TTS Команда Qwen выпустила… Архив рубрики ~Коротко из Telegram~ Lightricks научила ИИ убирать лишних людей и машины с видео… Архив рубрики ~Коротко из Telegram~ Copilot теперь живет в «Проводнике» Windows 11 Microsoft продолжает встраивать… Архив рубрики ~Коротко из Telegram~ GitHub Copilot теперь поддерживает модель Gemini 3.6 Flash GitHub начал… Архив рубрики ~Коротко из Telegram~ Anthropic представила плагин Claude Security для поиска уязвимостей Anthropic выпустила… Архив рубрики ~Коротко из Telegram~ Cursor Router: снижение стоимости запросов к ИИ на 60% Команда… Архив рубрики ~Коротко из Telegram~ Российский разработчик СУБД Postgres Pro может сократить до 30% сотрудников…. Архив рубрики ~Коротко из Telegram~ Veon досрочно выкупил облигации на $886 млн, одновременно разместив новый… Архив рубрики ~Коротко из Telegram~ 💢 Иван Паломарес Каррaскоса (Machine Learning Mastery) разбирает пять стратегий… Архив рубрики ~Коротко из Telegram~ ✅ CEO Cloudflare Мэттью Принс на мероприятии Axios в Каннах…