Skip to content
brunorsntsPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

57 Commits

Folders and files

Repository files navigation

NotionGPT

Chatbot RAG (Retrieval-Augmented Generation) que responde perguntas baseando-se estritamente nos meus resumos de estudo sincronizados do Notion.

Stack

  • Java 21 + Spring Boot 3.5
  • LangChain4J 1.13.1
  • Anthropic Claude (claude-haiku-4-5) como modelo de chat
  • Cohere contextRetrievalService-multilingual-light-v3.0 como modelo de embeddings
  • PostgreSQL + pgvector como banco vetorial (PgVectorEmbeddingStore)
  • Docker para o banco de dados

Arquitetura (Naive RAG)

Ingestão (sync diário com Notion — @Scheduled, meia-noite)
  NotionClient.buscarPaginas() → processarEmParalelo (CompletableFuture, pool=3)
    → deduplicação por lastEditedTime → NotionClient.buscarBlocos(pageId) → NotionBlockExtractor.extract()
    → DocumentByParagraphSplitter(1500, 200)
    → CohereEmbeddingModel (search_document) → PgVectorEmbeddingStore + PostgreSQL (metadados)
  → falhas → backoff 1s → retentativa única

Consulta (streaming SSE apenas)
  POST /query/stream → ContextRetrievalService.buildContext()
    → CohereEmbeddingModel (search_query) → EmbeddingStore.search(maxResults=4)
    → StreamingChatAssistant.chat() → TokenStream → SseEmitter (meta / token / done / error)

Configuração

Pré-requisitos

  • Java 21+
  • Maven
  • Docker
  • Chave de API da Anthropic
  • Chave de API da Cohere
  • Chave de API do Notion

Variáveis de ambiente

export ANTHROPIC_API_KEY=sua_chave_aqui
export COHERE_API_KEY=sua_chave_aqui
export NOTION_API_KEY=sua_chave_aqui
export NOTION_DATA_SOURCE_ID=id_do_banco_cursos
export DB_USER_PGVECTOR=seu_usuario
export DB_PASSWORD=sua_senha

Propriedades configuráveis

notion.sync.pool-size=3       # threads paralelas no sync (respeita rate limit da Notion API)

Banco de dados

docker compose up -d

Executar

mvn spring-boot:run

A aplicação sobe em http://localhost:8080. O sync com o Notion ocorre automaticamente todo dia à meia-noite.

API

GET /documents

Retorna os documentos indexados (paginado).

DELETE /documents/{id}

Remove um documento pelo ID. Retorna 204 No Content.

POST /query/stream

Streaming SSE de respostas em tempo real. Requer header X-Session-Id (opcional; gerado automaticamente se não fornecido).

// Requisição
{ "query": "O que é o Mockito?" }

// Resposta (eventos SSE)
data: {"meta":{"matchesCount":4,"sources":[{"index":1,"titulo":"Mockito - Introdução","notionUrl":"https://notion.so/abc123"},{"index":2,"titulo":"Testes com Spring","notionUrl":"https://notion.so/def456"}]}}
data: {"token":"Mockito"}
data: {"token":" é"}
data: {"token":" uma"}
...
data: {"done":true}

GET /stats

Retorna estatísticas das últimas 100 consultas (tempo de execução, estágios de falha, etc.).

GET /documents/stats

Retorna contagem total e estatísticas dos documentos indexados.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages