Este é um projeto para a disciplina de TÓPICOS AVANÇADOS EM INTELIGÊNCIA COMPUTACIONAL 1 do Mestrado Profissional em Tecnologia da Informação da UFRN e implementa um chat acadêmico que auxilia pesquisadores a acessar e compreender informações sobre artigos científicos utilizando uma base de dados autoral de artigos retiradas do sofware zotero. O assistente utiliza python como linguagem de programação, Streamlit como interface, LangChain para a construção da lógica, e Chroma para a indexação vetorial de dados. Além disso, o ambiente de desenvolvimento é configurado utilizando DevContainer e Poetry.
Esse projeto surgiu de uma necessidade pessoal, quando no processo de revisão de literatura científica, me deparei com um grande número de artigos salvos em ferramentas como o Zotero para serem estudados. Porém, encontrar tópicos relevantes em meio a esse mar de artigos pode ser um desafio, especialmente quando se busca agilidade sem a necessidade de buscas profundas manuais. Este projeto aborda essa problemática ao oferecer uma solução baseada em RAG, permitindo que perguntas sejam feitas diretamente a um LLM, agilizando o trabalho de revisão e recuperação de informações relevantes.
-
Tradução Automática:
- Traduz colunas específicas de arquivos CSV para português, incluindo nomes de colunas e conteúdo.
-
Chunking de Textos:
- Divide grandes textos em partes menores para facilitar o processamento.
-
Armazenamento Vetorial:
- Cria ou carrega um armazenamento vetorial com embeddings para busca eficiente de documentos.
-
Interface Interativa:
- Permite aos usuários interagir com o modelo, fazer perguntas e receber respostas baseadas nos dados indexados.
streamlit_app.py
: Arquivo principal contendo a lógica da aplicação.data/
: Pasta para armazenamento de arquivos CSV e bases de dados..env
: Arquivo para configuração de variáveis de ambiente.Dockerfile
edevcontainer.json
: Arquivos de configuração para o ambiente DevContainer.pyproject.toml
: Arquivo de configuração do Poetry para gerenciar dependências.
- Docker e DevContainer configurados.
- Python 3.10+
-
Clone o Repositório:
git clone https://github.com/Frankson18/project-rag-llm cd project-rag-llm
-
Abra o DevContainer: Certifique-se de que o DevContainer está configurado. Abra o projeto em um editor compatível, como VS Code, e inicialize o DevContainer.
-
Instale Dependências:
poetry install poetry shell
-
Configure o
.env
: Crie um arquivo.env
na raiz do projeto com as seguintes variáveis:OPENAI_API_KEY=YOUR_API_KEY PERSIST_DIRECTORY=/tmp/chroma_db_openai
-
Execute a Aplicação:
streamlit run streamlit_app.py
-
Acesse no Navegador: Abra
http://localhost:8501
para interagir com a aplicação.
-
translate_csv_columns
: Tradução de colunas e seus nomes em um arquivo CSV usando um pipeline de LLM. -
chunk_data
: Divide textos em partes menores para processamento eficiente. -
get_or_create_vector_store
: Gera ou carrega um armazenamento vetorial para busca por similaridade. -
configure_streamlit_interface
: Configura a interface interativa no Streamlit para consultas e interações com o modelo. -
main
: Função principal que carrega variáveis de ambiente, traduz arquivos CSV e inicializa a interface Streamlit.
A base de dados utilizada é um arquivo CSV exportado do Zotero. Certifique-se de que o arquivo está localizado na pasta data/
e nomeado como weak_supervision.csv
. Para tradução, o arquivo resultante será salvo como weak_supervision_translate.csv
.
- Cache no Streamlit: A função
get_retriever
utiliza o cache para melhorar o desempenho. - Limitações de Tradução: As traduções dependem de um modelo de linguagem, que pode apresentar imprecisões.
- A função de tradução:A função esta comentada, pois o arquivo traduzido já esta disponivel.
- Recriação do Vector Store: Utilize a flag
force_create=True
emget_or_create_vector_store
caso precise forçar a recriação do armazenamento vetorial.
- Implementar routing de LLMs para permitir o uso de vários modelos além da OpenAI.
- Utilizar um modelo de embeddings especializado em multilinguagem e com foco no português.
- Aperfeiçoar a busca no sistema RAG para aumentar a precisão e relevância dos resultados.