# 1. INSTALAÇÃO DAS BIBLIOTECAS
!pip install -q -U langchain langchain-google-genai langchain-community langchain-text-splitters pypdf chromadb
# 2. CONFIGURAÇÃO DA API KEY DO GEMINI
from google.colab import userdata
GOOGLE_API_KEY = userdata.get("GEMINI_API_KEY")
print("Chave da API do Gemini configurada com sucesso.")
# 3. IMPORTAÇÃO DO DOCUMENTO PDF
from langchain_community.document_loaders import PyPDFLoader
pdf_path = "/content/sample_data/manual_empresa_novatech.pdf"
loader = PyPDFLoader(pdf_path)
documents = loader.load()
print(f"Documento carregado com sucesso.")
print(f"Quantidade de páginas: {len(documents)}")
# 4. DIVISÃO DO PDF EM CHUNKS
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
length_function=len,
add_start_index=True
)
chunks = text_splitter.split_documents(documents)
print(f"\nQuantidade de páginas: {len(documents)}")
print(f"Quantidade de chunks gerados: {len(chunks)}")
print("\n--- Primeiro chunk ---")
print(chunks[0].page_content)
print("\n--- Metadados do primeiro chunk ---")
print(chunks[0].metadata)
# 5. CRIAÇÃO DOS EMBEDDINGS E DO BANCO VETORIAL
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from langchain_community.vectorstores import Chroma
embeddings = GoogleGenerativeAIEmbeddings(
model="models/gemini-embedding-001",
google_api_key=GOOGLE_API_KEY
)
vector_store = Chroma.from_documents(
documents=chunks,
embedding=embeddings
)
print(f"\nBanco vetorial criado com sucesso.")
print(f"Quantidade de chunks indexados: {len(chunks)}")
# 6. TESTE DA BUSCA SEMÂNTICA
query = "O que a NovaTech recomenda para garantir a segurança da informação?"
resultados = vector_store.similarity_search(
query,
k=3
)
print(f"\nPergunta: {query}")
print(f"Quantidade de documentos recuperados: {len(resultados)}")
for i, doc in enumerate(resultados, 1):
print(f"\n--- Documento recuperado {i} ---")
print(doc.page_content)
print(f"Página: {doc.metadata.get('page', 'N/A')}")
# 7. CONFIGURAÇÃO DO MODELO GEMINI
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(
model="gemini-2.5-flash",
google_api_key=GOOGLE_API_KEY,
temperature=0
)
print("\nModelo Gemini configurado com sucesso.")
# 8. COMPARAÇÃO: GEMINI TRADICIONAL X GEMINI COM RAG
query = "O que a NovaTech recomenda para garantir a segurança da informação?"
# 8.1 Resposta tradicional
resposta_tradicional = llm.invoke(query)
print("\n==============================================")
print(" RESPOSTA DO GEMINI SEM RAG")
print("==============================================")
print(resposta_tradicional.content)
# 8.2 Recuperação dos documentos relevantes
documentos_relevantes = vector_store.similarity_search(
query,
k=3
)
contexto = "\n\n".join(
doc.page_content
for doc in documentos_relevantes
)
# 8.3 Criação do prompt aumentado
prompt_rag = f"""
Você é um assistente que responde perguntas com base
exclusivamente nas informações fornecidas no contexto.
Se a informação solicitada não estiver presente no contexto,
informe que não foi possível encontrar a resposta no documento.
CONTEXTO:
{contexto}
PERGUNTA:
{query}
Responda em português de forma clara e objetiva.
"""
# 8.4 Resposta utilizando RAG
resposta_rag = llm.invoke(prompt_rag)
print("\n==============================================")
print(" RESPOSTA DO GEMINI COM RAG")
print("==============================================")
print(resposta_rag.content)
# 9. EXIBIÇÃO DAS FONTES RECUPERADAS
print("\n==============================================")
print(" FONTES RECUPERADAS PELO RAG")
print("==============================================")
for i, doc in enumerate(documentos_relevantes, 1):
print(f"\nFonte {i}")
print(f"Página: {doc.metadata.get('page', 'N/A')}")
print(f"Conteúdo: {doc.page_content[:300]}...")