Pesquisa de Simulação de Entrevista (Research Mock Interview) Hermes Skill
1. O que é isso
Um sistema de simulação de entrevista de pesquisa local-first, entregue como um Hermes Skill. Ele lê o material de pesquisa real do candidato (currículo / projeto / artigo) e, para cenários como preparação para mestrado (baoyan), candidatura a doutorado, busca de emprego em pesquisa, defesa, reunião de grupo ou PhD no exterior, usa um backend LLM plugável para atuar como um examinador rigoroso, conduzindo uma simulação de entrevista em várias rodadas. Quando a resposta do candidato sobre o projeto/código é superficial, ele aciona perguntas de bloqueio duro, e no final produz uma pontuação + uma base de pontos fracos + um relatório de revisão.
1.1 Consistência com o plano de arquitetura (decisão bloqueada)
- X1 Público-alvo: Todas as direções (preparação para mestrado/doutorado + versão leve para emprego), a base de perguntas v1 cobre seis cenários: preparação para mestrado/doutorado, emprego, defesa, reunião de grupo, PhD no exterior.
- X2 Forma: Hermes Skill local + atração de tráfego via conteúdo público; este repositório é a skill em si.
- X3 Voz: A v1.1 implementou "voz duplex plugável" — o
mockoffline sem dependências roda todo o pipeline; STT real (vosk/whisper) + TTS real (pyttsx3/edge-tts) são backends opcionais, todos carregados sob demanda (lazy loading); dependências ausentes geram erros explícitos em tempo de execução (não quebram o core sem dependências). - X4 Coleta via WeChat Official Accounts: Abandonada; esta Skill não coleta nenhuma fonte de conteúdo externa.
- X5 Versão Python: Alvo 3.12, mínimo 3.11 (veja
requirements.txte §6). - Backend LLM plugável: Interface abstrata +
mock(offline, zero dependências) /ollama(local, padrão) /cloud(BYOK, chave não armazenada em disco). - Material de inicialização a frio: Dados de exemplo desidentificados vêm primeiro (
data/sample_profile.json), com entrada para importação de perfis reais (cli run --profile). - Regra de ouro de privacidade: Local, single-tenant, deletável, sem telemetria, sem saída do domínio;
tenant_id=local;purgelimpa todos os dados do owner com um clique.
2. Quando acionar
- O usuário quer praticar / revisar entrevistas de pesquisa (preparação para mestrado/doutorado, emprego em pesquisa, defesa, reunião de grupo, PhD no exterior).
- O usuário deseja fazer um teste de estresse "explique claramente, explique em detalhes" baseado em sua própria experiência de projeto.
- O usuário precisa de um relatório de revisão estruturado e uma lista de pontos fracos consolidada.
3. Fluxo de trabalho (ordem de execução do proprietário/usuário)
Passo 1: Preparação do ambiente (único)
cd research-mock-interview
python --version # Precisa ser >=3.11, recomendado 3.12
pip install -r requirements.txt # Opcional: Só precisa do PyYAML se for usar config.yaml
Passo 2: Rodar a demonstração (funciona mesmo sem internet)
python src/cli.py run --demo
--demo usa o perfil de exemplo embutido + backend mock, e executa automaticamente o ciclo completo de "pergunta → resposta → bloqueio duro → pontuação → relatório de revisão", provando que o sistema funciona offline e os dados são armazenados localmente em SQLite.
Passo 3: Importar materiais reais
Organize seu currículo/projeto real em um JSON (consulte os campos de data/sample_profile.json) e execute:
python src/cli.py run --profile /caminho/para/seu_perfil.json --scenario 保研
Entre no modo interativo e responda rodada por rodada; digite /finish para encerrar e gerar o relatório, ou /quit para sair no meio (o registro é mantido).
Passo 4: Trocar o backend LLM (opcional)
Copie config.example.yaml para config.yaml e altere llm.backend para:
mock: Offline, zero dependências (padrão, adequado para demonstração / sem internet).ollama: Backend de produção local padrão, preenchabase_url/model(ex.:qwen2.5:7b).cloud: API em nuvem (BYOK), a chave vem apenas de variáveis de ambiente (ex.:RMI_LLM_API_KEY), nunca hard-coded ou salva em disco.
Passo 5: Visualizar dados acumulados e direito de exclusão
python src/cli.py list # Lista todas as entrevistas deste tenant
python src/cli.py report --id <primeiros 8 caracteres do session_id ou completo> # Ver relatório de revisão
python src/cli.py weakness # Ver lista de pontos fracos
python src/cli.py purge --yes # Direito de exclusão do owner: limpa todos os dados locais deste tenant
Passo 6 (novo na v1.1): Modo de voz duplex (plugável)
# Autoteste offline: duplex mock, sem microfone/rede, provando que o pipeline de orquestração de voz está funcional
python src/cli.py run --demo --voice
# Conectar a voz real (precisa primeiro pip install das dependências opcionais correspondentes, veja requirements.txt)
# Copie config.example.yaml para config.yaml, defina voice.enabled=true ou adicione --voice ao executar,
# e altere o backend de voice.stt/tts para vosk/whisper/pyttsx3/edge, preenchendo o caminho do modelo.
Passo 7 (novo na v1.1): Análise agregada de pontos fracos entre cenários
python src/cli.py analyze # Agregação de todos os cenários
python src/cli.py analyze --scenario 保研 # Apenas um cenário específico
python src/cli.py analyze --out report.md # Exportar relatório em Markdown
Dimensões de agregação: distribuição por categoria, distribuição por gravidade, tendência entre cenários (melhora/piora/estável), pontos fracos recorrentes (≥2 vezes) e recomendações de ação.
4. Responsabilidades dos módulos (src/)
llm_backend.py: AbstraçãoLLMBackend+MockBackend/OllamaBackend/CloudBackend, fábricafrom_config(cfg)para alternar conforme configuração.storage.py:Storeencapsula persistência local SQLite, isolamento de escopo do tenant,purge_owner()implementa o ciclo de direito de exclusão.interview_engine.py:InterviewSessionconduz o ciclo "importar → perguntar → bloqueio duro → pontuar → base de pontos fracos → relatório de revisão".voice_io.py(v1.1):STTProvider/TTSProvider/DuplexVoicepara voz plugável;mockoffline sem dependências, backends reais com lazy loading + guarda de dependências ausentes.analytics.py(v1.1):aggregate_weaknesses/render_aggregate_reportpara agregação de pontos fracos entre cenários (apenas bibliotecas padrão).cli.py: Ponto de entrada argparse (run/list/report/weakness/purge/analyze,runsuporta--voice).
5. Disciplinas de design (não podem ser violadas)
- Não sair do domínio: Todos os dados ficam apenas no SQLite local; o backend cloud envia apenas o texto da entrevista para a API configurada pelo usuário, e a chave vem apenas de variáveis de ambiente.
- Sem telemetria: Não coleta, não reporta nenhum comportamento de uso.
- Deletável:
data_dirpode ser excluído completamente;purgefornece limpeza programática com um clique. - Backend plugável: O código de negócio depende apenas da abstração
LLMBackend; adicionar um novo backend requer apenas implementargenerate(). - Amigável para inicialização a frio: Dados de exemplo garantem funcionamento imediato; materiais reais são importados via
--profile, com formato compatível com versões anteriores.
6. Ambiente de execução
- Alvo Python 3.12; mínimo 3.11 (veja comentários em
requirements.txt). - Dependências principais apenas da biblioteca padrão;
PyYAMLé opcional (necessário apenas ao usarconfig.yaml). - Voz é aprimoramento opcional: O core ainda tem zero dependências de terceiros obrigatórias; dependências de STT/TTS reais só são necessárias ao ativar a voz e escolher um mecanismo real (veja comentários em
requirements.txt).