Agente de IA pessoal construído com LangGraph e GPT-4o para auxiliar em dois objetivos de desenvolvimento profissional: leitura de artigos científicos em inglês e prática de algoritmos no LeetCode.
- Lista artigos disponíveis no acervo local
- Atualiza status de leitura:
pendente,lendo,lido - Busca semântica de conteúdo via RAG (resumos, tópicos, conceitos)
- Agenda sessões de estudo no Google Calendar
- Rastreia os 75 exercícios mais cobrados em entrevistas (LeetCode 75)
- Marca exercícios como resolvidos, tentados ou para revisitar
- Sugere próximo exercício seguindo a ordem oficial do LeetCode 75
- Consulta progresso por tópico e dificuldade
- Agenda sessões de prática no Google Calendar
- Cria eventos de estudo automaticamente via OAuth2
- Suporte a artigos e exercícios de LeetCode
- Lembretes configurados automaticamente
- Histórico de conversas persistido entre sessões via AsyncSqliteSaver
- Contexto personalizado baseado em interações anteriores
personal-ai-coach/
├── agent.py # Agente principal com LangGraph
├── ingest.py # Pipeline de indexação dos PDFs
├── data/
│ └── articles/ # PDFs dos artigos científicos
├── storage/
│ ├── articles.json # Metadados e status dos artigos
│ ├── leetcode.json # Exercícios livres registrados
│ ├── leetcode75.json # LeetCode 75 com status de cada exercício
│ └── memory.db # Memória de longo prazo (SQLite)
├── chroma_db/ # Índice vetorial dos artigos (ChromaDB)
├── credentials/ # Credenciais OAuth2 (não versionado)
└── tools/
├── articles_tool.py # Gestão do acervo de artigos
├── calendar_tool.py # Integração com Google Calendar
├── leetcode_tool.py # Tracker do LeetCode e LeetCode 75
└── rag_tool.py # Busca semântica via ChromaDB
| Camada | Tecnologia |
|---|---|
| Orquestração do agente | LangGraph + LangChain |
| LLM | GPT-4o (OpenAI) |
| Embedding | BAAI/bge-large-en-v1.5 (HuggingFace) |
| Vector Store | ChromaDB |
| Memória | AsyncSqliteSaver (LangGraph) |
| Calendário | Google Calendar API (OAuth2) |
| MCP | mcp-google-calendar |
| Extração de PDF | PyMuPDF (fitz) |
- Python 3.10+
- Node.js 18+ (para o MCP Server do Google Calendar)
- Ollama (opcional, para rodar modelos locais)
- Conta Google com Calendar API habilitada
git clone https://github.com/Alebeiruth/my-coach-agent.git
cd my-coach-agentpython -m venv agent_env
# Linux/Mac
source agent_env/bin/activate
# Windows
agent_env\Scripts\activatepip install -r requirements.txtCrie um arquivo .env na raiz do projeto:
OPENAI_API_KEY=sk-...- Acesse console.cloud.google.com
- Crie um projeto e ative a Google Calendar API
- Crie credenciais OAuth2 do tipo Desktop App
- Baixe o JSON e salve em
credentials/credentials.json - Gere o token de acesso:
python -c "
from google_auth_oauthlib.flow import InstalledAppFlow
SCOPES = ['https://www.googleapis.com/auth/calendar']
flow = InstalledAppFlow.from_client_secrets_file('credentials/credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
with open('credentials/token_python.json', 'w') as f:
f.write(creds.to_json())
"Coloque os PDFs em data/articles/ e rode o pipeline de indexação:
python ingest.pyCrie ou atualize storage/articles.json com os metadados dos seus artigos:
{
"articles": [
{
"id": 1,
"titulo": "Nome do Artigo",
"arquivo": "nome_do_arquivo.pdf",
"status": "pendente",
"data_inicio": null,
"data_conclusao": null,
"observacoes": ""
}
]
}python agent.py# Artigos
Alexandre: quais artigos tenho no acervo?
Alexandre: agenda sessão de estudo do artigo Digital Twin para amanhã às 9h
Alexandre: me explica o abstract do Smart Cities
Alexandre: marquei o Digital Twin como lendo
# LeetCode 75
Alexandre: qual o próximo exercício do LeetCode 75?
Alexandre: acabei de fazer o Merge Strings Alternately
Alexandre: me mostre os exercícios easy disponíveis
Alexandre: agenda sessão de prática para amanhã às 10h
# Progresso
Alexandre: mostre meu progresso no LeetCode 75
Alexandre: quais artigos já li?
RAG (Retrieval-Augmented Generation): Conteúdo dos artigos indexado no ChromaDB com embeddings bge-large-en-v1.5. Busca por similaridade semântica com cosine similarity.
Arquitetura híbrida de recuperação: Metadados estruturados em JSON (artigos, LeetCode 75) separados do índice vetorial (ChromaDB). Cada camada tem responsabilidade clara.
ReAct Agent: O agente raciocina sobre qual tool invocar a cada turno usando o padrão Reason + Act do LangGraph.
Memória de longo prazo: Histórico de conversas persistido em SQLite via AsyncSqliteSaver — o agente lembra de interações anteriores entre sessões.
MCP (Model Context Protocol): Integração com Google Calendar via MCP Server rodando como processo Node.js em stdio transport.
MIT