blog-post

Представляем Авто Встраивания: Поиск на основе ИИ стал простым

Мы рады поделиться новой функцией, которая делает создание семантических поисковых приложений таким же простым, как написание SQL: Авто Встраивания.
С этим дополнением Manticore Search заботится о генерации встраиваний за вас — никаких дополнительных конвейеров, никаких внешних сервисов, никаких хлопот.

Проблема до этого

До сих пор семантический поиск часто означал борьбу с:

  • Настройкой отдельных ML-конвейеров для генерации встраиваний
  • Управлением моделями и их зависимостями
  • Синхронизацией вашего приложения, сервиса встраиваний и поискового движка
  • Обработкой несоответствий в размерности векторов и предварительной обработкой
  • Убедившись, что встраивания всегда генерируются одинаково

Эти накладные расходы теперь исчезли.

Что такое Авто Встраивания?

С Авто Встраиваниями вы просто вставляете текст. Manticore автоматически:

Генерирует встраивания с использованием современных моделей
Эффективно их хранит в векторных индексах
Позволяет вам запрашивать на естественном языке
Скрывает сложность так, чтобы вы могли сосредоточиться на функциях, а не на инфраструктуре

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

Создайте семантическое поисковое приложение в 3 шага:

1. Создайте таблицу (пример SQL)

CREATE TABLE products (
    title TEXT,
    description TEXT,
    category STRING,
    price INT,
    vector FLOAT_VECTOR KNN_TYPE='hnsw' HNSW_SIMILARITY='l2'
        MODEL_NAME='sentence-transformers/all-MiniLM-L6-v2'
        FROM='title,description'
);

Настроено в одной строке: Manticore генерирует встраивания из title и description.

2. Вставьте данные (пример SQL)

INSERT INTO products(id, title, description, category, price) VALUES
  (1, 'green hiking backpack', 'Lightweight backpack suitable for hiking trails', 'outdoors', 5999),
  (2, 'laptop sleeve', 'Slim padded case for 15-inch laptops', 'electronics', 1999),
  (3, 'travel daypack', 'Compact daypack perfect for light travel or hiking', 'luggage', 3999),
  (4, 'black laptop backpack', 'Spacious backpack with padded laptop compartment', 'electronics', 6900),
  (5, 'mountain hiking bag', 'Durable trail-ready backpack for mountain hikes', 'outdoors', 8950),
  (6, 'everyday backpack', 'Versatile backpack for work, gym and school', 'general', 4900),
  (7, 'trail running shoes', 'Lightweight shoes with great grip for trails', 'footwear', 7500),
  (8, 'camping gear set', 'Complete set for weekend camping adventures', 'outdoors', 12000),
  (9, 'outdoor laptop pack', 'Trail-optimized backpack with laptop sleeve', 'outdoors', 7800),
  (10, 'compact hiking backpack', 'Light and foldable backpack for trail hikes', 'outdoors', 4200),
  (11, 'portable solar charger', 'Foldable solar panel charger for phones and USB devices', 'electronics', 3400),
  (12, 'reusable water bottle', 'Insulated stainless steel bottle keeps drinks cold or hot', 'lifestyle', 2500),
  (13, 'noise-cancelling headphones', 'Over-ear headphones with noise cancellation', 'electronics', 13900),
  (14, 'organic trail mix', 'Healthy mix of nuts and dried fruit, ideal for hikes', 'food', 899),
  (15, 'wireless mouse', 'Compact wireless mouse for laptops and desktops', 'electronics', 1599),
  (16, 'office chair', 'Ergonomic office chair with lumbar support and mesh back', 'furniture', 27900),
  (17, 'notebook and pen set', 'Elegant A5 notebook with smooth-writing pen', 'stationery', 1200),
  (18, 'children\'s adventure book', 'Illustrated storybook about outdoor exploration', 'books', 1299),
  (19, 'mini drone', 'Lightweight drone with HD camera and remote control', 'gadgets', 4599),
  (20, 'wooden puzzle box', 'Challenging mechanical puzzle made of natural wood', 'toys', 1899);

