# LangChain tutorial em português: guia completo para iniciantes - URL Original: https://www.techbriefing.com.br/artigos/langchain-tutorial-portugues/ - Data: 2026-05-06 - Autor: Lucas Andrade - Categoria: IA Prática - Tags: LangChain, Python, Tutorial, Desenvolvimento, LLM - Resumo: Aprenda LangChain do zero em português: instalação, chains, agentes, RAG e exemplos práticos. O framework mais popular para desenvolvimento com LLMs explicado de forma simples. --- ## Resumo rápido ![Ilustração visual para: LangChain tutorial em português: guia completo para iniciantes](https://images.unsplash.com/photo-1518932945647-7a1c969f8be2?auto=format&fit=crop&q=80&w=1200) Aprenda LangChain do zero em português: instalação, chains, agentes, RAG e exemplos práticos. O framework mais popular para desenvolvimento com LLMs explicado de forma simples. ## O que é LangChain e por que aprender? LangChain é o framework de código aberto mais popular para construir aplicações com modelos de linguagem (LLMs). Se você quer ir além do uso básico de APIs de IA e construir produtos reais — agentes, sistemas de RAG, chatbots com memória, pipelines de processamento de documentos — o LangChain é o ponto de partida padrão da indústria. Em termos simples: a API da OpenAI ou da Anthropic te dá o motor. O LangChain te dá o carro completo — com câmbio, GPS, freios e painel de controle. Este tutorial foi escrito especialmente em português para o programador brasileiro que quer entrar no desenvolvimento com LLMs de forma estruturada. ## Pré-requisitos Para seguir este tutorial, você precisa de: - Python 3.9+ instalado - Conhecimento básico de Python (variáveis, funções, listas) - Uma chave de API da OpenAI ou Anthropic - Um ambiente virtual configurado (recomendado: venv ou conda) ## Instalação ```bash # Criar e ativar ambiente virtual python -m venv venv source venv/bin/activate # Linux/Mac venv\Scripts\activate # Windows # Instalar LangChain e dependências pip install langchain langchain-openai langchain-anthropic python-dotenv # Para funcionalidades de RAG pip install langchain-community chromadb pypdf ``` Crie um arquivo `.env`: ``` OPENAI_API_KEY=sk-proj-sua-chave-aqui ``` ## Conceito 1: LLMs e Chat Models O componente mais básico do LangChain é a abstração de modelos de linguagem. ```python from langchain_openai import ChatOpenAI from langchain_anthropic import ChatAnthropic from langchain_core.messages import HumanMessage, SystemMessage from dotenv import load_dotenv load_dotenv() # Inicializar o modelo modelo = ChatOpenAI(model="gpt-4o-mini", temperature=0.7) # Invocar diretamente resposta = modelo.invoke("Olá! O que é LangChain?") print(resposta.content) # Usar com mensagens estruturadas mensagens = [ SystemMessage(content="Você é um especialista em Python que responde em português."), HumanMessage(content="Explique o que é um decorator em Python.") ] resposta = modelo.invoke(mensagens) print(resposta.content) ``` O LangChain abstrai as diferenças entre diferentes provedores — o mesmo código funciona com Claude só mudando a classe importada: ```python # Usando Claude em vez de GPT com o mesmo código modelo = ChatAnthropic(model="claude-3-5-sonnet-20241022") resposta = modelo.invoke(mensagens) # Mesmo código! ``` ## Conceito 2: Prompt Templates Templates de prompt permitem criar prompts reutilizáveis com variáveis dinâmicas. ```python from langchain_core.prompts import ChatPromptTemplate # Template simples template = ChatPromptTemplate.from_messages([ ("system", "Você é um {papel} especializado em {area}."), ("human", "{pergunta}") ]) # Formatar o template com valores prompt_formatado = template.invoke({ "papel": "consultor financeiro", "area": "investimentos de renda variável", "pergunta": "O que é um ETF e quais são os principais no Brasil?" }) # Invocar o modelo com o prompt formatado modelo = ChatOpenAI(model="gpt-4o-mini") resposta = modelo.invoke(prompt_formatado) print(resposta.content) ``` ### Templates com Few-shot (exemplos) ```python from langchain_core.prompts import FewShotChatMessagePromptTemplate exemplos = [ {"input": "Isso é incrível!", "output": "positivo"}, {"input": "Produto horrível, não recomendo.", "output": "negativo"}, {"input": "Chegou no prazo.", "output": "neutro"}, ] exemplo_template = ChatPromptTemplate.from_messages([ ("human", "{input}"), ("ai", "{output}"), ]) few_shot_prompt = FewShotChatMessagePromptTemplate( example_prompt=exemplo_template, examples=exemplos, ) prompt_final = ChatPromptTemplate.from_messages([ ("system", "Classifique o sentimento do texto como positivo, negativo ou neutro."), few_shot_prompt, ("human", "{text}"), ]) chain = prompt_final | modelo resultado = chain.invoke({"text": "Demorou um pouco mais que o esperado, mas chegou."}) print(resultado.content) # "neutro" ``` ## Conceito 3: Chains (Cadeias) Chains conectam componentes em sequência. O operador `|` (pipe) cria cadeias de forma elegante. ```python from langchain_core.output_parsers import StrOutputParser # Chain simples: prompt | modelo | parser prompt = ChatPromptTemplate.from_template( "Resuma o seguinte texto em 3 pontos principais em português:\n\n{texto}" ) chain = prompt | modelo | StrOutputParser() resultado = chain.invoke({ "texto": """ A inteligência artificial está transformando como as empresas operam. Desde automação de processos rotineiros até análise preditiva avançada, as organizações que adotam IA reportam ganhos significativos de eficiência. Contudo, a implementação bem-sucedida requer estratégia clara, dados de qualidade e gestão de mudança adequada para os times envolvidos. """ }) print(resultado) ``` ### Chain com múltiplas etapas ```python # Chain 1: Extrair palavras-chave prompt_keywords = ChatPromptTemplate.from_template( "Extraia 5 palavras-chave do texto abaixo (separadas por vírgula):\n{texto}" ) chain_keywords = prompt_keywords | modelo | StrOutputParser() # Chain 2: Gerar artigo baseado nas palavras-chave prompt_artigo = ChatPromptTemplate.from_template( "Escreva um parágrafo de 100 palavras usando estas palavras-chave: {keywords}" ) chain_artigo = prompt_artigo | modelo | StrOutputParser() # Combinar as chains from langchain_core.runnables import RunnableLambda chain_completa = ( {"texto": lambda x: x["texto"]} | chain_keywords | (lambda keywords: {"keywords": keywords}) | chain_artigo ) resultado = chain_completa.invoke({ "texto": "A automação com IA reduz custos e aumenta a produtividade das equipes..." }) print(resultado) ``` ## Conceito 4: Structured Output (Saída Estruturada) Extraia dados estruturados do texto usando Pydantic: ```python from pydantic import BaseModel, Field from typing import List class DadosEmpresa(BaseModel): nome: str = Field(description="Nome da empresa") setor: str = Field(description="Setor de atuação") funcionarios: int = Field(description="Número aproximado de funcionários") tecnologias: List[str] = Field(description="Tecnologias mencionadas") # Modelo com saída estruturada modelo_estruturado = modelo.with_structured_output(DadosEmpresa) resultado = modelo_estruturado.invoke( """ A TechBrasil é uma empresa de software com cerca de 250 funcionários, atuando no setor de fintech. Usam principalmente Python, React e AWS em sua stack tecnológica. """ ) print(resultado.nome) # TechBrasil print(resultado.funcionarios) # 250 print(resultado.tecnologias) # ['Python', 'React', 'AWS'] ``` ## Conceito 5: Memória para conversas Para criar chatbots com memória de conversa, use o histórico de mensagens: ```python from langchain_core.chat_history import InMemoryChatMessageHistory from langchain_core.runnables.history import RunnableWithMessageHistory # Armazenamento de histórico store = {} def obter_historico(session_id: str) -> InMemoryChatMessageHistory: if session_id not in store: store[session_id] = InMemoryChatMessageHistory() return store[session_id] # Prompt que inclui histórico prompt_com_historico = ChatPromptTemplate.from_messages([ ("system", "Você é um assistente prestativo que responde em português."), ("placeholder", "{historico}"), ("human", "{input}"), ]) chain = prompt_com_historico | modelo | StrOutputParser() # Adicionar gestão de histórico chain_com_memoria = RunnableWithMessageHistory( chain, obter_historico, input_messages_key="input", history_messages_key="historico", ) # Simular uma conversa config = {"configurable": {"session_id": "usuario-123"}} resposta1 = chain_com_memoria.invoke( {"input": "Meu nome é Carlos e trabalho com análise de dados."}, config=config ) print(resposta1) resposta2 = chain_com_memoria.invoke( {"input": "Qual é o meu nome?"}, # O chatbot deve lembrar! config=config ) print(resposta2) # Responderá "Carlos" ``` ## Conceito 6: RAG (Retrieval Augmented Generation) Construir um sistema de RAG do zero com LangChain: ```python from langchain_community.document_loaders import PyPDFLoader, TextLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma from langchain_core.runnables import RunnablePassthrough # 1. Carregar documento loader = TextLoader("documentos/politica_empresa.txt", encoding="utf-8") documentos = loader.load() # 2. Dividir em chunks splitter = RecursiveCharacterTextSplitter( chunk_size=1000, # tamanho de cada chunk em caracteres chunk_overlap=200, # sobreposição entre chunks separators=["\n\n", "\n", ".", " "] ) chunks = splitter.split_documents(documentos) print(f"Total de chunks: {len(chunks)}") # 3. Criar embeddings e armazenar no vetor store embeddings = OpenAIEmbeddings(model="text-embedding-3-small") vectorstore = Chroma.from_documents( documents=chunks, embedding=embeddings, persist_directory="./chroma_db" # salva localmente ) # 4. Criar retriever retriever = vectorstore.as_retriever( search_type="similarity", search_kwargs={"k": 5} # retorna os 5 chunks mais relevantes ) # 5. Criar chain de RAG template_rag = ChatPromptTemplate.from_template(""" Responda a pergunta abaixo baseando-se APENAS no contexto fornecido. Se a resposta não estiver no contexto, diga que não encontrou a informação. Contexto: {contexto} Pergunta: {pergunta} Resposta em português: """) def formatar_docs(docs): return "\n\n".join(doc.page_content for doc in docs) chain_rag = ( {"contexto": retriever | formatar_docs, "pergunta": RunnablePassthrough()} | template_rag | modelo | StrOutputParser() ) # 6. Fazer perguntas resposta = chain_rag.invoke("Qual é a política de home office da empresa?") print(resposta) ``` ## Conceito 7: Agentes com ferramentas Agentes usam LLMs para decidir quais ferramentas usar: ```python from langchain.agents import create_tool_calling_agent, AgentExecutor from langchain.tools import tool import requests from datetime import datetime # Definir ferramentas personalizadas @tool def buscar_cotacao_dolar() -> str: """Busca a cotação atual do dólar em reais.""" # Em produção, use uma API real de câmbio return "1 USD = R$ 5,42 (cotação simulada)" @tool def calcular_preco_em_dolar(preco_reais: float) -> str: """Converte um preço em reais para dólares. Args: preco_reais: O preço em reais a ser convertido """ cotacao = 5.42 # Em produção, buscar cotação real preco_dolar = preco_reais / cotacao return f"R$ {preco_reais:.2f} = US$ {preco_dolar:.2f}" @tool def obter_data_atual() -> str: """Retorna a data e hora atual.""" return datetime.now().strftime("%d/%m/%Y %H:%M") ferramentas = [buscar_cotacao_dolar, calcular_preco_em_dolar, obter_data_atual] # Prompt do agente prompt_agente = ChatPromptTemplate.from_messages([ ("system", "Você é um assistente financeiro útil. Use as ferramentas disponíveis quando necessário."), ("placeholder", "{chat_history}"), ("human", "{input}"), ("placeholder", "{agent_scratchpad}"), ]) # Criar agente agente = create_tool_calling_agent(modelo, ferramentas, prompt_agente) executor = AgentExecutor(agente=agente, ferramentas=ferramentas, verbose=True) # Executar resultado = executor.invoke({ "input": "Quanto custa em dólares um produto que vale R$ 1.500? Qual é a cotação atual?", "chat_history": [] }) print(resultado["output"]) ``` ## Streaming: respostas em tempo real Para melhor UX, use streaming para mostrar a resposta conforme ela é gerada: ```python prompt = ChatPromptTemplate.from_template("Explique {topico} de forma detalhada.") chain = prompt | modelo | StrOutputParser() # Streaming for chunk in chain.stream({"topico": "como funciona o RAG em IA"}): print(chunk, end="", flush=True) print() # Nova linha ao finalizar ``` ## LangSmith: observabilidade e debug Para projetos em produção, configure o LangSmith para rastrear execuções: ```python # No arquivo .env # LANGCHAIN_TRACING_V2=true # LANGCHAIN_API_KEY=ls__sua-chave-langsmith # LANGCHAIN_PROJECT=meu-projeto # Com essas variáveis configuradas, todas as execuções são # automaticamente registradas no LangSmith para análise ``` O LangSmith permite ver cada chamada ao LLM, os tokens usados, a latência e debugar quando algo dá errado — essencial para produção. ## Próximos passos Com este tutorial, você tem os fundamentos para construir aplicações reais com LangChain: 1. **Pratique cada conceito** com seus próprios dados e casos de uso 2. **Explore a documentação oficial** em python.langchain.com — é excelente e sempre atualizada 3. **Estude LangGraph** para agentes mais complexos com estados e grafos de fluxo 4. **Implemente um projeto real**: Um chatbot para sua empresa, um sistema de RAG para seus documentos, ou um agente para automatizar uma tarefa específica O ecossistema LangChain é vasto — Templates, Hub de prompts, integrações com centenas de serviços. Mas os fundamentos cobertos aqui são suficientes para construir 90% das aplicações que a maioria das empresas precisa. Boa codificação!