Framework para desenvolvimento orientado a testes com agentes de IA
Project description
Prompt TDD
Um sistema para desenvolvimento orientado a testes usando prompts de IA.
🚀 Funcionalidades
- Geração de features com critérios de aceite e cenários de teste
- Análise de complexidade e estimativas
- Suporte a múltiplos modelos de IA (GPT-3.5, GPT-4)
- Interface CLI com modo interativo e MCP (Multi-Command Protocol)
- Saída em formatos JSON e Markdown
- Configuração unificada e centralizada
📋 Pré-requisitos
- Python 3.13+
- Chave de API OpenAI (
OPENAI_API_KEY) - Ambiente virtual Python (venv)
🛠️ Instalação
- Clone o repositório:
git clone https://github.com/seu-usuario/prompt-tdd.git
cd prompt-tdd
- Configure as variáveis de ambiente necessárias:
# Não use arquivos .env, configure diretamente no ambiente
export OPENAI_API_KEY="sua-chave-aqui"
- Instale as dependências:
make install
⚙️ Configuração
O projeto usa um arquivo de configuração unificado em src/configs/cli.yaml com três seções principais:
1. CLI (cli)
- Configurações de saída (formatos, indentação)
- Configurações do modelo (nome, temperatura)
- Mensagens do sistema
- Formatação JSON
2. MCP (mcp)
- Configurações de logging do MCP
- Configurações do LLM
- Configurações do handler MCP
- Formatos de metadados
3. Aplicação (app)
- Configurações do modelo
- Configurações do banco de dados
- Configurações de logging
- Configurações de exemplo
- Configurações de resultado
🎮 Comandos Disponíveis
make install
Instala todas as dependências do projeto.
make install
make test
Executa todos os testes do projeto.
make test
make cli
Inicia o CLI para processamento de features.
make cli
# Exemplos de uso:
prompt-tdd feature "Criar sistema de login com autenticação de dois fatores"
prompt-tdd feature "Criar sistema de cadastro de usuários" --model gpt-4-turbo
prompt-tdd feature "Criar API REST" --format markdown
prompt-tdd status
Opções do comando feature:
--model, -m: Modelo a ser usado (default: gpt-3.5-turbo)--elevation-model, -e: Modelo para fallback (default: gpt-4-turbo)--force, -f: Força uso do modelo sem fallback--api-key, -k: Chave da API (opcional)--timeout, -t: Tempo limite em segundos (default: 30)--max-retries, -r: Máximo de tentativas (default: 3)--temperature, -temp: Temperatura do modelo (default: 0.7)--max-tokens, -mt: Limite de tokens (opcional)--format, -fmt: Formato de saída (json/markdown)
Protocolo MCP (Model Context Protocol)
O projeto agora suporta o Model Context Protocol oficial, permitindo:
- Integração padronizada com diferentes modelos de IA
- Comunicação bidirecional via protocolo MCP
- Suporte a streaming e eventos assíncronos
Como Funciona
- Inicie o modo MCP:
prompt-tdd mcp
- Envie mensagens no formato MCP:
{
"content": "Criar sistema de login",
"metadata": {
"type": "feature",
"options": {
"model": "gpt-4-turbo",
"temperature": 0.7,
"format": "json"
}
}
}
- Receba respostas no formato MCP:
{
"content": {
"feature": "Sistema de Login",
"acceptance_criteria": [...],
"test_scenarios": [...],
"complexity": 3
},
"metadata": {
"status": "success",
"type": "feature"
}
}
🤖 Integração de Modelos
O projeto usa o Model Context Protocol para integração com diferentes modelos:
1. Via SDK MCP
from mcp_sdk import MCPHandler
from src.app import AgentOrchestrator
handler = MCPHandler()
handler.initialize(api_key="sua-chave")
handler.run()
2. Via CLI
# OpenAI GPT-4
prompt-tdd feature "Criar API" --model gpt-4-turbo --api-key $OPENAI_API_KEY
# Anthropic Claude
prompt-tdd feature "Criar API" --model claude-3 --api-key $ANTHROPIC_KEY
3. Via MCP
Especifique o modelo nas options:
{
"content": "Criar API REST",
"metadata": {
"type": "feature",
"options": {
"model": "gpt-4-turbo",
"api_key": "sua-chave",
"temperature": 0.7
}
}
}
Modelos Suportados
Atualmente:
- OpenAI GPT-3.5 Turbo
- OpenAI GPT-4 Turbo
- Anthropic Claude (via MCP)
- TinyLLaMA 1.1B (local, via llama.cpp)
- Outros modelos compatíveis com MCP
Configuração do TinyLLaMA
Para usar o TinyLLaMA:
- O modelo será baixado automaticamente durante a instalação (
make install). Alternativamente, você pode baixá-lo manualmente:
make download-model
- Use o modelo via CLI:
prompt-tdd feature "Criar API" --model tinyllama-1.1b
- Ou via MCP:
{
"content": "Criar API REST",
"metadata": {
"type": "feature",
"options": {
"model": "tinyllama-1.1b",
"temperature": 0.7
}
}
}
🧪 Testes
O projeto usa pytest para testes. Execute:
make test
📝 Logs
Os logs são gerados automaticamente com:
- Nível INFO para entrada/saída de funções
- Nível DEBUG para estados intermediários
- Nível ERROR para exceções (com stacktrace)
- Configuração centralizada em
cli.yaml
🔒 Variáveis de Ambiente
Variáveis obrigatórias:
OPENAI_API_KEY: Chave da API OpenAI
Variáveis opcionais:
OPENROUTER_KEY: Chave da API OpenRouterGEMINI_KEY: Chave da API GeminiANTHROPIC_KEY: Chave da API AnthropicLOG_LEVEL: Nível de log (default: INFO)CACHE_DIR: Diretório de cacheCACHE_TTL: Tempo de vida do cacheFALLBACK_ENABLED: Habilita fallback de modelosDEFAULT_MODEL: Modelo padrãoELEVATION_MODEL: Modelo para fallbackMODEL_TIMEOUT: Timeout para chamadas de modeloMAX_RETRIES: Máximo de tentativas
IMPORTANTE: Não use arquivos .env. Configure as variáveis diretamente no ambiente ou via argumentos.
🤝 Contribuindo
- Fork o projeto
- Crie sua branch de feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Uso
O Prompt TDD pode ser usado de duas formas:
1. Usando o Makefile (recomendado)
# Criar uma nova feature
make run prompt-tdd="Criar um sistema de login com autenticação JWT"
# Verificar status do ambiente
make run prompt-tdd="" mode=status
# Iniciar servidor MCP em background (sem saída no terminal)
make run prompt-tdd="" mode=mcp
# O servidor MCP será iniciado em background e você verá apenas o PID do processo
2. Usando o comando diretamente
Primeiro, ative o ambiente virtual:
source .venv/bin/activate
Então use o comando prompt-tdd:
# Criar uma nova feature
prompt-tdd "Criar um sistema de login com autenticação JWT"
# Verificar status do ambiente
prompt-tdd --mode status ""
# Iniciar servidor MCP (irá bloquear o terminal e mostrar logs)
prompt-tdd --mode mcp ""
# Ou inicie em background sem logs
nohup prompt-tdd --mode mcp "" > /dev/null 2>&1 &
Opções
--format: Formato de saída (json ou markdown). Padrão: json--mode: Modo de operação (feature, status ou mcp). Padrão: feature
Testes
make test
Limpeza
make clean
Agent Flow TDD
Framework para desenvolvimento orientado a testes com agentes de IA.
Recursos
- Desenvolvimento orientado a testes para agentes de IA
- Integração com OpenAI Agent SDK
- Logging estruturado em SQLite
- Suporte a múltiplos provedores de LLM
- Sistema de tracing e monitoramento
- Interface MCP (Model Context Protocol)
Instalação
# Instalação básica
pip install agent-flow-tdd
# Instalação com dependências de desenvolvimento
pip install agent-flow-tdd[dev]
Uso Básico
from src.app import AgentOrchestrator
# Inicializa o orquestrador
orchestrator = AgentOrchestrator(api_key="sua-chave-api")
# Processa uma entrada
result = orchestrator.handle_input("Criar sistema de login")
print(result)
Logging Estruturado
O framework inclui um sistema de logging estruturado que armazena todas as interações em SQLite:
Dados Armazenados
-
Execuções de Agentes
- Session ID
- Input/Output
- Último agente executado
- Tipo de saída
- Timestamp
-
Itens Gerados
- MessageOutput
- HandoffCall/HandoffOutput
- ToolCall/ToolCallOutput
- ReasoningItem
-
Guardrails
- Resultados de input/output
- Mensagens de validação
-
Respostas Brutas
- Respostas do LLM
- Metadados de execução
Consulta de Logs
from src.core.db import DatabaseManager
# Inicializa o gerenciador
db = DatabaseManager()
# Busca histórico de execuções
history = db.get_run_history(limit=10)
# Exemplo de processamento
for run in history:
print(f"Execução {run['id']}:")
print(f"- Input: {run['input']}")
print(f"- Agente: {run['last_agent']}")
print(f"- Items gerados: {len(run['items'])}")
print(f"- Guardrails: {len(run['guardrails'])}")
print(f"- Respostas: {len(run['raw_responses'])}")
Schema SQL
-- Tabela principal de execuções
CREATE TABLE agent_runs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
session_id TEXT NOT NULL,
input TEXT NOT NULL,
last_agent TEXT,
output_type TEXT,
final_output TEXT
);
-- Tabela de itens gerados
CREATE TABLE run_items (
id INTEGER PRIMARY KEY AUTOINCREMENT,
run_id INTEGER NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
item_type TEXT NOT NULL,
raw_item TEXT NOT NULL,
source_agent TEXT,
target_agent TEXT,
FOREIGN KEY(run_id) REFERENCES agent_runs(id)
);
-- Tabela de resultados de guardrails
CREATE TABLE guardrail_results (
id INTEGER PRIMARY KEY AUTOINCREMENT,
run_id INTEGER NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
guardrail_type TEXT CHECK(guardrail_type IN ('input', 'output')),
results TEXT NOT NULL,
FOREIGN KEY(run_id) REFERENCES agent_runs(id)
);
-- Tabela de respostas brutas do LLM
CREATE TABLE raw_responses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
run_id INTEGER NOT NULL,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
response TEXT NOT NULL,
FOREIGN KEY(run_id) REFERENCES agent_runs(id)
);
Desenvolvimento
Configuração do Ambiente
# Clone o repositório
git clone https://github.com/seu-usuario/agent-flow-tdd.git
cd agent-flow-tdd
# Crie um ambiente virtual
python -m venv .venv
source .venv/bin/activate # Linux/Mac
.venv\Scripts\activate # Windows
# Instale em modo desenvolvimento
pip install -e ".[dev]"
Executando Testes
# Executa todos os testes
make test
# Executa testes com cobertura
pytest --cov=src tests/
# Executa testes específicos
pytest tests/test_db.py -v
Linting e Formatação
# Formata o código
make format
# Executa linters
make lint
# Limpa imports não utilizados
make autoflake
Contribuindo
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Crie um Pull Request
Licença
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para detalhes.
Visualização de Logs
O framework inclui um visualizador de logs que permite consultar o histórico de execuções dos agentes. Para usar:
# Lista as últimas 10 execuções
make logs
# Lista as últimas N execuções
make logs ARGS="--limit 20"
# Filtra por session ID
make logs ARGS="--session abc123"
# Filtra por agente
make logs ARGS="--agent CodeReviewer"
# Mostra detalhes de uma execução específica
make logs ARGS="--id 42"
O visualizador mostra:
- Lista resumida de execuções com timestamp, session, agente e contadores
- Detalhes completos de uma execução específica incluindo:
- Input/output
- Itens gerados entre agentes
- Resultados de guardrails
- Respostas brutas do LLM
Comandos Disponíveis
Para ver todos os comandos disponíveis:
make help
Ambiente
make install- Instala dependências do projetomake clean- Remove arquivos temporáriosmake dev- Executa em modo desenvolvimento
Qualidade
make test- Executa testesmake coverage- Gera relatório de coberturamake lint- Executa lintersmake format- Formata código
Banco de Dados
make db-init- Inicializa banco de dadosmake db-clean- Remove banco de dadosmake db-backup- Faz backup do bancomake logs- Visualiza logs do banco
Exemplos
# Executa o agente com um prompt
make dev prompt-tdd="Cadastro de pessoas" mode=mcp format=markdown
# Visualiza os últimos 20 logs de uma sessão
make logs ARGS="--limit 20 --session abc123"
# Visualiza detalhes de uma execução específica
make logs ARGS="--id 42"
🐳 Usando com Docker
Pré-requisitos
- Docker
- Docker Compose
Configuração
- Copie o arquivo de exemplo de variáveis de ambiente:
cp .docker/.env.example .docker/.env
- Configure suas chaves de API no arquivo
.docker/.env
Executando
Para desenvolvimento:
docker-compose -f .docker/docker-compose.yml run dev
Para produção:
docker-compose -f .docker/docker-compose.yml run app
Comandos Úteis
- Construir as imagens:
docker-compose -f .docker/docker-compose.yml build
- Visualizar logs:
docker-compose -f .docker/docker-compose.yml logs -f
- Limpar volumes:
docker-compose -f .docker/docker-compose.yml down -v
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_flow_tdd-0.1.3.tar.gz.
File metadata
- Download URL: agent_flow_tdd-0.1.3.tar.gz
- Upload date:
- Size: 37.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b81d8aa2ac84e8f97f7c94927e6e3d8074625e6e5c52621dc2ca0f291f97fd0d
|
|
| MD5 |
c78adc4f9bed7243ded1a02827198588
|
|
| BLAKE2b-256 |
994e57319659fe359c8b308318c8cdb1716ec009edbcde3d6dcb5917defd6a33
|
File details
Details for the file agent_flow_tdd-0.1.3-py3-none-any.whl.
File metadata
- Download URL: agent_flow_tdd-0.1.3-py3-none-any.whl
- Upload date:
- Size: 41.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd21eb2a98e73c38f6e8c2a330c21d34945d7dccc8dee2688abd1f163288a0e3
|
|
| MD5 |
7a8928846cae462cb8aefedad6f71c6c
|
|
| BLAKE2b-256 |
90b77a1c6a861bcde8ee43cb17948766e1807db9d2c412aef53295b680dc7dc5
|