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.

Dim 1Dim 2CódigoDatabaseDevOpsQuerySimilar clusterQuery pointDistance
Código

Funções, classes, APIs

Database

Schema, queries, migrations

DevOps

Deploy, CI/CD, containers

📊 Modelos de Embedding

ModeloDimensõesCustoPrecisão
text-embedding-3-smallRecomendado1536$0.02/1M tokensBoa
text-embedding-3-large3072$0.13/1M tokensExcelente
text-embedding-21536$0.10/1M tokensMé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()
        );
    }
}