Simulador de Usuários
Simule vários anotadores simultâneos no Potato para testes de integração — configure estratégias de anotação, velocidade e níveis de concordância para testes de carga realistas.
O Simulador de Usuários permite o teste automatizado de tarefas de anotação do Potato simulando vários usuários com comportamentos e níveis de competência configuráveis.
Visão Geral
O simulador é útil para:
- Teste de controle de qualidade: Testa verificações de atenção, padrões-ouro e comportamento de bloqueio
- Teste de painel: Gera dados de anotação realistas para o painel de administração
- Teste de escalabilidade: Faz testes de estresse no servidor com muitos usuários simultâneos
- Avaliação de assistência de IA: Compara a precisão de LLM com comportamentos semelhantes aos humanos
- Teste de aprendizado ativo: Simula fluxos de trabalho de anotação iterativos
Início Rápido
# Basic random simulation with 10 users
python -m potato.simulator --server http://localhost:8000 --users 10
# With configuration file
python -m potato.simulator --config simulator-config.yaml --server http://localhost:8000
# Fast scalability test (no waiting between annotations)
python -m potato.simulator --server http://localhost:8000 --users 50 --parallel 10 --fast-modeConfiguração
Arquivo de Configuração YAML
Crie um arquivo YAML com as configurações do simulador:
simulator:
# User configuration
users:
count: 20
competence_distribution:
good: 0.5 # 50% will be "good" annotators (80-90% accuracy)
average: 0.3 # 30% "average" (60-70% accuracy)
poor: 0.2 # 20% "poor" (40-50% accuracy)
# Annotation strategy
strategy: random # random, biased, llm, pattern
# Timing configuration
timing:
annotation_time:
min: 2.0
max: 45.0
mean: 12.0
std: 6.0
distribution: normal # uniform, normal, exponential
# Execution
execution:
parallel_users: 5
delay_between_users: 0.5
max_annotations_per_user: 50
server:
url: http://localhost:8000Níveis de Competência
| Nível | Precisão | Descrição |
|---|---|---|
perfect | 100% | Sempre corresponde ao padrão-ouro |
good | 80-90% | Anotador de alta qualidade |
average | 60-70% | Trabalhador colaborativo típico |
poor | 40-50% | Anotador de baixa qualidade |
random | ~1/N | Seleção aleatória entre os rótulos |
adversarial | 0% | Intencionalmente errado (para testar o CQ) |
Estratégias de Anotação
Estratégia Aleatória (padrão)
Seleciona rótulos uniformemente ao acaso:
strategy: randomEstratégia Enviesada
Seleção ponderada com base nas preferências de rótulo:
strategy: biased
biased_config:
label_weights:
positive: 0.6
negative: 0.3
neutral: 0.1Estratégia LLM
Usa um LLM para gerar anotações com base no conteúdo do texto:
strategy: llm
llm_config:
endpoint_type: openai
model: gpt-4o-mini
api_key: ${OPENAI_API_KEY}
temperature: 0.1
add_noise: true
noise_rate: 0.05Para LLMs locais com Ollama:
strategy: llm
llm_config:
endpoint_type: ollama
model: llama3.2
base_url: http://localhost:11434Opções da CLI
Usage: python -m potato.simulator [OPTIONS]
Required:
--server, -s URL Potato server URL
User Configuration:
--users, -u NUM Number of simulated users (default: 10)
--competence DIST Competence distribution
Strategy:
--strategy TYPE Strategy: random, biased, llm, pattern
--llm-endpoint TYPE LLM endpoint: openai, anthropic, ollama
--llm-model NAME LLM model name
Execution:
--parallel, -p NUM Max concurrent users (default: 5)
--max-annotations, -m Max annotations per user
--fast-mode Disable waiting between annotations
Output:
--output-dir, -o DIR Output directory (default: simulator_output)
Teste de Controle de Qualidade
Teste a detecção de verificação de atenção:
simulator:
users:
count: 10
competence_distribution:
adversarial: 1.0 # All users will fail
quality_control:
attention_check_fail_rate: 0.5
respond_fast_rate: 0.3Arquivos de Saída
Após a simulação, os resultados são exportados para o diretório de saída:
summary_{timestamp}.json- Estatísticas agregadasuser_results_{timestamp}.json- Resultados detalhados por usuárioannotations_{timestamp}.csv- Todas as anotações em formato plano
Exemplo de Resumo
{
"user_count": 20,
"total_annotations": 400,
"total_time_seconds": 125.3,
"attention_checks": {
"passed": 18,
"failed": 2,
"pass_rate": 0.9
}
}Uso Programático
from potato.simulator import SimulatorManager, SimulatorConfig
# Create configuration
config = SimulatorConfig(
user_count=10,
strategy="random",
competence_distribution={"good": 0.5, "average": 0.5}
)
# Create and run simulator
manager = SimulatorManager(config, "http://localhost:8000")
results = manager.run_parallel(max_annotations_per_user=20)
# Print summary and export
manager.print_summary()
manager.export_results()Integração com Testes
O simulador pode ser usado em fixtures do pytest:
import pytest
from potato.simulator import SimulatorManager, SimulatorConfig
@pytest.fixture
def simulated_annotations(flask_test_server):
config = SimulatorConfig(user_count=5, strategy="random")
manager = SimulatorManager(config, flask_test_server.base_url)
return manager.run_parallel(max_annotations_per_user=10)
def test_dashboard_shows_annotations(simulated_annotations, flask_test_server):
response = requests.get(f"{flask_test_server.base_url}/admin/api/overview")
assert response.json()["total_annotations"] > 0Solução de Problemas
Falhas de login
- Verifique se o servidor permite registro anônimo ou tem
require_password: false - Verifique os logs do servidor em busca de erros de autenticação
Nenhuma instância disponível
- Verifique se os arquivos de dados foram carregados corretamente
- Verifique as configurações de estratégia de atribuição
Estratégia LLM não funciona
- Verifique se a chave de API está definida
- Para Ollama, verifique se o servidor está em execução
- Verifique se o nome do modelo está correto
Leitura Adicional
- Controle de Qualidade - Teste verificações de atenção e padrões-ouro
- Painel de Administração - Visualize dados simulados
- Guia de Depuração - Solucione problemas
Para detalhes de implementação, consulte a documentação de origem.