1
resposta

07 Faça como eu fiz: configurar Langchain RAG

ETAPA 1 — Configurar Ambiente Virtual
Criar ambiente virtual
python -m venv rag_env

Ativar ambiente

Windows

rag_env\Scripts\activate

Mac/Linux

source rag_env/bin/activate

Atualizar pip
python -m pip install --upgrade pip

ETAPA 2 — Instalar Dependências
pip install langchain langchain-openai langchain-community python-dotenv jupyter
ETAPA 3 — Preparar Jupyter
jupyter notebook

Sem Jupyter:

Selecionar kernel correspondente ao rag_env.

ETAPA 4 — Criar Arquivo .env

Arquivo .env:

OPENAI_API_KEY="sua_chave_aqui"
LANGCHAIN_TRACING_V2="true"
LANGCHAIN_API_KEY="sua_chave_langsmith"
LANGCHAIN_PROJECT="RAG-DATALEX"

ETAPA 5 — Código do Caderno

Agora começa a implementação técnica.

Carregar Variáveis ​​de Ambiente
import os
from dotenv import load_dotenv

load_dotenv()

Carregar Documentos (TextLoader)
from langchain_community.document_loaders import TextLoader

loader = TextLoader("manual_tecnico.txt")
docs = loader.load()

len(docs)

Divisão em partes (RecursiveCharacterTextSplitter)
from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=150
)

chunks = splitter.split_documents(docs)

len(chunks)

Gerar Embeddings
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
model="text-embedding-3-small"
)

Modelo e eficiente.

Criar Banco Vetorial (InMemory)
from langchain_community.vectorstores import InMemoryVectorStore

vector_store = InMemoryVectorStore.from_documents(
documents=chunks,
embedding=embeddings
)

Ideal para testes e protótipos.

Criar Retriever
retriever = vector_store.as_retriever(search_kwargs={"k": 3})

Recupera os 3 pedaços mais relevantes.

ETAPA 6 — Modelo de prompt Montar
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
[
("system",
"Responda usando exclusivamente o contexto fornecido.\n\nContexto:\n{context}"),
("human", "{question}")
]
)

Importante:

Prompt restritivo → reduz a alucinação.

ETAPA 7 — Configurar Modelo OpenAI
from langchain_openai import ChatOpenAI

model = ChatOpenAI(
model="gpt-4o-mini",
temperature=0
)

Temperatura 0 → respostas mais determinísticas.

ETAPA 8 — Criar Cadeia RAG
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

rag_chain = (
{
"context": retriever,
"question": RunnablePassthrough()
}
| prompt
| model
| StrOutputParser()
)

situação:

Query → Retriever → Prompt → LLM → Output

RAG completo.

ETAPA 9 — Executar Pergunta
pergunta = "Qual é o procedimento de backup descrito no manual?"

resposta = rag_chain.invoke(pergunta)

print(resposta)

ETAPA 10 — Debug com LangSmith

Com:

LANGCHAIN_TRACING_V2=true

1 resposta

Oi, Moacir! Como vai?

Agradeço por compartilhar suas reflexões e aprendizados com a comunidade Alura.

É isso aí! Você estruturou bem desde o ambiente virtual até a construção da cadeia RAG com RunnablePassthrough e StrOutputParser, mostrando entendimento do fluxo Query → Retriever → Prompt → LLM → Output. Também foi importante destacar o uso de temperature=0 e do prompt restritivo, pois isso impacta diretamente na qualidade das respostas e na redução de alucinações.

Continue documentando nesse nível de detalhe, isso fortalece muito sua clareza técnica.

Como dica, você pode testar diferentes valores de chunk_size e chunk_overlap para comparar a qualidade das respostas; faça isso alterando os parâmetros do RecursiveCharacterTextSplitter e observando, como muda a recuperação de contexto.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!