Apesar de nas aulas1 não mostrar nada de banco vetorial, usei conhecimentos que eu já possuo e um pouco de pesquisa para modelo mais atual de embeddings
ps.: Depois vi no repositório que o assunto será visto na aula 2, bom mas de qualquer forma fiz a minha implementação, poderia ter sido outro banco vetorial e mais elaborado, mas segue.
Passos:
Instala bibliotecas do FAISS e dos text-splitters
!pip install faiss-cpu langchain-text-splitters # PARA RAG COM BANCO VETORIAL EM MEMORIA
# Exercício RAG com banco vetorial
# Converta os chunks em embeddings e indexe-os em um banco de dados vetorial para busca semântica;
#importa as bibliotecas
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_google_genai import GoogleGenerativeAIEmbeddings
from langchain_community.vectorstores import FAISS
Implemente o fluxo RAG conectando o prompt aumentado à LLM, comparando o resultado com o prompt tradicional.
# 1. Dividir o documento em blocos de 500 tokens e sobreposição de 50
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50
)
chunks = text_splitter.split_documents(documento)
# 2. Configurar o modelo de Embeddings do Google
embeddings = GoogleGenerativeAIEmbeddings(model="gemini-embedding-2-preview")
# 3. Criar o índice FAISS e armazenar os chunks
vectorstore = FAISS.from_documents(chunks, embeddings)
# 4. Recuperar os trechos mais relevantes para a pergunta 2 blocos
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
docs_recuperados = retriever.invoke(pergunta)
# Juntar o conteúdo recuperado para formar o contexto do RAG
contexto_rag = "\n\n".join([doc.page_content for doc in docs_recuperados])
# 5. Executar o RAG com o contexto recuperado pelo FAISS mesma chain do bloco anterior
resposta_rag = chain_rag.invoke({"contexto": contexto_rag, "pergunta": pergunta})
print(resposta_rag.content)
Comparando as saídas do rag sem e com FAISS
sem
# Exibe o dicionário completo de uso de tokens da chamada
print(resposta_rag.usage_metadata)
{'input_tokens': 563, 'output_tokens': 1388, 'total_tokens': 1951, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 1059}}
COM
{'input_tokens': 311, 'output_tokens': 811, 'total_tokens': 1122, 'input_token_details': {'cache_read': 0}, 'output_token_details': {'reasoning': 636}}
Da pra perceber uma** redução grande nos tokens** e entrada e saida e raciocínio, ficando no total quase a metade menor em consumo de tokens com resposta similar e mais relevante para:
pergunta = "Qual é a política de home office da nossa empresa?"
SEM
A política de trabalho da empresa é predominantemente híbrida, não exclusivamente home office. As diretrizes são as seguintes:
- Modalidade: A modalidade padrão é híbrida, compreendendo 3 (três) dias de trabalho remoto (home office) e 2 (dois) dias de trabalho presencial no escritório por semana.
- Dias Presenciais: Os dias de trabalho presencial são definidos em comum acordo entre a equipe e o gestor, mas as terças-feiras são designadas como o dia presencial obrigatório para alinhamento de equipe e reuniões estratégicas.
- Elegibilidade: Todos os funcionários em tempo integral, que completaram o período de experiência de 90 dias e cujas funções são compatíveis com o trabalho remoto, são elegíveis, sujeitos à aprovação do gestor direto.
- Horário: A jornada de trabalho de 8 horas diárias pode ser cumprida com flexibilidade, iniciando entre 07:00 e 10:00. O horário de 'core time', no qual todos devem estar disponíveis online ou no escritório, é das 10:00 às 16:00.
- Equipamentos e Auxílio de Custo: A Empresa XYZ fornecerá notebook e, mediante solicitação e aprovação, monitor, teclado e mouse. Um auxílio de custo mensal no valor de R$ 150,00 será concedido para cobrir despesas com internet de alta velocidade.
COM
A política de home office da empresa é baseada em um modelo híbrido:
- Modalidade Padrão: 3 (três) dias de trabalho remoto (home office) e 2 (dois) dias de trabalho presencial no escritório, por semana.
- Elegibilidade: Todos os funcionários em tempo integral, que completaram o período de experiência de 90 dias e cujas funções são compatíveis com o trabalho remoto, são elegíveis. A aprovação final está sujeita ao acordo com o gestor direto.
- Definição dos Dias: Os dias de trabalho presencial (e, consequentemente, os de home office) serão definidos em comum acordo entre a equipe e o gestor, priorizando as terças-feiras para reuniões de alinhamento geral da equipe.