Tutorial completo sobre LangChain, cobrindo conceitos fundamentais e…
INEMA
A seguir está o guia completo para criar um Chatbot com LangChain + Supabase + OpenAI, capaz de ler PDFs, armazenar embeddings e responder perguntas com base neles.
1. O que este projeto faz⌗
O sistema:
- Lê arquivos PDF e extrai o texto.
- Divide o conteúdo em trechos menores.
- Cria embeddings (representações vetoriais do texto).
- Armazena esses embeddings no Supabase Vector Database.
- Permite que o usuário faça perguntas sobre o conteúdo.
- O GPT responde com base nos trechos mais relevantes encontrados no Supabase.
2. Instalações necessárias⌗
Execute no terminal:
pip install langchain openai supabase faiss-cpu pypdf
3. Configuração do Supabase⌗
No painel do Supabase:
- Crie um projeto novo.
- Vá em Table Editor → New Table → nomeie como
documents. - Crie as colunas:
| Nome | Tipo | Descrição |
|---|---|---|
| id | uuid | Primary key (auto gerado) |
| content | text | Texto original do documento |
| metadata | jsonb | Metadados (ex: nome do arquivo) |
| embedding | vector(1536) | Vetor de embeddings do OpenAI |
- Habilite a extensão vector no Supabase SQL Editor:
create extension if not exists vector;
4. Código completo (LangChain + Supabase)⌗
```from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import SupabaseVectorStore from langchain.llms import OpenAI from langchain.chains import RetrievalQA from supabase import create_client
CONFIGURAÇÕES⌗
SUPABASE_URL = "SEU_PROJETO.supabase.co ↗" SUPABASE_KEY = "SUA_CHAVE_API_SUPABASE" OPENAI_KEY = "SUA_CHAVE_API_OPENAI"
1. Conectar ao Supabase⌗
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
2. Carregar PDF⌗
loader = PyPDFLoader("seu_arquivo.pdf") documents = loader.load()
3. Dividir texto em blocos⌗
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100) docs = splitter.split_documents(documents)
4. Criar embeddings⌗
embeddings = OpenAIEmbeddings(api_key=OPENAI_KEY)
5. Criar o vetor no Supabase⌗
vector_store = SupabaseVectorStore.from_documents( docs, embeddings, client=supabase, table_name="documents", )
print("✅ Embeddings enviados com sucesso para o Supabase!")
6. Criar modelo de linguagem e retrieval⌗
llm = OpenAI(api_key=OPENAI_KEY, temperature=0) retriever = vector_store.as_retriever(search_kwargs={"k": 3}) qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=retriever)
7. Fazer perguntas⌗
while True: pergunta = input("\nPergunte algo sobre o PDF (ou 'sair'): ") if pergunta.lower() == "sair": break resposta = qa_chain.run(pergunta) print("\nResposta:", resposta)```
5. Funcionamento passo a passo⌗
- PyPDFLoader lê o conteúdo do PDF.
- TextSplitter divide o texto em blocos menores.
- OpenAIEmbeddings transforma cada bloco em vetores (1536 dimensões).
- SupabaseVectorStore envia os vetores para o Supabase.
- Quando você faz uma pergunta, ele busca os vetores mais próximos (semântica) e gera a resposta com base neles.
6. Resultado esperado⌗
```✅ Embeddings enviados com sucesso para o Supabase!
Pergunte algo sobre o PDF (ou 'sair'): Qual é o tema principal do documento? Resposta: O documento aborda o impacto da inteligência artificial na medicina moderna...```
7. Próximos passos⌗
- Substituir o PDF por múltiplos arquivos, carregando cada um com metadados diferentes.
- Criar uma interface web com Streamlit ou FastAPI.
- Usar LangServe para transformar o chatbot em uma API.
- Integrar com Make.com ou n8n para automação de consultas.
Vamos criar um exemplo prático e completo em Python usando LangChain + OpenAI + PDF, simulando um chatbot que responde perguntas com base em um documento.
1. Objetivo⌗
Criar um sistema que:
- Leia um arquivo PDF.
- Converta o conteúdo em vetores (usando embeddings).
- Armazene no banco vetorial (FAISS).
- Permita que o usuário faça perguntas sobre o conteúdo.
- Gere respostas contextuais usando o GPT (via LangChain).
2. Instalação das bibliotecas⌗
Execute no terminal:
pip install langchain openai faiss-cpu pypdf
3. Código completo do chatbot com PDF⌗
```from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.document_loaders import PyPDFLoader from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import FAISS from langchain.chains import RetrievalQA from langchain.llms import OpenAI
1. Carregar o PDF⌗
loader = PyPDFLoader("seu_arquivo.pdf") # Substitua pelo nome do seu arquivo documents = loader.load()
2. Dividir o texto em partes menores⌗
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100) docs = text_splitter.split_documents(documents)
3. Criar embeddings (representação vetorial do texto)⌗
embeddings = OpenAIEmbeddings(api_key="SUA_CHAVE_API_AQUI")
4. Criar banco vetorial (FAISS)⌗
db = FAISS.from_documents(docs, embeddings)
5. Criar o modelo de linguagem⌗
llm = OpenAI(temperature=0, api_key="SUA_CHAVE_API_AQUI")
6. Conectar o LLM ao retriever (sistema RAG)⌗
qa = RetrievalQA.from_chain_type( llm=llm, retriever=db.as_retriever(search_kwargs={"k": 3}), # busca os 3 trechos mais relevantes chain_type="stuff" )
7. Fazer perguntas⌗
while True: pergunta = input("\nPergunte algo sobre o PDF (ou 'sair' para encerrar): ") if pergunta.lower() == "sair": break resposta = qa.run(pergunta) print("\nResposta:", resposta)```
4. O que acontece passo a passo⌗
- Carregamento – o PyPDFLoader lê o conteúdo de cada página.
- Divisão – o texto é dividido em partes (chunks) para melhorar o contexto.
- Embeddings – cada trecho é convertido em vetores numéricos.
- FAISS – cria um índice para busca semântica rápida.
- RetrievalQA – conecta o banco vetorial ao GPT.
- Perguntas – quando você faz uma pergunta, o GPT busca os trechos mais relevantes e responde com base neles.
5. Resultado esperado⌗
Quando você rodar o script, verá algo assim:
Pergunte algo sobre o PDF (ou 'sair' para encerrar): Qual é o tema principal do documento?
Resposta: O documento trata sobre o uso de inteligência artificial na saúde...
6. Próximos passos (opcionais)⌗
- Substituir FAISS por Supabase ou Pinecone para busca vetorial em nuvem.
- Adicionar Streamlit ou Gradio para criar uma interface web.
- Integrar LangChain Agents para permitir ações automáticas (buscar sites, fazer cálculos, etc.).
LangChain é uma biblioteca de código aberto criada para facilitar o desenvolvimento de aplicações baseadas em Modelos de Linguagem (LLMs), como o GPT. Ele funciona como uma ponte entre o modelo de IA e os dados, APIs ou fluxos de lógica da aplicação.
1. O que é o LangChain⌗
LangChain é um framework que organiza a forma como os LLMs interagem com dados e ferramentas externas. Ele permite que você construa sistemas de IA capazes de:
- Fazer análises complexas de informações;
- Conectar bancos de dados e fontes externas;
- Executar ações (como buscas, cálculos ou consultas);
- E lembrar do contexto de conversas anteriores.
Em resumo, ele transforma um LLM em algo muito mais poderoso do que apenas um “chatbot”: torna-o um agente inteligente com memória, lógica e acesso a dados reais.
2. Como o LangChain funciona⌗
O funcionamento se baseia em componentes modulares que podem ser combinados para criar fluxos complexos:
a) Modelos (LLMs)⌗
São os motores de linguagem — como GPT, Claude, Gemini ou Mistral — que geram respostas.
b) Prompts⌗
São as instruções passadas ao modelo. O LangChain ajuda a estruturar e reutilizar prompts, tornando-os dinâmicos e adaptáveis.
c) Memória⌗
Permite que o sistema “lembre” de interações anteriores ou informações do usuário, como um histórico de conversa.
d) Chains (Cadeias)⌗
São fluxos lógicos de execução. Por exemplo:
- Fazer uma pergunta ao usuário;
- Buscar dados em uma API;
- Passar o resultado ao LLM;
- Retornar uma resposta final.
e) Agents (Agentes)⌗
São versões avançadas das “chains” que decidem sozinhos o que fazer — por exemplo, se devem chamar uma API, usar uma calculadora, ou gerar texto.
f) Retrievers e VectorStores⌗
Permitem integrar dados externos, como PDFs, bancos de dados ou documentos. Eles são usados em sistemas RAG (Retrieval-Augmented Generation) — onde o LLM consulta dados antes de responder.
3. Exemplo prático⌗
Imagine um assistente que responde perguntas sobre documentos da empresa:
- O LangChain lê e “transforma” os documentos em vetores (usando embeddings).
- Quando o usuário faz uma pergunta, ele busca os trechos mais relevantes.
- O LLM (por exemplo, GPT-4) usa esses trechos para gerar uma resposta precisa.
Isso cria um chat inteligente com base nos dados da empresa.
4. Ecossistema do LangChain⌗
- LangSmith: para depurar e monitorar o comportamento do seu app de IA.
- LangServe: para implantar suas aplicações como APIs.
- LangGraph: para criar fluxos complexos com lógica condicional e memória.
5. Exemplos de uso⌗
- Chatbots empresariais com memória e busca em documentos;
- Ferramentas de atendimento automatizado;
- Sistemas de análise de relatórios;
- Aplicativos que conectam IA a bancos de dados, planilhas ou APIs.
6. Exemplo simples de código⌗
```from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.prompts import PromptTemplate
template = "Explique em termos simples o que é {tema}." prompt = PromptTemplate(input_variables=["tema"], template=template) llm = OpenAI(api_key="SUA_API_KEY_AQUI") chain = LLMChain(llm=llm, prompt=prompt)
resposta = chain.run("inteligência artificial") print(resposta)```
LangChain Interface com LLMs
1