Embeddings: вектора для поиска
Embeddings — это числовые вектора, которые представляют текст в многомерном пространстве. Похожие тексты имеют близкие вектора.
Зачем нужны
- Семантический поиск — поиск по смыслу, а не по словам
- RAG — Retrieval-Augmented Generation, поиск контекста для агента
- Кластеризация — группировка похожих документов
- Рекомендации — «похожие товары»
Генерация через Stringable
use Illuminate\Support\Str;
$embeddings = Str::of('Napa Valley has great wine.')->toEmbeddings();
Генерация через Embeddings
use Laravel\Ai\Embeddings;
$response = Embeddings::for([
'Napa Valley has great wine.',
'Laravel is a PHP framework.',
])->generate();
$response->embeddings; // [[0.123, 0.456, ...], [0.789, 0.012, ...]]
Размерность и модель
$response = Embeddings::for(['Текст'])
->dimensions(1536)
->generate('openai', 'text-embedding-3-small');
Хранение в БД
Миграция:
Schema::ensureVectorExtensionExists();
Schema::create('documents', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->vector('embedding', dimensions: 1536);
$table->timestamps();
});
Индекс для быстрого поиска:
$table->vector('embedding', dimensions: 1536)->index();
Cast в модели
protected function casts(): array
{
return [
'embedding' => 'array',
];
}
Кеширование
// config/ai.php
'caching' => [
'embeddings' => [
'cache' => true,
],
],
Избегает повторных API-вызовов для одинаковых текстов.
Требования
Векторные колонки работают только на PostgreSQL с расширением pgvector.
Итоги
- Embeddings — вектора для семантики
toEmbeddings()илиEmbeddings::for()vectorколонка в PostgreSQLpgvectorобязателен- Кеширование включается в конфиге