Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - vThor27/Sabia · GitHub
Skip to content

Repository files navigation

🐦 Sabiá – Assistente Virtual Universitário

No dia a dia acadêmico, informações importantes costumam estar espalhadas por diferentes documentos, regulamentos, sistemas e sites institucionais. Isso pode dificultar o acesso e a compreensão para estudantes, professores e agentes administrativos, especialmente quando há prazos, dúvidas urgentes ou processos pouco intuitivos.

O Sabiá foi criado para resolver esse problema: um assistente virtual que centraliza o conhecimento institucional de forma clara, acessível e inteligente. Seu nome foi escolhido por remeter ideias como leveza, clareza e comunicação — qualidades ideais para um chatbot no ambiente acadêmico. O Sabiá oferece respostas rápidas e confiáveis, promovendo uma experiência mais fluida, eficiente e acolhedora para toda a comunidade universitária.

Este projeto foi feito com ❤️ por e para a comunidade acadêmica.


🌱 Por que “Sabiá”?

O sabiá é uma ave amplamente admirada no Brasil, associada à beleza, liberdade e à conexão com a natureza, além de também ser conhecida como a Ave Nacional. Seu canto inspira sensibilidade e tradição, sendo frequentemente presente na cultura popular e na memória afetiva dos brasileiros. Seu canto também é frequentemente associado à Comunicação. Escolher o nome “Sabiá” para este projeto é uma forma de homenagear esse símbolo nacional, reforçando os laços entre inovação tecnológica e identidade cultural. O objetivo do Sabiá é promover o conhecimento de forma acessível e ampliar o acesso à informação no dia a dia de universitários, docentes e agentes admnistrativos.


Interface da aplicação#ParaTodosVerem: A imagem consiste na tela da aplicação Sabiá, que consiste na interface dessa aplicação. Na parte superior tem um título "Sabiá - Assistente Virtual". Mais abaixo, tem um exemplo de interação entre o usuário e o chatbot. Alinhado à direita, tem a pergunta do usuário com um emoji de um estudante no computador. Alinhado à esquerda, tem a resposta do chatbot com um emoji que representa um pássaro. Também tem um placeholder no final da resposta que indica o modelo de LLM que gerou a resposta. Mais abaixo, tem um campo para o usuário digitar sua pergunta e interagir com a aplicação, com um placeholder "Como eu posso ajudar hoje?"

🚀 Sobre o Projeto

Este projeto foi criado para ser:

Fácil de implementar
🎨 Personalizável
🏫 Adaptável a qualquer universidade ou instituição

Você pode:

  • Personalizar o comportamento do assistente
  • Adaptar o visual da interface
  • Treinar o modelo com documentos institucionais da sua escolha

✨ Ideal para qualquer instituição que deseje seu próprio assistente acadêmico com IA!


⚙️ Tecnologias Utilizadas

  • 🐍 Python 3.9
  • 🖥️ Streamlit — Interface web interativa
  • 🧠 OpenRouter — Acesso a múltiplos LLMs
  • 🧩 ChromaDB — Armazenamento vetorial
  • 🔍 OpenAI Embeddings
  • 🔧 LangChain

📁 Estrutura do Projeto

📂 projeto-sabia/
│
├── 📁 __pycache__/ ├── 📁 .vscode/ ├── 📁 db/ ├── 📁 pdfs/ ├── 📁 venv/ │
├── app.py ├── config.py ├── ingest.py ├── prompt.py ├── rag.py ├── requirements.txt ├── README.md 

🛠️ Como Rodar Localmente

1️⃣ Clone o repositório:

git clone https://github.com/usuario/sabia.git
cd sabia
git checkout -b minha-versao-sabia

2️⃣ Crie e ative o ambiente virtual:

💡 Por que criar um ambiente virtual?
Esse passo é opcional, mas altamente recomendado. Um ambiente virtual isola as dependências do seu projeto, evitando conflitos com pacotes instalados globalmente no sistema. Isso facilita a manutenção, o compartilhamento do projeto com outras pessoas e evita erros inesperados ao trabalhar com múltiplos projetos Python.

