Embeddings
Создание векторных представлений текста.
POST /v1/embeddings
Описание
Преобразует текст в числовой вектор (embedding), который можно использовать для семантического поиска, кластеризации и классификации.
Заголовки
| Заголовок | Обязательный | Описание |
|---|---|---|
Authorization | Да | Bearer YOUR_API_KEY |
Content-Type | Да | application/json |
Тело запроса
{
"model": "text-embedding-3-small",
"input": "Текст для векторизации"
}
Параметры
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model | string | Да | ID модели embeddings |
input | string/array | Да | Текст(ы) для векторизации |
encoding_format | string | Нет | float (default) или base64 |
dimensions | integer | Нет | Размерность вектора (для поддерживающих моделей) |
Ответ
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [0.0023, -0.0089, 0.0156, ..., -0.0034]
}
],
"model": "text-embedding-3-small",
"usage": {
"prompt_tokens": 5,
"total_tokens": 5
}
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
embedding | array | Вектор чисел (float) |
index | integer | Индекс в batch запросе |
Модели Embeddings
OpenAI
| Модель | Размерность | Цена | Описание |
|---|---|---|---|
text-embedding-3-small | 1536 | $0.02/1M | Быстрая, экономичная |
text-embedding-3-large | 3072 | $0.13/1M | Высокое качество |
GigaChat
| Модель | Размерность | Цена |
|---|---|---|
gigachat/EmbeddingsGigaR | 1024 | $0.10/1M |
YandexGPT
| Модель | Размерность | Цена |
|---|---|---|
yandexgpt/text-search-doc | 256 | $0.10/1M |
Примеры
cURL
curl https://api.aipomogator.ru/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $API_KEY" \
-d '{
"model": "text-embedding-3-small",
"input": "Машинное обучение - это раздел искусственного интеллекта"
}'
Python
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.aipomogator.ru/v1"
)
response = client.embeddings.create(
model="text-embedding-3-small",
input="Машинное обучение - это раздел искусственного интеллекта"
)
embedding = response.data[0].embedding
print(f"Размерность: {len(embedding)}")
print(f"Первые 5 значений: {embedding[:5]}")
Batch запрос
response = client.embeddings.create(
model="text-embedding-3-small",
input=[
"Первый текст для векторизации",
"Второй текст для векторизации",
"Третий текст для векторизации"
]
)
for item in response.data:
print(f"Index {item.index}: {len(item.embedding)} dimensions")
JavaScript
import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.aipomogator.ru/v1',
});
const response = await client.embeddings.create({
model: 'text-embedding-3-small',
input: 'Машинное обучение - это раздел искусственного интеллекта',
});
const embedding = response.data[0].embedding;
console.log(`Размерность: ${embedding.length}`);
Применение
Семантический поиск
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# Создаём embeddings для базы знаний
documents = [
"Python — язык программирования",
"JavaScript используется для веб-разработки",
"Машинное обучение анализирует данные"
]
doc_embeddings = client.embeddings.create(
model="text-embedding-3-small",
input=documents
).data
# Поиск по запросу
query = "программирование на питоне"
query_embedding = client.embeddings.create(
model="text-embedding-3-small",
input=query
).data[0].embedding
# Находим наиболее похожий документ
similarities = [
cosine_similarity(query_embedding, doc.embedding)
for doc in doc_embeddings
]
best_match = documents[np.argmax(similarities)]
print(f"Наиболее релевантный: {best_match}")
RAG (Retrieval-Augmented Generation)
# 1. Индексируем документы
chunks = split_into_chunks(document)
embeddings = client.embeddings.create(
model="text-embedding-3-small",
input=chunks
)
store_in_vector_db(chunks, embeddings)
# 2. Поиск релевантного контекста
query_embedding = client.embeddings.create(
model="text-embedding-3-small",
input=user_question
)
relevant_chunks = vector_db.search(query_embedding, top_k=3)
# 3. Генерация ответа с контекстом
context = "\n".join(relevant_chunks)
response = client.chat.completions.create(
model="anthropic/claude-sonnet-4-5-20250929",
messages=[
{"role": "system", "content": f"Контекст:\n{context}"},
{"role": "user", "content": user_question}
]
)
Рекомендации
- text-embedding-3-small — для большинства задач
- text-embedding-3-large — когда нужна максимальная точность
- Используйте batch запросы для эффективности
- Храните embeddings в векторных БД (Pinecone, Milvus, pgvector)
Ошибки
400 Bad Request
{
"error": {
"message": "Input too long",
"type": "invalid_request_error"
}
}
Максимальная длина input зависит от модели (обычно 8191 токенов).