Этот разнообразный набор данных охватывает активный отдых, электронику, мебель, книги, игрушки и многое другое. Обратите внимание: векторы не нужны. Все встраивания генерируются автоматически из текста.

Примечание: Цены указаны в центах (например, 5999 = $59.99).

3. Поиск на естественном языке (пример SQL)

SELECT id, title, description, price, knn_dist()
FROM products 
WHERE knn(vector, 5, 'lightweight laptop backpack for trail hiking')
LIMIT 5;

Результаты:

+------+-------------------------+--------------------------------------------------+-------+------------+
| id   | title                   | description                                      | price | knn_dist() |
+------+-------------------------+--------------------------------------------------+-------+------------+
|    9 | outdoor laptop pack     | Trail-optimized backpack with laptop sleeve      |  7800 | 0.35392243 |
|    1 | green hiking backpack   | Lightweight backpack suitable for hiking trails  |  5999 | 0.53113687 |
|    5 | mountain hiking bag     | Durable trail-ready backpack for mountain hikes  |  8950 | 0.62034285 |
|    4 | black laptop backpack   | Spacious backpack with padded laptop compartment |  6900 | 0.65785009 |
|   10 | compact hiking backpack | Light and foldable backpack for trail hikes      |  4200 | 0.68591022 |
+------+-------------------------+--------------------------------------------------+-------+------------+

Запрос "легкий рюкзак для ноутбука для походов" нашел наиболее релевантный предмет первым: "рюкзак для ноутбука на открытом воздухе", который сочетает в себе как функции для ноутбука, так и для походов, за ним следуют рюкзаки для походов и продукты, ориентированные на ноутбуки.

Выберите правильную модель

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

  • 🏠 Локальные (модели Hugging Face) — без API-ключей, неограниченное использование
  • 🌐 Модели OpenAI — лучшее качество семантики
  • 🚀 Модели Voyage & Jina — оптимизированные для домена и языка

Гибридный поиск и фильтрация (пример SQL)

Объедините семантические, ключевые и структурированные фильтры в одном запросе:

SELECT id, price, highlight()
FROM products
WHERE knn(vector, 7, 'lightweight laptop backpack for trail hiking')
  AND category = 'outdoors'
  AND MATCH('"lightweight laptop backpack for trail hiking"/0.5');

Результаты:

+------+-------+-----------------------------------------------------------------------------------------------+
| id   | price | highlight()                                                                                   |
+------+-------+-----------------------------------------------------------------------------------------------+
|    9 |  7800 | outdoor <b>laptop</b> pack | <b>Trail</b>-optimized <b>backpack</b> with <b>laptop</b> sleeve |
|    1 |  5999 | green <b>hiking backpack</b> | <b>Lightweight backpack</b> suitable <b>for hiking</b> trails  |
|    5 |  8950 | mountain <b>hiking</b> bag | Durable <b>trail</b>-ready <b>backpack for</b> mountain hikes    |
|   10 |  4200 | compact <b>hiking backpack</b> | Light and foldable <b>backpack for trail</b> hikes           |
+------+-------+-----------------------------------------------------------------------------------------------+

Примечание: highlight() возвращает разметку (например, <b>...</b>).

Это мощное сочетание фильтрует по категории (outdoors), обеспечивает семантическую релевантность через встраивания, требует совпадений ключевых слов на текстовом уровне и выделяет совпадающие термины — все в одном запросе!

Полная поддержка HTTP/JSON API

Авто Встраивания работают безупречно с HTTP/JSON API Manticore, предоставляя ту же функциональность, что и SQL, но через REST-эндпоинты.

Вставка данных через JSON (пример HTTP/JSON API)

Используйте эндпоинт /insert - встраивания генерируются автоматически:

curl "http://localhost:9308/insert" -H "Content-Type: application/json" \
  -d '{
    "table": "products", 
    "id": 21, 
    "doc": {
      "title": "wireless headphones", 
      "description": "Bluetooth headphones with noise cancellation", 
      "category": "electronics", 
      "price": 15900
    }
  }'

Ответ:

