Os seus utilizadores não pensam em nomes de ficheiros ou hierarquias de pastas. Eles pensam em ideias.
- “Um robô pintado em aguarela.”
- “Uma praia solarenga cheia de cor.”
- “Algo que parece a Mona Lisa… mas do futuro.”
Não importa se essa ideia vem de uma imagem, um pedido de um cliente, um email, ou um documento 4D Write Pro – o desafio é o mesmo: como entregar resultados que correspondem à intenção, não apenas palavras-chave?
Com 4D.Vetor e 4D AI Kit, sua aplicação pode finalmente dar sentido ao significado. Nesse post, vamos ilustrar isso com busca semântica de similaridade de imagem. E aqui está a chave: não estamos realmente trabalhando com imagens brutas – estamos trabalhando com suas descrições. A mesma abordagem funciona para qualquer tipo de dados de texto na sua aplicação.
Porque é que os vectores + IA mudam tudo
A pesquisa tradicional tem uma função: corresponder a termos exactos. Mas os seus utilizadores nem sempre sabem qual o termo exato a utilizar. Eles descrevem coisas. Expressam intenções. Eles pensam em uma linguagem humana confusa e bonita.
Para que a pesquisa funcione da forma como os seus utilizadores pensam, é necessário mais do que a correspondência de cadeias de caracteres. É preciso compreensão – e é aí que entram os embeddings vetoriais.
Então, o que é exatamente uma incorporação?
Uma incorporação é a forma de transformar uma entrada confusa e não estruturada – uma frase, um prompt ou uma imagem – num vetor estruturado de números. Não é apenas uma lista de tokens ou palavras-chave. É um instantâneo matemático do significado.
Quando se envia a frase “um robô pintado a aguarela” para o modelo text-embedding-ada-002 da OpenAI, este devolve algumas centenas de valores de vírgula flutuante. Cada um deles capta algo: o tópico, o estado de espírito, o estilo, as relações semânticas incorporadas nessa frase. Frases semelhantes produzem vectores semelhantes. Frases diferentes? Ficam mais distantes.
Pense nisso como colocar o significado num mapa. Quanto mais próximas duas frases estiverem nesse espaço de dimensões elevadas, mais parecidas são, independentemente da redação. Essa é a base para a criação de pesquisas, recomendações, agrupamentos e categorização com base no significado.

