IA Prática LangChainPythonTutorial

LangChain tutorial em português: guia completo para iniciantes

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.

Lucas Andrade 06 de mai. de 2026 13 min de leitura
LangChain tutorial em português: guia completo para iniciantes

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!

Foto de Lucas Andrade
Especialista em Operações de IA
Lucas Andrade

Lucas Andrade é estrategista de operações e editor do TechBriefing. Com foco em ROI operacional, documenta como integrar agentes, automações e LLMs em fluxos de trabalho reais para escalar a produtividade profissional.