Um único assistente que pensa em voz alta, chama tools, gera imagens validadas — e ainda delega missões a uma "Mesa de Reunião" de agentes coordenada por um CEO.
Hermes é um app agentico em Streamlit construído sobre dois primitivos de orquestração com LLM:
- Loop ReAct com function-calling nativo — o agente selecionado raciocina, chamada tools (busca web, gera valida imagem, ler/escrever arquivos, melhorar prompt, criar agentes...) e devolve cada passo (pensamento, tool_call, tool_result, resposta final) num stream transparente exibido ao vivo.
- Mesa de Reunião (multi-agente ao vivo) — o CEO recebe a missão, planeja, delega sub-tarefas aos agentes laterais, observa balões 🟢🟡🔴 de status, intervém quando um agente fica vermelho (reescreve a tarefa e re-tenta) e ao final consolida um relatório honesto do executivo.
Stack de providers ( divisão de responsabilidade ):
- z.ai ( GLM-5.2 / GLM-5-turbo / GLM-4.6V-flash ) → todo texto, function-calling e vision-judge de imagens.
- OpenAI (
gpt-image-1) → somente geração de imagens ( rota principalglm-imagena z.ai, fallback OpenAI para acentos perfeitos em PT-BR ).
- 7 personas prontas + agentes customizados criados em tempo de execução e persistidos em JSON.
- Vision-judge com gate duro: imagem só "passa" se score ≥ 8 E value_demonstrated E clutter ≤ 6 E texto_com_acento. (
tools/image_tool.py:66-99) - Configuração em 2 camadas:
.envimutável ( modelos padrão ) +ActiveConfigmutável persistida emconfig_local.json( hot-swap de modelo por tier via UI ou tooldefinir_modelo). - Base de conhecimento curada em
knowledge/injetada no system-prompt do Editor ( núcleo ) + lookup just-in-time via tooller_conhecimentocom whitelist. - Sandbox de arquivos — todas as tools de arquivo operam só dentro de
gerados/( path-escape bloqueado e testado ). - Testes automatizados ( agente, tools, providers, ciclo de meta-agentes ) + live integration test que auto-skippa sem
ZAI_API_KEY.
sequenceDiagram
actor U as Usuário
participant CEO as CEO (GLM-5.2)
participant A as Agentes laterais
U->>CEO: Missão
CEO-->>CEO: Decomposição em ≤4 sub-tarefas (JSON)
loop delegação
CEO->>A: sub-tarefa (assento OCUPADO 🟡)
A->>A: loop ReAct (cap=4)
alt sucesso
A-->>CEO: resumo (assento LIVRE 🟢)
else falha
A-->>CEO: erro (assento ERRO 🔴)
CEO->>A: _ceo_fix reescreve a tarefa
A->>A: retry (1×)
end
end
CEO-->>U: _consolidar (síntese honesta, ✅/❌ por agente)
- 🟢 LIVRE · 🟡 OCUPADO (mostra o que faz) · 🔴 ERRO (falhou/esperando)
- Cada assento é editável em tempo de execução (clique no ✏️ sob o balão).
- Tudo atualiza ao vivo (um evento por
rerundo Streamlit) + log da reunião.
| Agente | persona key | O que faz |
|---|---|---|
| Hermes (Geral) | hermes |
Assistente agentico principal — pesquisa, escreve, gera imagens, melhora prompts, cria agentes e troca modelos ao vivo |
| Editor de Posts LinkedIn | editor_linkedin |
Pipeline completo: ideias → post denso + humano "pronto pra publicar" + capa validada |
| Gerador de Imagens | imagens |
Gera 2-3 variantes e itera com o juiz GLM-4.6V até score ≥ 8 |
| Crítico de Prompts | critico_prompt |
Analisa prompt, mostra score e versão melhorada |
| Pesquisador | pesquisador |
Busca fontes confiáveis (Fowler, Netflix, Uber, Stripe, GitHub, arXiv) |
| Revisor / Corretor | revisor |
Revisa clareza, concisão, voz editorial |
| Crítico de Entregas (Auto-juiz) | critico_entrega |
Pontua entrega contra o pedido (0-10) e reescreve até merecer 8+ — o "eval-driven dev" em agente |
git clone https://github.com/PedroMMGomes/hermes-multiagent.git
cd hermes-multiagent
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
source .venv/bin/activate
pip install -r requirements.txt
copy .env.example .env # edite .env com SUAS chaves
streamlit run app.pyAbre em http://localhost:8501.
Atalho Windows: dê dois cliques em
run.bat( cria venv, instala deps, semeia.enva partir do.env.examplee roda o Streamlit ).
| Var | Provedor | Uso |
|---|---|---|
ZAI_API_KEY |
z.ai | Obrigatória. Texto, function-calling e vision-judge |
OPENAI_API_KEY |
OpenAI | Opcional. Só fallback de geração de imagem ( gpt-image-1 ) |
ZAI_CHAT_MODEL, ZAI_CEO_MODEL, ZAI_VISION_MODEL, ZAI_ATENDENTE_MODEL, OPENAI_IMAGE_MODEL |
— | Modelos padrão por tier ( trocáveis ao vivo na aba Config ) |
MAX_ITERATIONS |
— | Teto de segurança do loop agentic ( default 8 ) |
pytest -qA suite unitária cobre: loop ReAct com mocks, registro de tools, sandbox de arquivos, providers ( com e sem chave ), ActiveConfig + ciclo de meta-agentes. O live integration test se auto-skippa sem ZAI_API_KEY.
hermes/
app.py # entrada Streamlit (chat · mesa · postagens · agentes · config)
ui.py # CSS de marca + primitivas de UI
mesa_ui.py # render ao vivo dos balões da Mesa de Reunião
postagens_ui.py # aba do editor de LinkedIn
agentes_ui.py # CRUD de personas
core/
config.py # Settings imutável (lê .env)
active_config.py # ActiveConfig mutável + persistência (config_local.json)
providers.py # ZaiProvider (texto+tools+visão) + OpenAIImageProvider
agent.py # loop ReAct com function-calling (gera Steps transparentes)
mesa.py # orquestração multi-agente (CEO planeja/delega/intervém/consolida)
image_provider.py # router de imagem z.ai vs OpenAI com retry/backoff
agents/personas.py # 7 personas + Agent dataclass + AGENTS registry
tools/ # buscar_web, ler_url, gerar_imagem, validar_imagem,
# ler/escrever/listar arquivos, melhorar_prompt,
# ler_conhecimento, definir_modelo, meta_agentes (CRUD)
knowledge/ # núcleo editorial + 7 posts-exemplo (whitelist)
gerados/ # sandbox de saídas (imagens, posts, rascunhos)
tests/ # pytest (loop, tools, providers, meta-agentes, live)
.env.example # template de chaves — éste é o arquivo que se commita
requirements.txt
run.bat # launcher Windows
- Suporte a mais providers de imagem ( Stable Diffusion local )
- Memória vetorial longa ( RAG sobre o
knowledge/) - Exportação do master carousel em PDF
- Streaming incremental do vision-judge
.envnunca é commitado ( está no.gitignore). Use.env.examplecomo template e preencha com suas chaves.- A OpenAI key trafega somente para
https://api.openai.com/v1/images/generations. Todo o resto ( chat, tools, visão ) vai pela z.ai. - O sandbox de arquivos bloqueia qualquer path fora de
gerados/. - Para compartilhar o projeto — zip só o código; nunca inclua
.env. Quem receber devecopy .env.example .enve preencher as próprias chaves.
MIT — use, modifique e distribua livremente. Veja LICENSE.
- z.ai / BigModel (Zhipu) — GLM-5.2, GLM-5-turbo, GLM-4.6V-flash, glm-image
- OpenAI — gpt-image-1
- Streamlit — UI