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

Как я добавил систему рекомендаций контента в легаси-проект на 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~ Поселил ИИ‑агента в чёлку макбука: он слушает мой день и… Архив рубрики ~Коротко из Telegram~ Немой парень впервые признался в любви СИЛОЙ МЫСЛИ — его………… Новости робототехники GM делает ставку на вычислительные технологии и искусственный интеллект, которые, по её мнению, помогут ей конкурировать с китайскими автопроизводителями. Архив рубрики ~Коротко из Telegram~ В легендарный Need for Speed: Underground 2 теперь можно поиграть… Архив рубрики ~Коротко из Telegram~ ИИ придумал пистолет, и его напечатали на 3D-принтере Однозарядный пистолет… Архив рубрики ~Коротко из Telegram~ В Швейцарии с помощью бактерий разработали печатный материал, похожий на бетон Архив рубрики ~Коротко из Telegram~ Модели искусственного интеллекта позволили России применять технологии для лучших крылатых… Архив рубрики ~Коротко из Telegram~ Преимущества использования искусственного интеллекта в медицине зависят от уровня подготовки… Архив рубрики ~Коротко из Telegram~ Почему синтаксис Nova выглядит так: 11 споров с Claude о… Архив рубрики ~Коротко из Telegram~ [Перевод] О сознании и интегрированной информации. Кристоф Кох (интервью) Сознанием… Архив рубрики ~Коротко из Telegram~ Больше половины отпечатков пальцев на терракотовых воинах оставили женщины и… Архив рубрики ~Коротко из Telegram~ В ИТМО учат роботов понимать пространство, а не просто видеть…… Архив рубрики ~Коротко из Telegram~ Теперь можно буквально заглянуть внутрь любого механизма. Claude Code научили…… Архив рубрики ~Коротко из Telegram~ PS5 снова взломали — хакер запустил меню разработчика на последней…… Архив рубрики ~Коротко из Telegram~ Поселил ИИ‑агента в чёлку макбука: он слушает мой день и… Архив рубрики ~Коротко из Telegram~ Немой парень впервые признался в любви СИЛОЙ МЫСЛИ — его………… Новости робототехники GM делает ставку на вычислительные технологии и искусственный интеллект, которые, по её мнению, помогут ей конкурировать с китайскими автопроизводителями. Архив рубрики ~Коротко из Telegram~ В легендарный Need for Speed: Underground 2 теперь можно поиграть… Архив рубрики ~Коротко из Telegram~ ИИ придумал пистолет, и его напечатали на 3D-принтере Однозарядный пистолет… Архив рубрики ~Коротко из Telegram~ В Швейцарии с помощью бактерий разработали печатный материал, похожий на бетон Архив рубрики ~Коротко из Telegram~ Модели искусственного интеллекта позволили России применять технологии для лучших крылатых… Архив рубрики ~Коротко из Telegram~ Преимущества использования искусственного интеллекта в медицине зависят от уровня подготовки… Архив рубрики ~Коротко из Telegram~ Почему синтаксис Nova выглядит так: 11 споров с Claude о… Архив рубрики ~Коротко из Telegram~ [Перевод] О сознании и интегрированной информации. Кристоф Кох (интервью) Сознанием… Архив рубрики ~Коротко из Telegram~ Больше половины отпечатков пальцев на терракотовых воинах оставили женщины и… Архив рубрики ~Коротко из Telegram~ В ИТМО учат роботов понимать пространство, а не просто видеть…… Архив рубрики ~Коротко из Telegram~ Теперь можно буквально заглянуть внутрь любого механизма. Claude Code научили…… Архив рубрики ~Коротко из Telegram~ PS5 снова взломали — хакер запустил меню разработчика на последней……