python-mvenvvenv# Ativando no Windows:
.venv\Scripts\activate# Ativando no macOS/Linux:sourcevenv/bin/activate

3️⃣ Instale as dependências:

pip install -r requirements.txt

4️⃣ Configure suas chaves:

Crie o arquivo config.py com este conteúdo:

OPENROUTER_API_KEY="sua-chave-openrouter-aqui"OPENAI_API_KEY="sua-chave-openai-aqui"

🔐 Ambas as chaves são opcionais, dependendo do modelo e embeddings que você quiser usar.

5️⃣ Inicie o aplicativo:

streamlit run app.py

🧠 Treinando o Modelo com Seus Documentos

  1. Coloque seus regulamentos, manuais e documentos institucionais na pasta /pdfs
  2. O script ingest.py é rodado automaticamente quando a aplicação é executada, criando assim os embeddings com base nesses documentos.

🔍 Arquitetura da Aplicação

🧩 Como Funciona:

  1. O usuário envia uma pergunta pela interface.
  2. A pergunta é enviada para o RAG (Retrieval-Augmented Generation).
  3. O RAG consulta um banco de dados vetorial com documentos institucionais previamente particionados em trechos (chunks) e convertidos em embeddings.
  4. Após a busca por similaridade, o RAG retorna o contexto relevante.
  5. Esse contexto é combinado com a pergunta do usuário, formando um prompt enriquecido.
  6. O prompt é enviado para o modelo LLM (como GPT-4, Gemini 2.0 Flash, etc.) que gera a resposta final.
  7. A resposta é devolvida para o usuário pela interface.

Interface da aplicação

#ParaTodosVerem: Diagrama da arquitetura da aplicação. À esquerda, há um ícone de usuário enviando uma pergunta para a aplicação (representada por um computador). Uma seta liga a aplicação a uma área destacada com fundo cinza pontilhado que representa o processo RAG (Retrieval-Augmented Generation). Dentro dessa área, há um ícone de lupa sobre documentos representando a busca por similaridade. Essa lupa está conectada por uma seta ao banco de dados vetorial, representado por um cilindro, que por sua vez recebe uma seta vinda de ícones de "chunks" de texto convertidos em embeddings — originados a partir de documentos institucionais. Após a busca por similaridade, uma seta retorna do ícone de busca para a aplicação, com o contexto recuperado pelo RAG. Outra seta parte da aplicação rumo a um ícone que representa o LLM carregando a pergunta do usuário enriquecida com o contexto recuperado. Por fim, uma nova seta traz a resposta gerada pelo LLM de volta para a aplicação, que exibe a resposta ao usuário.


🎨 Personalização

Interface – app.py

Você pode personalizar:

  • Nome da página (st.set_page_config)
  • Ícones e cores
  • Títulos, mensagens e placeholders

Comportamento da IA – prompt.py

Altere o template para definir:

  • Tom de voz (formal, casual, divertido...)
  • Persona (ex: professor, colega de classe, bot neutro...)

Geração de respostas – rag.py

O arquivo rag.py é responsável por gerar a resposta da IA utilizando a técnica de RAG (Retrieval-Augmented Generation). O fluxo geral é:

context=db.similarity_search_with_relevance_scores(user_query, k=3)
context=list(filter(lambdax: x[1] >=0.5, context))

Você pode:

  • Alterar o número de documentos considerados (k)
  • Ajustar a pontuação mínima de relevância (0.5)
  • Trocar o modelo LLM utilizado

🔐 Autenticação

OpenRouter

OpenAI

Coloque suas chaves no arquivo config.py.


🤝 Contribuindo

Achou útil? Quer adaptar para sua instituição?
Fique à vontade! Basta criar um fork, modificar o que quiser e voar com o Sabiá 🐤


📬 Contato

Dúvidas, ideias ou sugestões?
Abra uma issue ou envie uma mensagem pelo GitHub.


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages