Pular para conteúdo

LANGCHAIN_CHAT_GOOGLE - Chat com Gemini via LangChain

O que é este Node?

O LANGCHAIN_CHAT_GOOGLE é o node responsável por integrar os modelos Gemini do Google (Gemini Pro, Ultra, Flash) através do framework LangChain, oferecendo conversas multimodais com capacidade de processar texto, código e dados complexos.

Por que este Node existe?

Gemini do Google combina velocidade, multimodalidade e integração nativa com ecossistema Google. O LANGCHAIN_CHAT_GOOGLE existe para:

  1. Multimodalidade: Processar texto, imagens, vídeo e áudio em uma única chamada
  2. Integração Google: Conectar nativamente com Workspace, Search, Maps
  3. Grounding: Respostas baseadas em Google Search para informações atualizadas
  4. Velocidade: Gemini Flash é um dos modelos mais rápidos do mercado
  5. Contexto Longo: Até 1M tokens de contexto (Gemini 1.5 Pro)
  6. Custo-Benefício: Preços competitivos especialmente para Flash
  7. Raciocínio Avançado: Gemini Ultra compete com GPT-4 e Claude Opus

Como funciona internamente?

Quando o LANGCHAIN_CHAT_GOOGLE é executado, o sistema:

  1. Valida Configuração: Verifica provider (google), model e apiKey
  2. Monta Contents: Estrutura específica do Google com parts array
  3. Configura Generation: Define temperature, topP, topK, maxOutputTokens em generationConfig
  4. Add System Instruction: Se systemPrompt existir, adiciona em systemInstruction separado
  5. Envia Request: POST para https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent
  6. Processa Resposta: Extrai candidates[0].content.parts[0].text
  7. Calcula Tokens: Usa usageMetadata.totalTokenCount
  8. Retorna Resultado: Conteúdo, tokens e tempo de execução

Código interno (langchain-chat-executor.service.ts:385-421):

private async executeGoogle(data: LangChainChatNodeData, prompt: string): Promise<any> {
  const baseUrl = 'https://generativelanguage.googleapis.com/v1beta';

  const payload: any = {
    contents: [
      {
        parts: [
          { text: data.userMessage || prompt }
        ]
      }
    ],
    generationConfig: {
      temperature: data.temperature || 0.7,
      topP: data.topP || 0.8,
      topK: data.topK || 40,
      maxOutputTokens: data.maxTokens || 1000,
      stopSequences: data.stopSequences
    }
  };

  if (data.systemPrompt) {
    payload.systemInstruction = {
      parts: [{ text: data.systemPrompt }]
    };
  }

  const response: AxiosResponse = await axios.post(
    `${baseUrl}/models/${data.model}:generateContent?key=${data.apiKey}`,
    payload,
    {
      headers: { 'Content-Type': 'application/json' },
      timeout: data.timeout || 30000
    }
  );

  return response.data;
}

Quando você DEVE usar este Node?

Use LANGCHAIN_CHAT_GOOGLE sempre que precisar de velocidade, multimodalidade ou integração com Google:

Casos de uso

  1. Análise de Imagens: "Descrever produtos em fotos, identificar objetos, ler texto em imagens"
  2. Respostas Atualizadas: "Perguntas sobre eventos recentes usando Google Search grounding"
  3. Processamento em Massa: "Alto volume de requisições com Gemini Flash (rápido e barato)"
  4. Análise de Vídeos: "Extrair informações de vídeos, transcrever e resumir conteúdo"
  5. Coding Assistant: "Gerar, explicar e debugar código (Gemini Code Assist)"
  6. Documentos Longos: "Processar documentos de até 1M tokens (livros completos)"
  7. Integração Workspace: "Conectar com Gmail, Docs, Sheets nativamente"

Quando NÃO usar LANGCHAIN_CHAT_GOOGLE

  • Raciocínio Ultra-Complexo: Claude Opus ou GPT-4 podem ser superiores
  • Function Calling Avançado: OpenAI tem implementação mais madura
  • Português Nuanceado: Claude é ligeiramente melhor em pt-BR
  • Restrições de Privacidade: Se não pode usar serviços Google

Parâmetros

Campo Tipo Obrigatório Descrição
provider string Sim Deve ser "google"
model string Sim gemini-pro, gemini-1.5-pro, gemini-1.5-flash, gemini-ultra
apiKey string Sim Chave API do Google AI Studio
systemPrompt string Não Instrução de sistema (vai para systemInstruction)
userMessage string Não Mensagem do usuário
temperature number Não Aleatoriedade (0-2, padrão: 0.7)
maxTokens number Não Limite de tokens (maxOutputTokens, padrão: 1000)
topP number Não Nucleus sampling (padrão: 0.8)
topK number Não Top-K sampling (padrão: 40)
stopSequences array Não Sequências de parada
timeout number Não Timeout em ms (padrão: 30000)

