blog-post

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

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

Проблема Ранее

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

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

Этот overhead теперь исчез.

Что Такое Авто Эмбеддинги?

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

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

Как Это Работает

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

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 (Пример API OpenAI)

Для еще лучшего семантического понимания вы можете использовать модели эмбеддингов 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