Мы рады представить новую функцию, которая делает создание приложений семантического поиска таким же простым, как написание SQL: Auto Embeddings.
С этим дополнением Manticore Search берёт на себя генерацию эмбеддингов за вас — без дополнительных конвейеров, без внешних сервисов, без хлопот.
Проблема до этого
До сих пор семантический поиск часто означал борьбу с:
- Настройкой отдельных ML‑конвейеров для генерации эмбеддингов
- Управлением моделями и их зависимостями
- Синхронизацией вашего приложения, сервиса эмбеддингов и поискового движка
- Обработкой несоответствий размерности векторов и предобработкой
- Обеспечением того, чтобы эмбеддинги всегда генерировались одинаково
Эти накладные расходы теперь исчезли.
Что такое Auto Embeddings?
С Auto Embeddings вы просто вставляете текст. 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
Auto Embeddings работают без проблем с 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
}
Массовая вставка с Auto Embeddings (пример 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": "outdoor hiking adventure"(авто‑эмбеддед) - Прямые векторные запросы:
"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, опциональная квантизация, оптимизированное хранение
- 🛡️ Надёжно: несколько поставщиков моделей, обработка пустых векторов
- 🔧 Гибко: эмбеддинг из любых полей, которые вы выбираете
Сценарии использования
Auto Embeddings упрощают создание:
- 🛍️ Поиск в e‑commerce: «водонепроницаемые походные ботинки» → находит релевантные товары
- 📚 Поиск документов: «контракты о защите данных» → выводит юридические документы
- 🎵 Рекомендации контента: «энергичная музыка для тренировок» → подбирает по настроению
- 🏠 Поиск недвижимости: «уютные квартиры рядом с парками» → находит дома, соответствующие образу жизни
Больше реальных примеров
Посмотрим Auto Embeddings в действии с различными сценариями поиска:
Поиск рабочих и продуктивных предметов
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');
Топовые результаты включают множество предметов: solar charger (0.888), outdoor packs (1.139), hiking gear (1.213), etc.
Но когда мы добавляем фильтрацию по категориям:
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 |
+------+---------------------------+----------------------------------------------------+-------+------------+
Auto Embeddings понял концепцию «fun creative play» и нашел снаряжение для приключений, головоломки и детские книги — все предметы, связанные с креативностью и игрой!
За кулисами
Auto Embeddings опираются на:
- Sentence Transformers для семантического понимания
- HNSW для быстрого поиска похожих элементов
- Smart caching для эффективного вывода
- Multi-provider APIs для гибкости
Попробуйте сегодня
Как вы видели из наших примеров, Auto Embeddings предоставляют мощные возможности семантического поиска с минимальными настройками. Независимо от того, создаете ли вы:
- E-commerce platforms с поиском товаров на естественном языке
- Content management systems с интеллектуальным обнаружением документов
- Recommendation engines которые понимают намерения пользователя
- Knowledge bases с семантическим ответом на вопросы
Auto Embeddings устраняют самую сложную часть — управление эмбеддингами — чтобы вы могли сосредоточиться на создании отличных функций, которые любят пользователи.
🚀 Готовы преобразовать ваш поисковый опыт?
👉
Download Manticore Search
и начните создавать с Auto Embeddings уже сегодня.
📚 Ознакомьтесь с
документацией по поиску KNN
для подробных руководств.
💬 Присоединяйтесь к нашему
сообществу Slack
, чтобы делиться историями успеха.
Вопросы или отзывы? Присоединяйтесь к нашему форуму сообщества или подпишитесь на нас в Twitter .