Modelos disponíveis: - gemini-1.5-pro: Melhor qualidade, 1M tokens contexto - gemini-1.5-flash: Mais rápido, mais barato, 1M tokens - gemini-pro: Versão anterior, 32K tokens - gemini-ultra: Premium (acesso limitado)

Exemplo 1: Assistente Rápido com Gemini Flash

Objetivo: Criar assistente de alta velocidade para respostas rápidas em grande volume.

JSON para Importar

{
  "name": "Assistente Rápido Gemini Flash",
  "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 Rápida",
        "parameters": {
          "message": "⚡ Assistente Ultra-Rápido\n\nFaça sua pergunta:",
          "variable": "quick_question"
        }
      }
    },
    {
      "id": "langchain_1",
      "type": "langchain_chat",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Gemini Flash",
        "parameters": {
          "provider": "google",
          "model": "gemini-1.5-flash",
          "apiKey": "{{config.google_ai_key}}",
          "maxTokens": 256,
          "temperature": 0.5,
          "topP": 0.8,
          "topK": 40,
          "systemPrompt": "Você é um assistente ultra-rápido. Responda de forma concisa, direta e objetiva. Máximo 2-3 frases.",
          "userMessage": "{{quick_question}}"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Resposta Flash",
        "parameters": {
          "message": "⚡ {{langchain_1.content}}\n\n⏱️ Respondido em {{langchain_1.executionTime}}ms"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Continuar?",
        "parameters": {
          "message": "Outra pergunta? (SIM/NÃO)",
          "variable": "continue"
        }
      }
    },
    {
      "id": "condition_1",
      "type": "condition",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Verificar",
        "parameters": {
          "variable": "continue",
          "operator": "equals",
          "value": "SIM"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "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": "input_2" },
    { "source": "input_2", "target": "condition_1" },
    { "source": "condition_1", "target": "input_1", "label": "true" },
    { "source": "condition_1", "target": "end_1", "label": "false" }
  ]
}

Saída esperada:

Sistema: ⚡ Assistente Ultra-Rápido

Faça sua pergunta:
Usuário: Qual a capital da França?
Sistema: ⚡ A capital da França é Paris, localizada no norte do país às margens do rio Sena.

⏱️ Respondido em 847ms
Sistema: Outra pergunta? (SIM/NÃO)
Usuário: SIM
Sistema: Faça sua pergunta:
Usuário: Quanto é 15% de 230?
Sistema: ⚡ 15% de 230 é 34,5.

⏱️ Respondido em 623ms

Exemplo 2: Análise de Documentos Longos com Gemini Pro 1.5

Objetivo: Processar e resumir documentos muito longos aproveitando 1M tokens de contexto.

JSON para Importar

