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:
- Busca Semântica: Encontrar documentos similares por significado, não apenas palavras-chave
- Análise de Similaridade: Comparar textos e medir quão similares são
- Clustering: Agrupar textos por tópicos automaticamente
- RAG (Retrieval-Augmented Generation): Base para sistemas de busca em documentos
Como funciona internamente?
Quando o LANGCHAIN_EMBEDDINGS é executado, o sistema:
- Recebe Texto: Coleta o texto a ser convertido em embedding
- Chama OpenAI API: Usa modelo text-embedding-ada-002
- Gera Vetor: Cria array de 1536 números representando o texto
- Retorna Embedding: Devolve vetor e dimensão
- 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
- Busca em Base de Conhecimento: "Encontrar artigos similares à pergunta do usuário"
- Detecção de Duplicatas: "Identificar perguntas similares já respondidas"
- 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