Pular para conteúdo

LANGCHAIN_EMBEDDINGS - Geração de Embeddings Vetoriais

O que é este Node?

O LANGCHAIN_EMBEDDINGS é o node responsável por converter texto em vetores numéricos (embeddings) usando modelos da OpenAI. Embeddings são representações matemáticas de texto que permitem busca semântica e similaridade.

Por que este Node existe?

Sistemas modernos precisam comparar similaridade entre textos, fazer busca semântica e agrupar documentos. O LANGCHAIN_EMBEDDINGS existe para:

  1. Busca Semântica: Encontrar documentos similares por significado, não apenas palavras-chave
  2. Análise de Similaridade: Comparar textos e medir quão similares são
  3. Clustering: Agrupar textos por tópicos automaticamente
  4. RAG (Retrieval-Augmented Generation): Base para sistemas de busca em documentos

Como funciona internamente?

Quando o LANGCHAIN_EMBEDDINGS é executado, o sistema:

  1. Recebe Texto: Coleta o texto a ser convertido em embedding
  2. Chama OpenAI API: Usa modelo text-embedding-ada-002
  3. Gera Vetor: Cria array de 1536 números representando o texto
  4. Retorna Embedding: Devolve vetor e dimensão
  5. Se erro: Loga o erro e retorna falha

Código interno (lightweight-executors.service.ts:146-164):

async executeLangChainEmbeddings(data: any, variables: Record<string, any>): Promise<any> {
  try {
    this.logger.log('📊 [LangChain Embeddings] Generating embeddings');

    const response = await this.openai.embeddings.create({
      model: 'text-embedding-ada-002',
      input: data.text,
    });

    return {
      success: true,
      embeddings: response.data[0].embedding,
      dimension: response.data[0].embedding.length,
    };
  } catch (error) {
    this.logger.error('LangChain Embeddings execution error:', error);
    throw error;
  }
}

Quando você DEVE usar este Node?

Use LANGCHAIN_EMBEDDINGS sempre que precisar de busca semântica ou análise de similaridade:

Casos de uso

  1. Busca em Base de Conhecimento: "Encontrar artigos similares à pergunta do usuário"
  2. Detecção de Duplicatas: "Identificar perguntas similares já respondidas"
  3. Recomendação de Conteúdo: "Sugerir artigos relacionados"

Quando NÃO usar LANGCHAIN_EMBEDDINGS

  • Busca Exata por Palavras: Use busca tradicional (LIKE, regex)
  • Comparação Simples: Use string matching para textos idênticos
  • Processar Grandes Volumes: Embeddings têm custo por token

Parâmetros

Campo Tipo Obrigatório Descrição
text string Sim Texto a ser convertido em embedding
model string Não Modelo (padrão: text-embedding-ada-002)

Exemplo: Busca Semântica em FAQ

Objetivo: Encontrar resposta mais similar à pergunta do usuário.

JSON para Importar

{
  "name": "Busca Semântica em FAQ",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Pergunta",
        "parameters": {
          "variableName": "userQuestion",
          "message": "Qual é sua dúvida?"
        }
      }
    },
    {
      "id": "langchain_1",
      "type": "langchain_embeddings",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Gerar Embedding",
        "parameters": {
          "text": "{{userQuestion}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Confirmar",
        "parameters": {
          "message": "Embedding gerado com {{dimension}} dimensões"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 900, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "langchain_1" },
    { "source": "langchain_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Resposta do Node

{
  "success": true,
  "embeddings": [0.0023, -0.0012, 0.0045, ...],
  "dimension": 1536
}

Boas Práticas

SIM: - Usar para busca semântica em documentos - Armazenar embeddings em banco vetorial (Pinecone, Weaviate) - Calcular similaridade com cosseno entre vetores

NÃO: - Gerar embeddings repetidamente para mesmo texto (cache!) - Usar para textos muito curtos (< 5 palavras) - Comparar embeddings de idiomas diferentes

Dicas

💡 Dica 1: Embeddings de text-embedding-ada-002 têm 1536 dimensões

💡 Dica 2: Use similaridade de cosseno para comparar embeddings: dot(a,b) / (norm(a) * norm(b))

💡 Dica 3: Armazene embeddings em banco vetorial para busca eficiente em larga escala

Próximos Nodes

LANGCHAIN_VECTORSTORE - Armazenamento de embeddings → LANGCHAIN_CHAT - Chat com modelos de linguagem → LANGCHAIN_LOADER - Carregamento de documentos