# Aplicação Local RAG com Pesquisa Híbrida

> Uma poderosa aplicação de perguntas e respostas sobre documentos que utiliza Pesquisa Híbrida (RAG) e LLMs locais para respostas abrangentes. Construída com RAGLite para processamento e recuperação robustos de documentos, e Streamlit para uma interface de chat intuitiva, este sistema combina conhecimento específico de documentos com capacidades de LLM locais para fornecer respostas precisas e contextuais.

- Fonte: https://doutorai.pt/apps/local-hybrid-search-rag
- Categoria: RAG e Conhecimento
- Dificuldade: Médio
- Modelos: Llama
- Frameworks: -
- Corre local?: Sim (Ollama)
- Chaves necessárias: Nenhuma
- Licença: Apache-2.0
- Site: Doutor AI (https://doutorai.pt) - ferramentas de IA para pequenos negócios em português

## Tutorial completo

# 🖥️ Aplicação RAG Local com Pesquisa Híbrida

Uma poderosa aplicação de perguntas e respostas sobre documentos que utiliza Pesquisa Híbrida (RAG) e LLMs locais para respostas abrangentes. Construída com RAGLite para um processamento e recuperação de documentos robustos, e Streamlit para uma interface de chat intuitiva, este sistema combina conhecimento específico de documentos com capacidades de LLM locais para fornecer respostas precisas e contextuais.

## Demonstração:

https://github.com/user-attachments/assets/375da089-1ab9-4bf4-b6f3-733f44e47403

## Início Rápido

Para testes imediatos, utiliza estas configurações de modelo testadas:

```bash
# LLM Model
bartowski/Llama-3.2-3B-Instruct-GGUF/Llama-3.2-3B-Instruct-Q4_K_M.gguf@4096

# Embedder Model
lm-kit/bge-m3-gguf/bge-m3-Q4_K_M.gguf@1024
```

```markdown
Estes modelos oferecem um bom equilíbrio entre desempenho e utilização de recursos, e foram verificados para funcionar bem juntos, mesmo num MacBook Air M2 com 8GB de RAM.

## Funcionalidades

- **Integração de LLM Local**:
  - Utiliza modelos llama-cpp-python para inferência local
  - Suporta vários formatos de quantização (Q4_K_M recomendado)
  - Tamanhos de janela de contexto configuráveis

- **Processamento de Documentos**:
  - Upload e processamento de documentos PDF
  - Divisão automática de texto e incorporação
  - Pesquisa híbrida combinando correspondência semântica e por palavras-chave
  - Reclassificação para melhor seleção de contexto

- **Integração Multi-Modelo**:
  - LLM local para geração de texto (ex.: Llama-3.2-3B-Instruct)
  - Incorporações locais utilizando modelos BGE
  - FlashRank para reclassificação local

## Pré-requisitos

1. **Instalar o Modelo spaCy**:
```

```bash
   pip install https://github.com/explosion/spacy-models/releases/download/xx_sent_ud_sm-3.7.0/xx_sent_ud_sm-3.7.0-py3-none-any.whl
   ```

```markdown
2. **Instalar Accelerated llama-cpp-python** (Opcional, mas recomendado):
```

```bash
   # Configure installation variables
   LLAMA_CPP_PYTHON_VERSION=0.3.2
   PYTHON_VERSION=310 # 3.10, 3.11, 3.12
   ACCELERATOR=metal  # For Mac
   # ACCELERATOR=cu121  # For NVIDIA GPU
   PLATFORM=macosx_11_0_arm64  # For Mac
   # PLATFORM=linux_x86_64  # For Linux
   # PLATFORM=win_amd64  # For Windows

   # Install accelerated version
   pip install "https://github.com/abetlen/llama-cpp-python/releases/download/v$LLAMA_CPP_PYTHON_VERSION-$ACCELERATOR/llama_cpp_python-$LLAMA_CPP_PYTHON_VERSION-cp$PYTHON_VERSION-cp$PYTHON_VERSION-$PLATFORM.whl"
   ```

```markdown
3. **Instalar Dependências**:
```

```bash
   git clone https://github.com/Shubhamsaboo/awesome-llm-apps.git
   cd awesome-llm-apps/rag_tutorials/local_hybrid_search_rag
   pip install -r requirements.txt
   ```

## Configuração do Modelo

RAGLite estende o LiteLLM com suporte para modelos llama.cpp utilizando llama-cpp-python. Para selecionar um modelo llama.cpp (por exemplo, da coleção de bartowski), utiliza um identificador de modelo do formato "llama-cpp-python/<hugging_face_repo_id>/<filename>@<n_ctx>", onde n_ctx é um parâmetro opcional que especifica o tamanho do contexto do modelo.

1. **Formato do Caminho do Modelo LLM**:

```
   llama-cpp-python/<repo>/<model>/<filename>@<context_length>
   ```

```markdown
# Instalação do Projecto

Para instalar o projecto, segue os passos abaixo.

## Pré-requisitos

Certifica-te de que tens os seguintes programas instalados:

- Node.js (versão 14 ou superior)
- npm (versão 6 ou superior)

## Clonar o Repositório

Primeiro, clona o repositório para a tua máquina local:

```bash
git clone https://github.com/usuario/projeto.git
```

## Instalação das Dependências

Navega até à pasta do projecto e instala as dependências:

```bash
cd projeto
npm install
```

## Executar o Projecto

Para executar o projecto, utiliza o seguinte comando:

```bash
npm start
```

O projecto estará disponível em `http://localhost:3000`.

## Testes

Para executar os testes, utiliza:

```bash
npm test
```

## Contribuição

Se desejas contribuir para o projecto, por favor, segue estas etapas:

1. Cria um fork do repositório.
2. Cria uma nova branch para a tua funcionalidade ou correção de bug:
   ```bash
   git checkout -b minha-funcionalidade
   ```
3. Faz as tuas alterações e commit:
   ```bash
   git commit -m "Adiciona nova funcionalidade"
   ```
4. Faz push para a branch:
   ```bash
   git push origin minha-funcionalidade
   ```
5. Abre um Pull Request.

## Licença

Este projecto está licenciado sob a Licença MIT. Consulta o ficheiro [LICENSE](LICENSE) para mais informações.
```

```
   bartowski/Llama-3.2-3B-Instruct-GGUF/Llama-3.2-3B-Instruct-Q4_K_M.gguf@4096
   ```

```markdown
2. **Formato do Caminho do Modelo Embedder**:
```

```
   llama-cpp-python/<repo>/<model>/<filename>@<dimension>
   ```

```markdown
# Instalação do Projecto

Para instalar o projecto, segue os passos abaixo.

## Pré-requisitos

Certifica-te de que tens os seguintes programas instalados:

- Node.js (versão 14 ou superior)
- npm (versão 6 ou superior)

## Clonar o Repositório

Primeiro, clona o repositório para a tua máquina local:

```bash
git clone https://github.com/usuario/projeto.git
```

## Instalação das Dependências

Navega até à pasta do projecto e instala as dependências:

```bash
cd projeto
npm install
```

## Executar o Projecto

Para executar o projecto, utiliza o seguinte comando:

```bash
npm start
```

O projecto estará disponível em `http://localhost:3000`.

## Testes

Para executar os testes, utiliza:

```bash
npm test
```

## Contribuição

Se desejas contribuir para o projecto, por favor, segue estas etapas:

1. Cria um fork do repositório.
2. Cria uma nova branch para a tua funcionalidade ou correção de bug:
   ```bash
   git checkout -b minha-funcionalidade
   ```
3. Faz as tuas alterações e commit:
   ```bash
   git commit -m "Adiciona nova funcionalidade"
   ```
4. Faz push para a branch:
   ```bash
   git push origin minha-funcionalidade
   ```
5. Abre um Pull Request.

## Licença

Este projecto está licenciado sob a Licença MIT. Consulta o ficheiro [LICENSE](LICENSE) para mais informações.
```

```
   lm-kit/bge-m3-gguf/bge-m3-Q4_K_M.gguf@1024
   ```

## Configuração da Base de Dados

A aplicação suporta múltiplos backends de base de dados:

- **PostgreSQL** (Recomendado):
  - Cria uma base de dados PostgreSQL sem servidor gratuita em [Neon](https://neon.tech) em poucos cliques
  - Obtém provisionamento instantâneo e capacidade de escalonamento para zero
  - Formato da string de conexão: `postgresql://user:pass@ep-xyz.region.aws.neon.tech/dbname`


## Como Executar

1. **Iniciar a Aplicação**:

```bash
   streamlit run local_main.py
   ```

```markdown
2. **Configura a Aplicação**:
   - Introduz o caminho do modelo LLM
   - Introduz o caminho do modelo embedder
   - Define a URL da base de dados
   - Clica em "Guardar Configuração"

3. **Carrega Documentos**:
   - Carrega ficheiros PDF através da interface
   - Espera pela conclusão do processamento

4. **Começa a Conversar**:
   - Faz perguntas sobre os teus documentos
   - Obtém respostas utilizando o LLM local
   - Recorre ao conhecimento geral quando necessário

## Notas

- Um tamanho de janela de contexto de 4096 é recomendado para a maioria dos casos de uso
- A quantização Q4_K_M oferece um bom equilíbrio entre velocidade e qualidade
- O embedder BGE-M3 com 1024 dimensões é o ideal
- Modelos locais requerem RAM e recursos de CPU/GPU suficientes
- Aceleração Metal disponível para Mac, CUDA para GPUs NVIDIA

## Contribuições

As contribuições são bem-vindas! Sente-te à vontade para submeter um Pull Request.
```

## Poupe horas todas as semanas com IA, sem complicações

O **Doutor AI** dá-lhe 1859 prompts de IA prontos a copiar, por indústria e em português simples - mais uma biblioteca técnica completa para quem quer ir mais longe. [Ver planos →](https://doutorai.pt/precos)

---
Conteúdo de Doutor AI (https://doutorai.pt). Ao citar, indique a fonte: https://doutorai.pt/apps/local-hybrid-search-rag