{
  "name": "Análise de Documento Longo - Gemini Pro 1.5",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "Solicitar Documento",
        "parameters": {
          "message": "📚 Análise de Documento Longo\n\nCole o documento completo (suporta até 1M tokens = ~750K palavras):"
        }
      }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Capturar Documento",
        "parameters": {
          "message": "Aguardando documento...",
          "variable": "document_text"
        }
      }
    },
    {
      "id": "input_2",
      "type": "input",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Pergunta sobre Doc",
        "parameters": {
          "message": "O que você quer saber sobre este documento?\n\nExemplos:\n- Faça um resumo executivo\n- Liste os principais pontos\n- Identifique riscos e oportunidades\n- Extraia dados específicos",
          "variable": "analysis_question"
        }
      }
    },
    {
      "id": "langchain_1",
      "type": "langchain_chat",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Analisar com Gemini Pro",
        "parameters": {
          "provider": "google",
          "model": "gemini-1.5-pro",
          "apiKey": "{{config.google_ai_key}}",
          "maxTokens": 2048,
          "temperature": 0.3,
          "topP": 0.8,
          "topK": 40,
          "systemPrompt": "Você é um analista especializado em processar e resumir documentos longos. Seja preciso, cite trechos relevantes e forneça insights acionáveis.",
          "userMessage": "Documento:\n\n{{document_text}}\n\n---\n\nPergunta: {{analysis_question}}"
        }
      }
    },
    {
      "id": "message_2",
      "type": "message",
      "position": { "x": 1100, "y": 100 },
      "data": {
        "label": "Apresentar Análise",
        "parameters": {
          "message": "📊 ANÁLISE DO DOCUMENTO\n━━━━━━━━━━━━━━━━━━━━━\n\n{{langchain_1.content}}\n\n━━━━━━━━━━━━━━━━━━━━━\n📈 Tokens processados: {{langchain_1.tokensUsed}}\n⏱️ Tempo de análise: {{langchain_1.executionTime}}ms"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1300, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "message_1" },
    { "source": "message_1", "target": "input_1" },
    { "source": "input_1", "target": "input_2" },
    { "source": "input_2", "target": "langchain_1" },
    { "source": "langchain_1", "target": "message_2" },
    { "source": "message_2", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 📚 Análise de Documento Longo

Cole o documento completo (suporta até 1M tokens = ~750K palavras):
Usuário: [cola documento de 50 páginas]
Sistema: O que você quer saber sobre este documento?
Usuário: Faça um resumo executivo de 5 pontos principais
Sistema: 📊 ANÁLISE DO DOCUMENTO
━━━━━━━━━━━━━━━━━━━━━

**RESUMO EXECUTIVO - 5 PONTOS PRINCIPAIS:**

1. **Objetivo do Projeto**: O documento apresenta uma proposta de modernização da infraestrutura de TI com investimento estimado de R$ 2,5 milhões ao longo de 18 meses...

2. **Principais Benefícios**: Redução de 40% nos custos operacionais, aumento de 60% na velocidade de processamento e melhoria de 85% na segurança de dados...

3. **Riscos Identificados**: Três riscos críticos foram mapeados: dependência de fornecedores únicos (médio impacto), período de migração de 3 meses (alto impacto)...

4. **Cronograma**: Execução planejada em 4 fases: Fase 1 (meses 1-4) análise e preparação, Fase 2 (meses 5-9) implementação piloto...

5. **Aprovações Necessárias**: Requer aprovação do board executivo (até 30 dias), compliance legal (60 dias) e orçamento adicional de contingência de 15%...

━━━━━━━━━━━━━━━━━━━━━
📈 Tokens processados: 15.847
⏱️ Tempo de análise: 6234ms

Resposta do Node

{
  "success": true,
  "data": {
    "content": "Texto da resposta do Gemini",
    "raw": {
      "candidates": [
        {
          "content": {
            "parts": [
              {
                "text": "Texto da resposta do Gemini"
              }
            ],
            "role": "model"
          },
          "finishReason": "STOP"
        }
      ],
      "usageMetadata": {
        "promptTokenCount": 125,
        "candidatesTokenCount": 340,
        "totalTokenCount": 465
      }
    }
  },
  "tokensUsed": 465,
  "executionTime": 1845,
  "logs": ["LangChain Chat completed with google/gemini-1.5-flash"]
}

Boas Práticas

SIM:

  • Use Gemini Flash para tarefas rápidas e alto volume (melhor custo-benefício)
  • Use Gemini Pro 1.5 para análises profundas e documentos longos
  • Aproveite 1M tokens de contexto para processar livros inteiros
  • Use topK (padrão 40) para controlar diversidade de respostas
  • Configure topP entre 0.8-0.95 para respostas balanceadas
  • Use temperatura baixa (0.2-0.4) para análises técnicas
  • Considere grounding com Google Search para informações atualizadas

NÃO:

  • Não use Gemini Pro quando Flash for suficiente (Pro é mais caro)
  • Não espere multimodalidade completa sem enviar imagens no formato correto
  • Não compare diretamente com GPT/Claude (cada um tem forças diferentes)
  • Não use maxTokens muito alto se não precisar (gasta mais créditos)
  • Não ignore erros de quota (Google tem limites por minuto/dia)

Dicas

💡 Dica 1 - Modelos: Flash é 10-20x mais barato que Pro. Use Pro só quando precisar de análise profunda ou contexto gigante.

💡 Dica 2 - Contexto: 1M tokens = ~750K palavras = ~1500 páginas. Você pode enviar livros completos!

💡 Dica 3 - Velocidade: Flash responde em <1s na maioria dos casos. Ideal para chatbots de alta frequência.

💡 Dica 4 - Grounding: Gemini pode usar Google Search para informações atualizadas (requer configuração adicional).

💡 Dica 5 - API Key: Obtenha em https://makersuite.google.com/app/apikey - é grátis com generosos limites.

Próximos Nodes

LANGCHAIN_CHAT_OPENAI - Chat com GPT → LANGCHAIN_CHAT_ANTHROPIC - Chat com Claude → LANGCHAIN_CHAT_COHERE - Chat com Cohere → CONDITION - Lógica condicional