{
  "table": "products",
  "id": 21,
  "created": true,
  "result": "created",
  "status": 201
}

Пакетные вставки с Авто Встраиваниями (пример HTTP/JSON API)

Эффективно вставьте несколько документов, используя /bulk:

curl "http://localhost:9308/bulk" -H "Content-Type: application/x-ndjson" \
  --data-raw $'{"insert": {"table": "products", "id": 22, "doc": {"title": "gaming laptop", "description": "High-performance laptop for gaming and work", "category": "electronics", "price": 159900}}}
{"insert": {"table": "products", "id": 23, "doc": {"title": "smartphone", "description": "Latest flagship smartphone with 5G", "category": "electronics", "price": 89900}}}
{"insert": {"table": "products", "id": 24, "doc": {"title": "tablet computer", "description": "Lightweight tablet for work and entertainment", "category": "electronics", "price": 49900}}}'

Ответ:

{
  "items": [
    {
      "bulk": {
        "table": "products",
        "_id": 24,
        "created": 3,
        "deleted": 0,
        "updated": 0,
        "result": "created",
        "status": 201
      }
    }
  ],
  "current_line": 3,
  "skipped_lines": 0,
  "errors": false,
  "error": ""
}

Пакетная операция успешно вставила 3 документа с автоматически сгенерированными встраиваниями.

Семантический поиск через JSON (пример HTTP/JSON API)

Ищите с помощью запросов на естественном языке, используя /search:

curl "http://localhost:9308/search" -H "Content-Type: application/json" \
  -d '{
    "table": "products",
    "_source": ["title"],
    "size": 5,
    "knn": {
      "field": "vector",
      "query": "outdoor hiking adventure",
      "k": 3
    }
  }'

Ответ:

{
  "took": 8,
  "timed_out": false,
  "hits": {
    "total": 24,
    "total_relation": "eq",
    "hits": [
      {
        "_id": 18,
        "_score": 1,
        "_knn_dist": 0.75467718,
        "_source": {
          "title": "children's adventure book"
        }
      },
      {
        "_id": 1,
        "_score": 1,
        "_knn_dist": 0.83226496,
        "_source": {
          "title": "green hiking backpack"
        }
      },
      {
        "_id": 5,
        "_score": 1,
        "_knn_dist": 0.89348459,
        "_source": {
          "title": "mountain hiking bag"
        }
      },
      {
        "_id": 10,
        "_score": 1,
        "_knn_dist": 0.92611158,
        "_source": {
          "title": "compact hiking backpack"
        }
      },
      {
        "_id": 3,
        "_score": 1,
        "_knn_dist": 0.98721427,
        "_source": {
          "title": "travel daypack"
        }
      }
    ]
  }
}

Запрос "приключение на открытом воздухе" нашел наиболее релевантное совпадение — "детская книга приключений" (0.754 расстояние), за которым следуют рюкзаки, связанные с походами. Это показывает, как семантический поиск может находить концептуально связанные предметы, выходящие за рамки буквальных совпадений ключевых слов.

Фильтрация и гибридный поиск через JSON (пример HTTP/JSON API)

Объедините семантический поиск с традиционными фильтрами:

curl "http://localhost:9308/search" -H "Content-Type: application/json" \
  -d '{
    "table": "products",
    "_source": ["title", "price"],
    "size": 5,
    "knn": {
      "field": "vector", 
      "query": "technology electronic device",
      "k": 5,
      "filter": {
        "range": {"price": {"gte": 15000}}
      }
    }
  }'

Ответ:

{
  "took": 10,
  "timed_out": false,
  "hits": {
    "total": 5,
    "total_relation": "eq",
    "hits": [
      {
        "_id": 24,
        "_score": 1,
        "_knn_dist": 1.31113040,
        "_source": {
          "title": "tablet computer",
          "price": 49900
        }
      },
      {
        "_id": 23,
        "_score": 1,
        "_knn_dist": 1.56920886,
        "_source": {
          "title": "smartphone",
          "price": 89900
        }
      },
      {
        "_id": 22,
        "_score": 1,
        "_knn_dist": 1.59042466,
        "_source": {
          "title": "gaming laptop",
          "price": 159900
        }
      },
      {
        "_id": 16,
        "_score": 1,
        "_knn_dist": 1.84979212,
        "_source": {
          "title": "office chair",
          "price": 27900
        }
      },
      {
        "_id": 21,
        "_score": 1,
        "_knn_dist": 1.88567829,
        "_source": {
          "title": "wireless headphones",
          "price": 15900
        }
      }
    ]
  }
}

