Este projeto implementa um sistema de pesquisa e síntese de informações utilizando LLMs locais e APIs de busca, inspirado no funcionamento do Perplexity AI. O sistema permite que usuários façam perguntas e recebam respostas sintetizadas com base em informações obtidas da web.
- Interface gráfica com Streamlit para interação com o usuário
- Busca na web utilizando APIs como Tavily, Perplexity, e OpenPerplex
- Processamento com LLMs locais utilizando Ollama (Llama 3.1 e DeepSeek-R)
- Orquestração de fluxo com LangGraph para coordenar as etapas de processamento
- Formatação de respostas com referências às fontes utilizadas
O projeto segue uma arquitetura de fluxo de trabalho baseada em LangGraph:
- Geração de consultas - Transforma a pergunta do usuário em múltiplas consultas de busca
- Busca de informações - Executa as consultas em serviços de busca na web
- Processamento e síntese - Utiliza LLMs para sintetizar as informações coletadas
- Apresentação final - Formata a resposta com referências às fontes
O fluxo principal da aplicação utiliza o LangGraph para orquestrar as operações. Abaixo está um diagrama representando este fluxo:
┌─────────┐ ┌──────────────────┐ ┌───────────────────┐
│ │ │ │ │ │
│ START ├────►│build_first_queries├────►spawn_researchers │
│ │ │ │ │ (distribuidor) │
└─────────┘ └──────────────────┘ └─────────┬─────────┘
│
▼
┌─────────┐ ┌──────────────────┐ ┌───────────────────┐
│ │ │ │ │ │
│ END │◄────│ final_writer │◄────│ single_search │
│ │ │ │ │ │
└─────────┘ └──────────────────┘ └───────────────────┘
Descrição das etapas:
- START - Ponto de entrada do grafo
- build_first_queries - Transforma a pergunta do usuário em múltiplas consultas de busca utilizando LLM
- spawn_researchers - Distribui as consultas geradas para pesquisas paralelas
- single_search - Executa cada consulta em APIs de busca e processa os resultados
- final_writer - Sintetiza todos os resultados em uma resposta final com referências
- END - Ponto de saída do grafo
graph.py- Implementação do fluxo de trabalho com LangGraphschemas.py- Definição dos modelos de dados utilizados no sistemaprompts.py- Templates de prompts utilizados na interação com os LLMsutils.py- Funções utilitárias para busca e processamento de dados
- Clone o repositório
- Instale as dependências:
pip install -r requirements.txt - Configure suas chaves de API no arquivo
.env:TAVILY_API_KEY=sua_chave_aqui PERPLEXITY_API_KEY=sua_chave_aqui (opcional) OPENPERPLEX_API_KEY=sua_chave_aqui (opcional) - Certifique-se de ter o Ollama instalado e os modelos necessários baixados:
ollama pull llama3.1:latest ollama pull deepseek-r1:8b
Execute o aplicativo Streamlit:
streamlit run graph.py
Acesse a interface no navegador, digite sua pergunta e clique em "Pesquisar" para obter resultados.
- Python 3.8+
- Ollama (para execução de LLMs locais)
- Acesso à internet para as APIs de busca
Este projeto é distribuído sob a licença MIT.