ideipro logotyp

Как я добавил систему рекомендаций контента в легаси-проект на 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

✅ Найденные теги: Как, новости

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Фото сгенерированных лиц: исследование показывает, что люди не могут отличить настоящие лица от сгенерированных
Нейросети построили капитализм за трое суток: 100 агентов Claude заперли…
Скетч: цифровой осьминог и виртуальный мир внутри компьютера с человечком.
Сцена с жестами пальцами, где один жест символизирует "VPN", а другой "KHP".
‼️Paramount купила Warner Bros. Discovery — сумма сделки составила безумные…
Скриншот репозитория GitHub "Claude Scientific Skills" AI для научных исследований.
Структура эффективного запроса Claude с элементами задачи, контекста и референса.
Эскиз и готовая веб-страница платформы для AI-дизайна в современном темном режиме.
ideipro logotyp
Image Not Found
Звёздное небо с галактиками и туманностями, космос, Вселенная, астрофотография.

Система оповещения обсерватории Рубина отправила 800 000 сигналов в первую ночь наблюдений.

Астрономы будут получать оповещения о небесных явлениях в течение нескольких минут после их обнаружения. Теренс О'Брайен, редактор раздела «Выходные». Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной…

Мар 2, 2026
Женщина с длинными тёмными волосами в синем свете, нейтральный фон.

Расследование в отношении 61-фунтовой машины, которая «пожирает» пластик и выплевывает кирпичи.

Обзор компактного пресса для мягкого пластика Clear Drop — и что будет дальше. Шон Холлистер, старший редактор Публикации этого автора будут добавляться в вашу ежедневную рассылку по электронной почте и в ленту новостей на главной странице вашего…

Мар 2, 2026
Черный углеродное волокно с текстурой плетения, отражающий свет.

Материал будущего: как работает «бессмертный» композит

Учёные из Университета штата Северная Каролина представили композит нового поколения, способный самостоятельно восстанавливаться после серьёзных повреждений.  Речь идёт о модифицированном армированном волокном полимере (FRP), который не просто сохраняет прочность при малом весе, но и способен «залечивать» внутренние…

Мар 2, 2026
Круглый экран с изображением замка и горы, рядом электронная плата.

Круглый дисплей Waveshare для креативных проектов

Круглый 7-дюймовый сенсорный дисплей от Waveshare создан для разработчиков и дизайнеров, которым нужен нестандартный экран.  Это IPS-панель с разрешением 1 080×1 080 пикселей, поддержкой 10-точечного ёмкостного сенсора, оптической склейкой и защитным закалённым стеклом, выполненная в круглом форм-факторе.…

Мар 2, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых