Embeddings — векторизация текста

Преобразуйте текст в числовые векторы для семантического поиска, кластеризации, рекомендаций и RAG. Эндпоинт полностью совместим с OpenAI Embeddings — те же поля и формат ответа.

Эмбеддинги вызываются через API. В MegaAPI Chat их нет: чат отправляет запрос в модель диалога, а эта модель отвечает вектором чисел — показывать его в переписке нечем и незачем. Ключ тот же, что и у остальных моделей, пример запроса — ниже на этой странице.
ЭндпоинтPOST https://megaapi.ru/v1/embeddings
ВходСтрока или массив строк (батч до 2048 элементов)
ВыходМассив векторов data[].embedding + usage

Модели и цены

МодельРазмерностьНазначениеЦена
text-embedding-3-small1536Лучшее соотношение цена/качество$0.03 / 1M токенов
text-embedding-3-large3072Высокая точность поиска$0.195 / 1M токенов
text-embedding-ada-0021536Классическая, совместимость$0.15 / 1M токенов
text-embedding-v4многоязычнаяСильная на русском и азиатских языках$0.105 / 1M токенов
multimodal-embedding-v1 / qwen3-vl-embeddingмодель-зависимоМультимодальный поисксм. каталог
bge-reranker-v2-m3Переранжирование результатовсм. каталог

Цены итоговые — именно столько списывается с баланса. Полный список и тарифы — в разделе Модели и цены. Для большинства задач начните с text-embedding-3-small и переходите на -large при высоких требованиях к точности.

Размерность вектора (параметр dimensions)

Модели text-embedding-3-small (до 1536) и text-embedding-3-large (до 3072) позволяют усечь вектор параметром dimensions. Меньшая размерность экономит память и ускоряет поиск в векторной БД при небольшой потере точности. В MegaAPI Chat нужное значение выбирается в поле «Размерность вектора» (появляется только для моделей -3-*); для остальных моделей параметр не применяется и сервер вернёт понятную ошибку до списания.

{
    "model": "text-embedding-3-large",
    "input": "Искусственный интеллект меняет мир",
    "dimensions": 1024
}

Запрос

POST https://megaapi.ru/v1/embeddings
Authorization: Bearer sk-...
Content-Type: application/json

{
    "model": "text-embedding-3-small",
    "input": "Искусственный интеллект меняет мир"
}

Батч (несколько текстов за раз)

Отправляйте до 2048 строк одним запросом — это снижает сетевые издержки:

{
    "model": "text-embedding-3-small",
    "input": ["первый текст", "второй текст", "третий текст"]
}

Ответ

{
    "object": "list",
    "data": [{ "object": "embedding", "index": 0,
              "embedding": [-0.0069, 0.0240, -0.0140, ...] }],
    "model": "text-embedding-3-small",
    "usage": { "prompt_tokens": 5, "total_tokens": 5 }
}

Пример: семантический поиск

Векторизуйте запрос и документы, ранжируйте по косинусной близости:

import numpy as np
from openai import OpenAI

client = OpenAI(api_key="sk-...", base_url="https://megaapi.ru/v1")

def cosine(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

documents = [
    "Python — высокоуровневый язык программирования",
    "Машинное обучение требует много данных",
    "Глубокое обучение — важная ветвь ИИ",
]
query = "искусственный интеллект и обучение"

resp = client.embeddings.create(model="text-embedding-3-small", input=[query] + documents)
vecs = [d.embedding for d in resp.data]
scores = [cosine(vecs[0], v) for v in vecs[1:]]

for doc, s in sorted(zip(documents, scores), key=lambda x: -x[1]):
    print(f"{s:.4f}  {doc}")

Сценарии применения

Лучшие практики

Переранжирование: /v1/rerank

Векторный поиск отвечает на вопрос «о чём этот текст», но не на вопрос «отвечает ли он на мой запрос». Из-за этого в топ выдачи попадают документы той же темы, которые пользователю не нужны. Переранжирование ставится вторым шагом после векторного поиска: модель получает запрос и каждого кандидата вместе и выдаёт оценку релевантности.

Как применять. Векторным поиском доставайте 50–100 кандидатов, затем переранжируйте и показывайте первые 3–5. Это самый дешёвый способ заметно поднять качество поиска: тысяча переранжирований стоит доли цента.
curl https://megaapi.ru/v1/rerank \
  -H "Authorization: Bearer $MEGAAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "bge-reranker-v2-m3",
    "query": "как настроить повторные попытки при 429",
    "documents": [
      "Коды 4xx означают ошибку на стороне клиента.",
      "При 429 используйте экспоненциальную задержку между повторами.",
      "Плановые работы в дата-центре 29 апреля."
    ],
    "top_n": 2
  }'

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

{
  "results": [
    { "index": 1, "relevance_score": 0.97, "document": { "text": "При 429 используйте…" } },
    { "index": 0, "relevance_score": 0.42, "document": { "text": "Коды 4xx означают…" } }
  ],
  "usage": { "prompt_tokens": 70, "total_tokens": 91 }
}
ПараметрТипОписание
modelstringОбязательный. Сейчас доступна модель bge-reranker-v2-m3
querystringОбязательный. Поисковый запрос, пустая строка не принимается
documentsstring[]Обязательный. Непустой массив строк — объекты не принимаются
top_nintСколько вернуть. Без параметра возвращаются все кандидаты
Чего переранжировщик не делает. Он не строит векторы и не заменяет векторный поиск: без запроса документ обработать нельзя, поэтому заранее проиндексировать базу им не получится. Для индекса нужны модели векторизации выше на этой странице. Ориентируйтесь на поле index — это позиция документа в вашем исходном массиве; сопоставлять по тексту не надо. Оценки сравнимы только внутри одного запроса.

Важные лимиты

Длина одного текстадо ~8191 токенов
Размер батчадо 2048 строк за запрос
Суммарный размер текстадо 200000 символов
Переранжирование: пара «запрос + документ»до ~8192 токенов
Переранжирование: кандидатов за запросдо 1000

Открыть в MegaAPI Chat → Полный справочник API Все модели