Capítulo 3
Embeddings
Convertendo texto em números: como transformar palavras em vetores densos que capturam significado semântico.
🔢 O que é um Embedding?
Embedding é a transformação de texto em um vetor multidimensional — um array de números que representa o significado semântico do texto.
INPUT"Como criar um contrato em Laravel?"
→Embedding API (OpenAI/text-embedding-3-small)
OUTPUT[0.023, -0.041, 0.089, ... , 0.017]
↓1536 dimensões
Textos com significados similares ficam próximos no espaço vetorial. Quando você busca "contrato", encontra também "acordo", "documento legal" — porque estão geometria similar.
🎯 Espaço Vetorial — Visualização
Cada ponto é um texto. Cores representam clusters semânticos. Aquery encontra pontos próximos geometricamente.
Código
Funções, classes, APIs
Database
Schema, queries, migrations
DevOps
Deploy, CI/CD, containers
📊 Modelos de Embedding
| Modelo | Dimensões | Custo | Precisão |
|---|---|---|---|
| text-embedding-3-smallRecomendado | 1536 | $0.02/1M tokens | Boa |
| text-embedding-3-large | 3072 | $0.13/1M tokens | Excelente |
| text-embedding-2 | 1536 | $0.10/1M tokens | Média |
💻 Embedding no Laravel
app/Services/EmbeddingService.php
<?php
// app/Services/EmbeddingService.php
use OpenAILaravelFacadesOpenAI;
class EmbeddingService
{
public function generate(string $text): array
{
$response = OpenAI::embeddings()->create([
"string">'model' => "string">'text-embedding-3-small', // 1536 dimensões
"string">'input' => $text,
]);
return $response->data[0]->embedding;
}
public function generateChunks(array $chunks): array
{
$response = OpenAI::embeddings()->create([
"string">'model' => "string">'text-embedding-3-small',
"string">'input' => array_map(
fn($c) => mb_substr($c, 0, 8000),
$chunks
),
]);
return array_map(
fn($r) => $r->embedding,
$response->data->toArray()
);
}
}