Поиск "технологическое электронное устройство" с фильтрацией по цене (≥$150) правильно приоритизировал электронные товары и исключил товары с более низкой ценой, такие как рюкзаки для походов и мелкая электроника. Обратите внимание, как "планшетный компьютер" занимает первое место благодаря своему сильному семантическому совпадению с запросом.

Прямые векторы против Авто-встраиваемых текстовых запросов

HTTP/JSON API поддерживает оба варианта:

  • Авто-встраиваемые текстовые запросы: "query": "приключение на открытом воздухе" (авто-встраиваемый)
  • Прямые векторные запросы: "query": [0.1, 0.2, 0.3, ...] (предварительно вычисленный вектор)

Эта гибкость позволяет вам смешивать автоматически сгенерированные встраивания с пользовательскими векторами в одном приложении.

Интеграция OpenAI (пример OpenAI API)

Для еще лучшего семантического понимания вы можете использовать модели встраивания OpenAI:

-- Create table with OpenAI embeddings
CREATE TABLE products_openai (
  title TEXT,
  description TEXT,
  category string,
  price INT,
  vector FLOAT_VECTOR KNN_TYPE='hnsw' HNSW_SIMILARITY='l2'
    MODEL_NAME='openai/text-embedding-ada-002'
    FROM='title, description'
    API_KEY='your-openai-api-key'
);

-- Insert data (embeddings generated via OpenAI API)
INSERT INTO products_openai(title, description, category, price) VALUES
  ('smartphone device', 'latest mobile technology with advanced features', 'electronics', 79900),
  ('laptop computer', 'portable workstation for developers and professionals', 'electronics', 129900);

-- Search with natural language
SELECT id, title, description, knn_dist()
FROM products_openai 
WHERE knn(vector, 2, 'mobile phone technology');

Результаты:

+---------------------+-------------------+-------------------------------------------------------+------------+
| id                  | title             | description                                           | knn_dist() |
+---------------------+-------------------+-------------------------------------------------------+------------+
| 2309215617435041807 | smartphone device | latest mobile technology with advanced features       | 0.20333229 |
| 2309215617435041808 | laptop computer   | portable workstation for developers and professionals | 0.40197325 |
+---------------------+-------------------+-------------------------------------------------------+------------+

Модели OpenAI отлично справляются с пониманием нюансов отношений — "технология мобильного телефона" правильно определила смартфон как гораздо более релевантный, чем ноутбук.

Создано для производства

  • Быстро: индексация HNSW, опциональная квантизация, оптимизированное хранение
  • 🛡️ Надежно: несколько поставщиков моделей, обработка пустых векторов
  • 🔧 Гибко: встраивайте из любых полей, которые вы выберете

Примеры использования

Авто Встраивания упрощают создание:

  • 🛍️ Поиск в электронной коммерции: "водонепроницаемые походные ботинки" → находит релевантные продукты
  • 📚 Поиск документов: "контракты о конфиденциальности данных" → выводит юридические документы
  • 🎵 Рекомендации контента: "жизнерадостная музыка для тренировок" → совпадает по настроению
  • 🏠 Поиск недвижимости: "уютные квартиры рядом с парками" → находит дома, соответствующие образу жизни

Еще примеры из реальной жизни

Давайте посмотрим, как Авто Встраивания работают в различных сценариях поиска:

Поиск товаров для работы и продуктивности

SELECT id, title, description, price, knn_dist()
FROM products 
WHERE knn(vector, 3, 'work productivity office')
LIMIT 3;

Результаты:

