Skip to content

Эмбеддинги

Эмбеддинги (Embeddings) — это векторные представления текста, которые используются для семантического поиска, кластеризации, классификации и других задач.

Эндпоинт /v1/embeddings позволяет получить векторное представление текста с помощью различных моделей.

Поддерживаемые модели

МодельПровайдерМакс. токеновОписание
text-embedding-3-smallOpenAI8 191Компактная и быстрая модель
text-embedding-3-largeOpenAI8 191Высокое качество
text-embedding-ada-002OpenAI8 191Классическая модель
gemini-embedding-001Google20 000Большой контекст
qwen3-embedding-0.6bQwen32 768Лёгкая модель, большой контекст
qwen3-embedding-4bQwen32 768Средний размер
qwen3-embedding-8bQwen32 768Высокое качество
text-embedding-v4Qwen8 192Qwen Embedding v4
mistral-embed-2312Mistral AI8 192Mistral Embed
codestral-embed-2505Mistral AI8 192Оптимизирована для кода
gigachat-embeddings-2GigaChat (Sber)512GigaChat эмбеддинги
gigachat-embeddings-giga-rGigaChat (Sber)4 096GigaChat GigaR

Базовое использование

python
from openai import OpenAI

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

response = client.embeddings.create(
    model="text-embedding-3-small",
    input="Искусственный интеллект изменяет мир технологий"
)

embedding = response.data[0].embedding
print(f"Размерность вектора: {len(embedding)}")
typescript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-aitunnel-xxx",
  baseURL: "https://api.aitunnel.ru/v1/",
});

const response = await client.embeddings.create({
  model: "text-embedding-3-small",
  input: "Искусственный интеллект изменяет мир технологий",
});

const embedding = response.data[0].embedding;
console.log(`Размерность вектора: ${embedding.length}`);
shell
curl https://api.aitunnel.ru/v1/embeddings \
  -H "Authorization: Bearer sk-aitunnel-xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "text-embedding-3-small",
    "input": "Искусственный интеллект изменяет мир технологий"
  }'

Пакетная обработка

Можно передать массив строк для получения нескольких эмбеддингов за один запрос:

python
response = client.embeddings.create(
    model="text-embedding-3-small",
    input=[
        "Первый текст для обработки",
        "Второй текст для обработки",
        "Третий текст для обработки"
    ]
)

for item in response.data:
    print(f"Индекс: {item.index}, размерность: {len(item.embedding)}")
typescript
const response = await client.embeddings.create({
  model: "text-embedding-3-small",
  input: [
    "Первый текст для обработки",
    "Второй текст для обработки",
    "Третий текст для обработки",
  ],
});

for (const item of response.data) {
  console.log(`Индекс: ${item.index}, размерность: ${item.embedding.length}`);
}

Формат ответа

json
{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [0.0023064255, -0.009327292, ...]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 12,
    "total_tokens": 12,
    "cost_rub": 0.01,
    "balance": 950.5
  }
}

Параметры запроса

ПараметрТипОбязательныйОписание
modelstringДаИдентификатор модели
inputstring | string[]ДаТекст или массив текстов для обработки
encoding_formatstringНетФормат: float (по умолчанию) или base64

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

Семантический поиск

python
import numpy as np

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

# Получаем эмбеддинги для документов
docs = ["Python — язык программирования", "Москва — столица России", "Нейросети обучаются на данных"]
doc_embeddings = client.embeddings.create(model="text-embedding-3-small", input=docs)

# Получаем эмбеддинг для запроса
query = "Какой язык используется для ИИ?"
query_embedding = client.embeddings.create(model="text-embedding-3-small", input=query)

# Ищем наиболее похожий документ
query_vec = query_embedding.data[0].embedding
for i, doc in enumerate(doc_embeddings.data):
    similarity = cosine_similarity(query_vec, doc.embedding)
    print(f"{docs[i]}: {similarity:.4f}")

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

  1. Выбор модели: text-embedding-3-small — оптимальный баланс цены и качества. Для максимального качества используйте text-embedding-3-large
  2. Пакетная обработка: Передавайте несколько текстов в одном запросе вместо отдельных запросов для каждого текста
  3. Длина текста: Не превышайте лимит токенов модели. Длинные тексты лучше разбить на фрагменты
  4. Кеширование: Сохраняйте полученные эмбеддинги — повторные вычисления одного и того же текста приведут к дополнительным расходам

AITUNNEL