Um caso de utilização real: Pesquisa de imagens por significado
Na nossa página de demonstração, pode permitir que os utilizadores pesquisem semanticamente. Eles digitam um prompt ou escolhem um de uma lista, e seu aplicativo retorna imagens classificadas de acordo com a correspondência com a ideia.
A interface de utilizador é minimalista de propósito:
- Um campo de texto para mensagens personalizadas
- Um menu pendente de sugestões predefinidas
-
Uma matriz que apresenta imagens, ordenadas por semelhança com o pedido
Aqui está a chave: não estamos a vetorizar as imagens em bruto. Em vez disso, cada imagem é analisada peloOpenAIVision do AIKit , que gera uma legenda e uma descrição em linguagem natural. Essa descrição é o que é incorporado em um 4D.Vetor e armazenado.
Dessa forma, tudo é comparado no nível de significado, não de pixels.
Nota: Este exemplo usa 4D Qodly Pro, mas a mesma lógica se aplica perfeitamente a formulários 4D padrão também. De facto, todo o código corre dentro de métodos e funções 4D. A única diferença é como escolhe mostrar os resultados – num formulário 4D clássico ou numa página Qodly.
Como gerar o vetor
Quando alguém digita um prompt e clica em“Use Custom Prompt“, 4D executa a função calculate() da classe VectorManagement:
exposed shared Function calculate($prompt : Text) : cs.PicturesSelection
Isso começa pegando sua chave API OpenAI da memória (Storage.OpenAI.key) – que deve ser submetida do primeiro campo de entrada na aba Info. Se você pulou isso e ainda clicou em Usar prompt personalizado, um modal aparecerá pedindo que você insira sua chave antes de continuar:
If (Storage.OpenAI.key#"")
$apiKey:=Storage.OpenAI.key
Else
$apiModal:=Web Form.setApiKeyModal
$apiModal.show()
End if
Nota: Este exemplo utiliza OpenAI para operações de IA, mas pode utilizar qualquer fornecedor compatível com OpenAI – mesmo um modelo local com Ollama. Estamos a usar o OpenAI aqui porque é simples de configurar e não requer instalação local. Se quiser seguir o exemplo, solicite uma chave OpenAI aqui.
Em seguida, você chama a função generateVector() dentro da classe AIManagement:
var $vector := cs.AIManagement.new($apiKey).generateVector($prompt)
O que está a acontecer aqui?
Está a utilizar o modelo text-embedding-ada-002 do OpenAI – optimizado para textos curtos – para transformar o prompt num vetor de alta dimensão. Usando o método .create() para enviar o prompt e o modelo text-embedding-ada-002 como uma solicitação para o OpenAI e retorna uma estrutura JSON contendo o vetor. Esse vetor é então envolvido num objeto 4D.Vector, dando-nos algo que podemos comparar e ordenar nativamente em 4D.
property clientAI : Object
Class constructor($openAIKey : Text)
This.clientAI := cs.AIKit.OpenAI.new($openAIKey)
Function generateVector($text : Text) : 4D.Vector
var $model := "text-embedding-ada-002"
var $result := This.clientAI.embeddings.create($text; $model)
return $result.vector
Nesse ponto, você traduziu o prompt do usuário em um formato estruturado que 4D pode usar para comparação semântica.
Do prompt aos resultados ordenados
Com seu vetor em mãos, agora você o compara com todos os vetores de descrição de imagem armazenados no banco de dados:
var $pictureList := This._calculateVectors($vector)
E dentro de _calculateVectors, aqui está o que acontece:
For each ($picture; $pictureList)
$picture.cosineSimilarity := $vector.cosineSimilarity($picture.vector)
$picture.dotSimilarity := $vector.dotSimilarity($picture.vector)
$picture.euclideanDistance := $vector.euclideanDistance($picture.vector)
$picture.save()
End for each
Cada medida de similaridade fornece uma lente diferente:
- A semelhança de cosseno mede a proximidade entre dois vectores que apontam na mesma direção. Ideal para classificar a similaridade semântica.
- O Produto de pontos considera tanto a direção como a magnitude. É útil quando se pretende ter em conta o grau de alinhamento “forte” de dois vectores.
- Distância euclidiana é a distância bruta entre dois pontos no espaço. Quanto mais pequena for a distância, mais semelhantes são.
Se é novo na matemática vetorial em 4D, o primeiro post de blog nesta série cobre como criar e comparar vectores usando estes métodos e quando usar cada um.
Uma vez que todas as pontuações de similaridade são calculadas e armazenadas nas entidades de imagem, ordena por similaridade de cosseno e retorna os resultados:
return $pictureList.orderBy("cosineSimilarity desc")
Isto significa que as imagens concetualmente mais relevantes aparecem primeiro, independentemente do seu nome de ficheiro, descrição ou metadados.
E se o utilizador escolher uma mensagem predefinida?
Se alguém escolher um prompt do menu suspenso e clicar em Usar prompt selecionado, você pula totalmente a etapa de incorporação:
exposed shared Function calculateWithSelectedPrompt($prompt : cs.PromptsEntity) : cs.PicturesSelection
var $pictureList:=This._calculateVectors($prompt.Vector)
return $pictureList.orderBy("cosineSimilarity desc")
Não é necessária nenhuma chamada extra do OpenAI – o vetor da mensagem já está guardado na base de dados. Basta reutilizar o 4D.Vector armazenado na classe de dados Prompts quando o prompt foi criado pela primeira vez.
Tal como as descrições de imagens, cada prompt é vectorizado uma vez e depois armazenado para reutilização. Isso dá-lhe:
-
Nenhuma chamada de API → Resultados instantâneos, sem atraso de rede
-
Sem custo de token → Mais acessível, especialmente em escala
-
Funciona offline → Tudo é executado localmente, sem dependência de um serviço externo
DO CARREGAMENTO DE IMAGENS À DESCRIÇÃO VECTORIZADA
Quando alguém carrega uma imagem, não incorpora os pixéis. Em vez disso, descreve-se a imagem com o OpenAI Vision e incorpora-se essa descrição.
Na função vectorizeImageDescription, são definidos dois pedidos: um para uma legenda curta e outro para uma descrição mais completa. Ambos são criados para retornar frases únicas e fluentes, optimizadas para incorporação:
// --- Prompts (single, fluent, embedding-friendly) ---
$captionPrompt:="You are a precise visual captioner. "+\
"Write one short, clear English sentence (12–20 words) that summarizes the main subject of the image. "+\
"Keep it straightforward and descriptive, not poetic. Output only the sentence."
$descriptionPrompt:="You are a detailed scene describer. "+\
"Write a longer English paragraph (80–150 words) that expands on the caption. "+\
"Include context, secondary elements (icons, arrows, checklists, text, logos), and atmosphere so nothing important is missed. "+\
"Avoid repeating the caption verbatim. Output only the description."
O que vê na interface do utilizador
Uma vez efectuada a comparação, a sua matriz é actualizada instantaneamente. As imagens são classificadas com base na pontuação de semelhança.
-
Procura-se por: “uma pintura a aguarela de um robô” – e vê imagens com texturas suaves e formas robóticas:

-
Muda para: “uma cena de praia vibrante e solarenga com elementos coloridos” – e obtém um conjunto de resultados totalmente diferente, mas igualmente relevante:

Quer seja digitado ou carregado, está sempre a comparar ideias – não pixéis, nem nomes de ficheiros.
O que obtém como programador
Usar vectores com IA desbloqueia valor real e imediato nas suas aplicações 4D:
-
Pesquisa mais inteligente: Permite que os utilizadores pesquisem por significado, não por palavras-chave. Sem etiquetas, sem filtros – apenas resultados relevantes.
-
Lógica nativa: Tudo roda dentro de 4D. Sem necessidade de motores de busca externos ou ferramentas de terceiros.
-
Padrão reutilizável: Funciona para imagens, documentos, produtos, bilhetes – qualquer coisa que queira comparar por conceito.
-
Baixa configuração, alto impacto: Algumas linhas de código lhe dão classificação, filtragem e recomendações alimentadas por IA.
-
Mais barato e mais rápido: Incorpore uma vez, armazene o vetor e reutilize para sempre. Sem chamadas repetidas à API ou custos de token.
-
Base pronta para IA: Não está apenas a adicionar pesquisa – está a criar as bases para chatbots, recomendações, e fluxos de trabalho mais inteligentes.
Com 4D.Vetor e 4D AI Kit, não precisa construir inteligência – você a conecta.
Considerações Finais
Não está a colocar IA na sua aplicação – está a construir inteligência na sua lógica central.
Com 4D.Vector e 4D AI Kit, você dá à sua aplicação a habilidade de entender a intenção, não apenas a entrada. Para trazer à tona o significado, não apenas correspondências.
As ferramentas estão prontas. O código é leve. O valor é real. Tudo o que precisa agora… é de um prompt.
Comments are not currently available for this post.