Эмбеддинги
Эмбеддинги (Embeddings) — это векторные представления текста, которые используются для семантического поиска, кластеризации, классификации и других задач.
Эндпоинт /v1/embeddings позволяет получить векторное представление текста с помощью различных моделей.
Поддерживаемые модели
| Модель | Провайдер | Макс. токенов | Описание |
|---|---|---|---|
text-embedding-3-small | OpenAI | 8 191 | Компактная и быстрая модель |
text-embedding-3-large | OpenAI | 8 191 | Высокое качество |
text-embedding-ada-002 | OpenAI | 8 191 | Классическая модель |
gemini-embedding-001 | 20 000 | Большой контекст | |
qwen3-embedding-0.6b | Qwen | 32 768 | Лёгкая модель, большой контекст |
qwen3-embedding-4b | Qwen | 32 768 | Средний размер |
qwen3-embedding-8b | Qwen | 32 768 | Высокое качество |
text-embedding-v4 | Qwen | 8 192 | Qwen Embedding v4 |
mistral-embed-2312 | Mistral AI | 8 192 | Mistral Embed |
codestral-embed-2505 | Mistral AI | 8 192 | Оптимизирована для кода |
gigachat-embeddings-2 | GigaChat (Sber) | 512 | GigaChat эмбеддинги |
gigachat-embeddings-giga-r | GigaChat (Sber) | 4 096 | GigaChat 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
}
}Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | Идентификатор модели |
input | string | string[] | Да | Текст или массив текстов для обработки |
encoding_format | string | Нет | Формат: 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}")Лучшие практики
- Выбор модели:
text-embedding-3-small— оптимальный баланс цены и качества. Для максимального качества используйтеtext-embedding-3-large - Пакетная обработка: Передавайте несколько текстов в одном запросе вместо отдельных запросов для каждого текста
- Длина текста: Не превышайте лимит токенов модели. Длинные тексты лучше разбить на фрагменты
- Кеширование: Сохраняйте полученные эмбеддинги — повторные вычисления одного и того же текста приведут к дополнительным расходам