+------+----------------------+----------------------------------------------------------+-------+------------+
| id   | title                | description                                              | price | knn_dist() |
+------+----------------------+----------------------------------------------------------+-------+------------+
|   24 | tablet computer      | Lightweight tablet for work and entertainment            | 49900 |   1.306459 |
|   16 | office chair         | Ergonomic office chair with lumbar support and mesh back | 27900 | 1.44871426 |
|   17 | notebook and pen set | Elegant A5 notebook with smooth-writing pen              |  1200 | 1.48466742 |
+------+----------------------+----------------------------------------------------------+-------+------------+

Поиск понял "работа продуктивность офис" и вернул офисную мебель, канцелярские принадлежности и подходящую для работы экипировку.

Умная фильтрация категорий

Иногда семантический поиск слишком широк. Давайте поищем "usb зарядное устройство для кемпинга":

SELECT id, title, description, price, knn_dist()
FROM products 
WHERE knn(vector, 5, 'usb charger for outdoor camping');

Топовые результаты включают множество элементов: солнечное зарядное устройство (0.888), уличные рюкзаки (1.139), туристическое снаряжение (1.213) и т.д.

Но когда мы добавляем фильтрацию по категориям:

SELECT id, highlight()
FROM products 
WHERE knn(vector, 5, 'usb charger for outdoor camping')
  AND category = 'electronics'
  AND MATCH('"usb charger for outdoor camping"/0.5')
LIMIT 3;

Точный результат:

+------+-------------------------------------------------------------------------------------------------------+
| id   | highlight()                                                                                           |
+------+-------------------------------------------------------------------------------------------------------+
|   11 | portable solar <b>charger</b> | Foldable solar panel <b>charger for</b> phones and <b>USB</b> devices |
+------+-------------------------------------------------------------------------------------------------------+

Примечание: highlight() возвращает разметку (например, <b>...</b>). Жирный шрифт в таблице для удобства чтения.

Комбинация семантического понимания + фильтрации по категориям + сопоставления ключевых слов дала нам именно то, что мы хотели!

Поиск интересных и креативных предметов

SELECT id, title, description, price, knn_dist()
FROM products 
WHERE knn(vector, 3, 'fun creative play toys')
LIMIT 3;

Результаты:

+------+---------------------------+----------------------------------------------------+-------+------------+
| id   | title                     | description                                        | price | knn_dist() |
+------+---------------------------+----------------------------------------------------+-------+------------+
|    8 | camping gear set          | Complete set for weekend camping adventures        | 12000 | 1.30462146 |
|   20 | wooden puzzle box         | Challenging mechanical puzzle made of natural wood |  1899 |   1.305056 |
|   18 | children's adventure book | Illustrated storybook about outdoor exploration    |  1299 | 1.47192979 |
+------+---------------------------+----------------------------------------------------+-------+------------+

Авто-встраивания поняли концепцию "веселой креативной игры" и нашли приключенческое снаряжение, головоломки и детские книги — все предметы, которые относятся к креативности и игре!

За кулисами

Авто-встраивания полагаются на:

  • Трансформеры предложений для семантического понимания
  • HNSW для быстрого поиска по сходству
  • Умное кэширование для эффективного вывода
  • Многообразные API для гибкости

Попробуйте сегодня

Как вы видели из наших примеров, Авто-встраивания обеспечивают мощные возможности семантического поиска с минимальной настройкой. Независимо от того, строите ли вы:

  • Платформы электронной коммерции с поиском продуктов на естественном языке
  • Системы управления контентом с интеллектуальным обнаружением документов
  • Рекомендательные системы, которые понимают намерения пользователей
  • Базы знаний с семантическим ответом на вопросы

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

🚀 Готовы преобразовать ваш опыт поиска?

👉 Скачайте Manticore Search и начните строить с Авто-встраиваниями сегодня.
📚 Ознакомьтесь с документацией по KNN поиску для подробных руководств.
💬 Присоединяйтесь к нашему сообществу в Slack , чтобы поделиться своими историями успеха.


Вопросы или отзывы? Присоединяйтесь к нашему форуму сообщества или следите за нами в Twitter .

Установить Manticore Search

Установить Manticore Search