Закажи экспресс-аудит своего дела онлайн всего за 199 ₽
и получи рекомендации по улучшению - Жми сюда !

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

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

Нет других записей в этой рубрике.

Новости других рубрик

Архив рубрики ~Лента новостей~: Мы попробовали Claude Code в энтерпрайз-разработке и собрали за вас восемь проблем Архив рубрики ~Лента новостей~: Лиз Кендалл утверждает, что лейбористы заставят ИИ «работать на благо рабочих». Архив рубрики ~Лента новостей~: Итеративное декодирование LDPC/турбо, полярные коды — разбираем на C++ и сравниваем с MATLAB Архив рубрики ~Лента новостей~: Инсайдеры Tesla признают, что беспилотное вождение — это полная катастрофа Архив рубрики ~Лента новостей~: Теперь можно купить клубнику, выращенную на ферме с искусственным интеллектом Архив рубрики ~Лента новостей~: Как я «переезжал» своего ИИ-агента с OpenClaw на Hermes и собрал все грабли (чтобы Вы не собирали) Архив рубрики ~Лента новостей~: Архаические люди использовали огонь в пещере между 1,8 и 1,1 миллиона лет назад. Его следы нашли в южноафриканской пещере Вондерверк Архив рубрики ~Лента новостей~: В пятницу история с утечкой воздуха на Международной космической станции приняла тревожный оборот.