synesis-coder: Codificação Qualitativa com IA
Como gerar anotações, ontologias e processar corpora inteiros com o CLI
1 synesis-coder: Codificação Qualitativa com IA
O synesis-coder automatiza a codificação qualitativa usando Claude como motor de inferência. A ferramenta lê o template do seu projeto (.synt) e gera blocos Synesis válidos — ITEM, SOURCE, ONTOLOGY — seguindo rigorosamente os campos, relações, valores permitidos e instruções metodológicas (GUIDELINES) do template.
Você deve usar este guia se:
- Quer codificar trechos de texto selecionados em um arquivo
.syn - Precisa processar um corpus de abstracts (
.bib) em lote - Quer codificar um documento longo (entrevista, relatório) com chunking automático
- Precisa gerar definições ontológicas (
.syno) a partir do corpus já anotado - Quer integrar a codificação ao fluxo de trabalho no VS Code (Synesis Explorer)
synesis-coder não contém nenhum nome de campo, relação ou valor fixo no código. Tudo é derivado dinamicamente de result.template.field_specs via synesis.load(). Se você mudar o template, a IA segue as novas regras — sem modificar a ferramenta.
2 Instalação
2.1 Requisitos
- Python 3.10+
- synesis >= 0.6.0
- Chave de API da Anthropic (
ANTHROPIC_API_KEY)
2.2 Instalar o pacote
pip install synesis-coderVerificar:
synesis-coder --version
# synesis-coder, version 0.7.72.3 Configurar a chave de API
Crie um arquivo .env na raiz do seu projeto com a chave:
ANTHROPIC_API_KEY=sk-ant-...
O .env é carregado automaticamente. Nunca inclua este arquivo no controle de versão.
O modelo padrão é claude-opus-4-6. Para usar um modelo mais rápido (e mais barato), defina SYNESIS_CODER_MODEL=claude-sonnet-4-6 no .env ou passe --model claude-sonnet-4-6 na linha de comando.
3 Os modos de operação
synesis-coder organiza seus comandos em três grupos, cobrindo o ciclo completo da pesquisa — da extração inicial à revisão e consolidação:
3.1 Ingestão e extração
| Modo | Entrada | Saída | Uso típico |
|---|---|---|---|
item |
Texto + bibref | Bloco ITEM | Codificar um trecho selecionado |
abstract |
Corpus .bib |
Blocos SOURCE + ITEM | Processar abstracts em lote |
document |
Documento .txt/.md |
Blocos SOURCE + ITEM | Codificar entrevista ou relatório longo |
3.2 Estruturação e LLM
| Modo | Entrada | Saída | Uso típico |
|---|---|---|---|
ontology |
Corpus anotado | Arquivo .syno |
Gerar definições ontológicas |
suggest |
Trecho de texto | Lista de códigos | Sugerir códigos relevantes para um excerto |
finetune |
Dataset Alpaca | JSONL enriquecido | Preparar dados para fine-tuning de modelos |
3.3 Pipeline ACT (revisão e consolidação)
| Fase | Modo | Entrada | Saída | LLM? |
|---|---|---|---|---|
| 2 | critique |
.syn |
.synr com blocos # REVISION |
Sim |
| 3 | normalize |
.synr |
.synr com códigos canonizados |
Sim |
| 4 | incorporate |
.synr |
.syn final validado |
Não |
| R | refine |
.syn |
.syn refinado |
Sim (opt-in) |
O pipeline ACT é descrito em detalhe em Seção 8.
4 Modo item: codificar um trecho de texto
O modo mais simples. Recebe um texto e uma referência bibliográfica, e retorna um bloco ITEM válido codificado de acordo com o template do projeto.
4.1 Uso básico
synesis-coder item \
--project social_acceptance.synp \
--bibref ashworth2019 \
--text "Community trust and environmental concern are the most important factors determining willingness to participate in renewable energy projects."A saída é um bloco ITEM compilável, pronto para inserir em um arquivo .syn:
ITEM @ashworth2019
text: Community trust and environmental concern are the most
important factors determining willingness to participate
in renewable energy projects.
note: Reveals dual-factor mechanism where trust and environmental
concern independently drive participation willingness
chain: Community_Trust -> INFLUENCES -> Participation
note: Environmental concern acts as value-based enabler of
engagement with renewable energy
chain: Environmental_Concern -> ENABLES -> Participation
END ITEM4.2 Redirecionar para arquivo
O formato plain (padrão) emite apenas o bloco Synesis, ideal para piping:
synesis-coder item \
--project social_acceptance.synp \
--bibref ashworth2019 \
--text "Local ownership models significantly reduce opposition." \
>> anotacoes/ashworth2019.syn4.3 Saída verbose
O formato verbose inclui cabeçalho com status de validação:
synesis-coder item \
--project social_acceptance.synp \
--bibref ashworth2019 \
--text "Local ownership models significantly reduce opposition." \
--format verbose# synesis-coder item
# bibref: @ashworth2019
# model: claude-opus-4-6
# validation: OK
# timestamp: 2026-03-23T14:32:11
ITEM @ashworth2019
text: Local ownership models significantly reduce opposition.
...
END ITEM
4.4 Opções completas
| Opção | Obrigatória | Descrição |
|---|---|---|
--project |
sim | Caminho para o arquivo .synp |
--bibref |
sim | Referência bibliográfica (sem @) |
--text |
sim | Texto a ser codificado |
--format |
não | plain (padrão) ou verbose |
--model |
não | ID do modelo LLM |
5 Modo abstract: processar corpus bibliográfico
Processa um arquivo .bib completo, gerando anotações SOURCE + ITEM para cada referência que contenha abstract.
5.1 Uso
synesis-coder abstract \
--project social_acceptance.synp \
--input corpus/references.bib \
--output-dir anotacoes/ \
--concurrent 5--output-dir, não --output
Esta flag sempre foi um diretório de saída, mas o nome anterior (--output) induzia ao erro de passar um nome de arquivo — o que criava uma pasta com esse nome e provocava um PermissionError confuso na execução seguinte. A flag foi renomeada para --output-dir; --output continua funcionando como alias retrocompatível.
Para cada referência no .bib que tenha abstract, o modo abstract:
- Cria um bloco
SOURCE @bibrefcom os metadados bibliográficos - Analisa o abstract e gera blocos
ITEM @bibrefcodificando os achados relevantes - Valida cada bloco via
synesis.load()antes de gravar
5.2 Processamento em lote e batches
O modo abstract processa referências concorrentemente (padrão: 5 chamadas simultâneas) e organiza o trabalho em batches para evitar acúmulo de contexto:
synesis-coder abstract \
--project social_acceptance.synp \
--input corpus/references.bib \
--output-dir anotacoes/ \
--concurrent 5 \
--batch-size 25Entre cada batch, o projeto é recarregado via synesis.load() para incorporar as anotações já geradas — o code_index e topic_index ficam progressivamente mais ricos ao longo do processamento.
5.3 Um arquivo por referência
Por padrão, todas as anotações vão para um único arquivo .syn. Use --per-reference para gerar um arquivo .syn por referência:
synesis-coder abstract \
--project social_acceptance.synp \
--input corpus/references.bib \
--output-dir anotacoes/ \
--per-referenceResultado: anotacoes/ashworth2019.syn, anotacoes/aly2019.syn, etc.
5.4 Opções completas
| Opção | Obrigatória | Descrição |
|---|---|---|
--project |
sim | Caminho para o arquivo .synp |
--input |
sim | Arquivo .bib com abstracts |
--output-dir |
sim | Diretório de saída (alias: --output) |
--concurrent |
não | Chamadas LLM simultâneas (padrão: 5) |
--batch-size |
não | Referências por batch (padrão: 25) |
--per-reference |
não | Um arquivo .syn por referência |
--format |
não | plain (padrão) ou verbose |
--model |
não | ID do modelo LLM |
--debug |
não | Log DEBUG com resposta bruta do LLM |
6 Modo document: codificar documentos longos
Processa um documento longo (entrevista transcrita, relatório, capítulo) com chunking automático — divide o texto em segmentos com overlap para garantir cobertura completa.
6.1 Uso
synesis-coder document \
--project nave.synp \
--bibref entrevista_01 \
--input transcricoes/entrevista_01.txt \
--output anotacoes/entrevista_01.syn6.2 Controle de chunking
O chunking divide o documento em segmentos de tamanho configurável. O overlap garante que passagens na fronteira entre chunks não sejam perdidas:
synesis-coder document \
--project nave.synp \
--bibref entrevista_01 \
--input transcricoes/entrevista_01.txt \
--output anotacoes/entrevista_01.syn \
--chunk-size 12000 \
--overlap 2400--chunk-size: tamanho máximo de cada segmento em caracteres (padrão: 12.000)--overlap: sobreposição entre segmentos consecutivos em caracteres (padrão: 2.400)
O tamanho do chunk ideal depende da complexidade do template. Templates com muitos campos CHAIN e GUIDELINES extensas exigem mais tokens de contexto — nesse caso, reduza o --chunk-size para 8.000–10.000 caracteres. Para templates simples, 12.000 funciona bem.
6.3 Opções completas
| Opção | Obrigatória | Descrição |
|---|---|---|
--project |
sim | Caminho para o arquivo .synp |
--bibref |
sim | Referência bibliográfica para o documento |
--input |
sim | Documento .txt ou .md |
--output |
sim | Arquivo .syn de saída |
--chunk-size |
não | Tamanho do chunk em caracteres (padrão: 12.000) |
--overlap |
não | Overlap entre chunks (padrão: 2.400) |
--concurrent |
não | Chunks simultâneos (padrão: 3) |
--format |
não | plain (padrão) ou verbose |
--model |
não | ID do modelo LLM |
7 Modo ontology: gerar definições ontológicas
O modo mais sofisticado. Analisa o corpus já anotado, coleta evidência empírica para cada código conceitual (frequência, fontes, relações, co-ocorrências, exemplos), e gera entradas ONTOLOGY fundamentadas nos dados observados — não em conhecimento genérico do LLM.
7.1 Uso básico
synesis-coder ontology \
--project social_acceptance.synp \
--output ontologia.syno7.2 O que é o semantic context?
Para cada código pendente, o synesis-coder monta um contexto semântico derivado do corpus:
- Frequência: quantas vezes o código aparece em blocos ITEM
- Fontes: quantos SOURCEs distintos mencionam o código
- Relações: triples do grafo de CHAIN envolvendo o código (até 15)
- Co-ocorrências: outros códigos que aparecem nos mesmos ITEMs (até 20)
- Exemplos: excertos concretos de campos QUOTATION/NOTE (até 3)
Esse contexto é injetado no prompt do LLM, produzindo definições ontológicas que refletem o uso real no corpus, não definições enciclopédicas genéricas.
7.3 Exemplo real: código Cost
O código Cost aparece em 96 itens de 66 fontes diferentes no projeto Social_Acceptance. O semantic context injetado no prompt inclui:
- Relações:
Cost -> CONSTRAINS -> Deployment,Cost -> INFLUENCES -> Acceptance,Policy -> ENABLES -> Cost_Reduction - Co-ocorrências:
Deployment,Acceptance,Policy,Technology - Exemplos: “High initial investment costs remain the primary barrier to solar deployment in developing countries”
A entrada ONTOLOGY gerada:
ONTOLOGY Cost
topic: Economics
aspect: 11
dimension: 2
confidence: HIGH
reasoning: Aspect 11: Core economic factor representing financial
expenditure. Mainly constrains deployment/technology
development while enabling market penetration when
reduced. Co-occurs with Deployment and Acceptance,
indicating market-consumer relevance. Dimension 2:
Directly affects investors, consumers, and market
competitiveness. High frequency (96) across broad
sources (66) confirms central role.
description: Economic factor representing financial expenditure
associated with energy technologies and systems.
Acts as primary barrier constraining technology
development, site selection, and deployment when
high, while enabling market penetration, technology
transition, and sustainable solutions when reduced.
rgt_element_a: Low_Cost
rgt_element_b: High_Cost
theoretical_significance: 0
END ONTOLOGYObserve como a classificação aspect: 11 (Economic), dimension: 2 (Market), confidence: HIGH — todas derivadas das evidências empíricas no corpus, não de associações genéricas.
7.4 Modo incremental (--update)
Quando a ontologia já contém definições e você quer gerar apenas os códigos novos (adicionados após novas rodadas de codificação):
synesis-coder ontology \
--project social_acceptance.synp \
--output ontologia.syno \
--updateCom --update, o synesis-coder:
- Carrega a ontologia existente via
synesis.load(load_ontology=True) - Compara os códigos usados no corpus contra os já definidos em
ontology_index - Gera entradas apenas para códigos pendentes
7.5 Backup automático
Quando você executa sem --update e o arquivo .syno de destino já existe, o synesis-coder cria automaticamente um backup antes de sobrescrever:
ontologia.syno → ontologia_bkp.syno (backup)
ontologia.syno ← novo conteúdo gerado
Isso protege ontologias curadas manualmente contra sobrescrita acidental.
7.6 Blocos rejeitados não contaminam o .syno
Se um bloco ONTOLOGY não passa na validação após todas as tentativas de correção, ele não é gravado no arquivo final. Blocos rejeitados vão para um arquivo separado:
ontologia.syno ← apenas blocos válidos
ontologia.syno.rejeitados ← blocos que falharam (sobrescrito a cada execução)
Antes, todos os resultados eram concatenados no .syno final — inclusive os que continham o comentário # ERRO: validação falhou seguido de texto malformado. Um único código mal-extraído corrompia o arquivo inteiro para qualquer compile ou load posterior. Agora o .syno gerado é sempre compilável, e o resumo da execução aponta o arquivo de rejeitados quando há falhas.
7.7 Geração estruturada (JSON Schema)
Quando o modelo suporta structured outputs, o synesis-coder não pede ao LLM que escreva o bloco inteiro. Em vez disso:
- Deriva um JSON Schema dos campos
ONTOLOGY FIELDSdo template - Pede ao LLM apenas os valores dos campos
- Monta o bloco
ONTOLOGY ... END ONTOLOGYdeterministicamente, em código
O LLM nunca digita as palavras ONTOLOGY, END ONTOLOGY ou os nomes de campo — o que elimina por construção uma classe inteira de alucinações de sintaxe. O schema usa additionalProperties: false, então qualquer chave inventada é descartada antes da montagem. Quando há tópicos já definidos no projeto, o campo TOPIC vira um enum restrito a eles.
O caminho estruturado está disponível nos backends anthropic (via output_config) e openai (via response_format). Se o SDK instalado não suportar, a ferramenta cai automaticamente no caminho de texto livre — o comportamento anterior, sem quebrar nada. A validação com synesis.load() roda igual nos dois caminhos.
7.8 Requisito de template
O template do projeto deve definir pelo menos um campo com SCOPE ONTOLOGY. Projetos sem escopo de ontologia (como thompson_bible) recebem um erro claro:
Erro: O template do projeto 'thompson_bible' não define campos ONTOLOGY.
7.9 Opções completas
| Opção | Obrigatória | Descrição |
|---|---|---|
--project |
sim | Caminho para o arquivo .synp |
--output |
sim | Arquivo .syno de saída |
--update |
não | Gera apenas códigos ainda sem definição |
--concurrent |
não | Chamadas LLM simultâneas (padrão: 5) |
--format |
não | plain (padrão) ou verbose |
--model |
não | ID do modelo LLM |
8 O pipeline ACT: revisão e consolidação
A extração inicial (item, abstract, document) produz anotações que precisam ser revisadas. O pipeline ACT organiza essa revisão em fases explícitas, cada uma com um artefato próprio — nada é sobrescrito silenciosamente.
O formato intermediário é o .synr (Synesis revision): um .syn acrescido de blocos # REVISION com sugestões de correção. É um tipo de arquivo reconhecido pelo compilador e pela extensão do VS Code.
.syn ──critique──▶ .synr ──normalize──▶ .synr ──incorporate──▶ .syn
(fase 2) (fase 3) (fase 4)
8.1 Fase 2 — critique: revisar as anotações
Um segundo modelo relê cada ITEM contra o texto-fonte e o template, atribuindo um escore de suspeita. ITEMs acima do limiar recebem um bloco # REVISION com a correção sugerida.
synesis-coder critique anotacoes/entrevista_01.syn \
--project nave.synp \
--threshold 0.20Saída: anotacoes/entrevista_01.synr.
| Opção | Descrição |
|---|---|
--project |
.synp do projeto (autodetectado a partir da pasta do .syn) |
--output |
Caminho do .synr (padrão: mesmo nome, extensão .synr) |
--threshold |
Escore mínimo para emitir # REVISION (padrão: 0.20) |
--concurrent |
Chamadas simultâneas (padrão: 3) |
--model |
Modelo crítico (SYNESIS_CODER_CRITIQUE_MODEL) |
--debug |
Log com resposta bruta por ITEM |
A crítica pode usar um modelo diferente do que gerou as anotações — configurável via SYNESIS_CODER_CRITIQUE_MODEL. Um segundo modelo, com contexto próprio, tende a encontrar problemas que o gerador original não veria por reproduzir os mesmos vieses.
8.2 Fase 3 — normalize: canonizar códigos
Corpora processados em lotes distintos acumulam variantes do mesmo conceito — Custo, custo, Custo_Alto. Esta fase analisa os códigos de todos os .synr juntos e propõe a forma canônica.
synesis-coder normalize anotacoes/*.synr \
--project social_acceptance.synp \
--confidence 0.65 \
--inventory inventario_codigos.txt| Opção | Descrição |
|---|---|
--output-dir |
Diretório dos .synr normalizados (padrão: o de entrada) |
--confidence |
Confiança mínima para aceitar a canonização (padrão: 0.65) |
--inventory |
Salva o inventário de códigos em um arquivo TXT |
--model |
Modelo de normalização (SYNESIS_CODER_NORMALIZATION_MODEL) |
8.3 Fase 4 — incorporate: aplicar as revisões
Aplica os blocos # REVISION e emite o .syn final, validado. Esta fase não usa LLM — é determinística e reproduzível.
synesis-coder incorporate anotacoes/entrevista_01.synr \
--output anotacoes/entrevista_01_final.syn| Opção | Descrição |
|---|---|
--output |
Caminho do .syn final (padrão: mesmo nome, extensão .syn) |
--overwrite |
Sobrescreve sem confirmação |
--backup |
Cria cópia .bak antes de sobrescrever |
8.4 Fase R — refine: reextrair os ITEMs problemáticos
Alternativa opcional às fases 3–4. Em vez de aplicar correções pontuais, reextrai do zero os ITEMs marcados como suspeitos, agora com o feedback da crítica no prompt. Itera até convergir.
synesis-coder refine anotacoes/entrevista_01.syn \
--project nave.synp \
--max-iter 2 \
--threshold 0.20| Opção | Descrição |
|---|---|
--max-iter |
Iterações máximas por ITEM (padrão: 2) |
--threshold |
Escore abaixo do qual o ITEM é considerado convergido (padrão: 0.20) |
--critique-model |
Modelo crítico |
--refine-model |
Modelo gerador da reextração |
--thinking-budget |
Tokens de extended thinking na reextração (0 = desligado) |
--overwrite / --backup |
Controle de sobrescrita |
Saída padrão: <nome>_refined.syn.
Se --output apontar para o próprio arquivo de entrada, o comando falha com mensagem explícita, a menos que você passe --overwrite --backup deliberadamente. Uma reextração que apagasse a anotação original seria irreversível.
8.5 Fluxo completo
# 1. Extrair
synesis-coder abstract --project estudo.synp \
--input corpus.bib --output-dir anotacoes/
# 2. Criticar
synesis-coder critique anotacoes/annotations.syn --project estudo.synp
# 3. Canonizar códigos
synesis-coder normalize anotacoes/*.synr --project estudo.synp
# 4. Consolidar
synesis-coder incorporate anotacoes/annotations.synr \
--output anotacoes/final.syn
# 5. Compilar
synesis compile estudo.synp --json resultado.json9 Outros modos
9.1 suggest: sugerir códigos para um trecho
Retorna os códigos do projeto mais relevantes para um excerto, sem gerar um bloco ITEM completo. Útil para explorar a ontologia durante a codificação manual.
synesis-coder suggest \
--project social_acceptance.synp \
--text "Local ownership models significantly reduce opposition."9.2 finetune: enriquecer dataset para fine-tuning
Gera ou enriquece um dataset Alpaca (JSONL) a partir do projeto compilado, para treinar um modelo próprio.
synesis-coder finetune \
--project social_acceptance.synp \
--output dataset_enriquecido.jsonl \
--enrich vary --enrich didactic| Tipo de enriquecimento | Efeito |
|---|---|
vary (padrão) |
Variações de formulação do mesmo exemplo |
didactic |
Versões com explicação do raciocínio |
counterfactual |
Contraexemplos para reforçar fronteiras conceituais |
A entrada pode ser um .synp (o dataset é gerado pelo compilador) ou um JSONL pré-existente via --input.
10 Integração com VS Code
O modo item está integrado à extensão Synesis Explorer (v0.5.25+), permitindo codificar texto diretamente no editor sem abrir o terminal.
10.1 Como usar
- Abra um arquivo
.synno VS Code com a extensão Synesis Explorer instalada - Selecione o trecho de texto que deseja codificar
- Clique com o botão direito → Synesis: Code Selection
- Ou use o atalho
Ctrl+Shift+I/Cmd+Shift+I
- Ou use o atalho
A extensão:
- Detecta o bibref automaticamente a partir do bloco SOURCE ou ITEM sob o cursor
- Chama
synesis-coder itemcomo subprocesso - Substitui a seleção pelo bloco ITEM gerado
10.2 Fluxo de trabalho típico
O cenário mais comum é o pesquisador que cola trechos de sua revisão de literatura diretamente no arquivo .syn:
SOURCE @ashworth2019
description: Comparative study of public attitudes toward CCS and
low-carbon energy technologies in Australia and China.
epistemic_model: Social acceptance of energy technologies
method: Online survey (Australia n=2383, China n=1266)
END SOURCE
However, male respondents, those who perceived themselves to
have higher knowledge of CCS, and those who valued economic
outcomes over environmental protection were more likely to
support CCS - as long as the risks were not perceived to
outweigh the benefits.O pesquisador seleciona o texto colado (a passagem abaixo do END SOURCE), executa Synesis: Code Selection, e o texto é substituído por:
SOURCE @ashworth2019
description: Comparative study of public attitudes toward CCS and
low-carbon energy technologies in Australia and China.
epistemic_model: Social acceptance of energy technologies
method: Online survey (Australia n=2383, China n=1266)
END SOURCE
ITEM @ashworth2019
text: However, male respondents, those who perceived themselves to
have higher knowledge of CCS, and those who valued economic
outcomes over environmental protection were more likely to
support CCS - as long as the risks were not perceived to
outweigh the benefits.
note: *complex* Four-factor convergence reveals multi-domain
determinants requiring integrated communication strategies
chain: Gender -> INFLUENCES -> CCS_Support
note: Self-assessed knowledge increases support, revealing
information deficit mechanism
chain: Knowledge -> INFLUENCES -> CCS_Support
note: Economic prioritization over environmental values predicts
support, indicating value-based acceptance mechanism
chain: Economic_Value -> INFLUENCES -> CCS_Support
note: Risk-benefit assessment constrains support, revealing
conditional acceptance mechanism
chain: Risk_Perception -> CONSTRAINS -> CCS_Support
END ITEMO bibref @ashworth2019 foi detectado automaticamente do bloco SOURCE acima. O pesquisador não precisou digitar nada — apenas selecionar e executar o comando.
10.3 Configuração do caminho do executável
Se o synesis-coder não está no PATH do sistema, configure o caminho na extensão:
VS Code Settings → synesisExplorer.coder.path:
{
"synesisExplorer.coder.path": "C:/Python312/Scripts/synesis-coder.exe"
}10.4 Cancelamento
A operação pode ser cancelada a qualquer momento clicando Cancel na notificação de progresso. O subprocesso é terminado imediatamente.
11 Como funciona internamente
O synesis-coder opera em um pipeline de cinco estágios. Entender esse pipeline ajuda a diagnosticar problemas e ajustar o fluxo de trabalho.
┌─────────────────────────────┐
│ synesis-coder item/ontology │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ 1. project_loader │
│ synesis.load() │
│ → ctx (template, fields,│
│ code_index, relations) │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ 2. prompt_builder │
│ system (cacheável): │
│ regras + template │
│ + indexes + GUIDELINES│
│ user (dinâmico): │
│ bibref + texto │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ 3. llm_client │
│ Claude API (Anthropic) │
│ rate limiting RPM/TPM │
│ prompt caching ativo │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ 4. validator │
│ synesis.load() valida │
│ ↻ até 3 tentativas │
│ temperatura crescente │
│ 0.0 → 0.2 → 0.5 │
└─────────────┬───────────────┘
│
┌─────────────▼───────────────┐
│ 5. stdout │
│ Bloco(s) Synesis válido │
└─────────────────────────────┘
11.1 1. project_loader
load_project() invoca synesis.load() — o compilador Synesis — para extrair do projeto:
- template fields separados por escopo (SOURCE, ITEM, ONTOLOGY)
- GUIDELINES por campo — instruções metodológicas do pesquisador
- code_index — conceitos existentes (de campos CODE e CHAIN)
- topic_index — tópicos existentes (de campos TOPIC)
- ontology_index — entradas ontológicas já definidas
- CHAIN relations — relações causais permitidas no projeto
- project description — descrição do projeto (bloco DESCRIPTION)
Tudo é extraído dinamicamente do compilador. Se o pesquisador muda o template, o synesis-coder se adapta automaticamente.
11.2 2. prompt_builder
Constrói prompts em duas camadas:
- System prompt (cacheável): regras absolutas do formato Synesis, descrição do projeto, instruções por campo (GUIDELINES > description > genérica por tipo), conceitos e tópicos existentes. Marcado com
cache_control: ephemeralna API Anthropic — o primeiro item de um batch paga o custo total, os demais reutilizam o cache. - User prompt (dinâmico): bibref + texto (modo
item) ou código + semantic_ctx (modoontology).
A hierarquia de instruções por campo é: GUIDELINES (instrução metodológica do autor do template) > description (descrição do campo) > instrução genérica baseada no tipo de campo.
11.3 3. llm_client
Duas implementações:
LLMClient— síncrono, usado no modoitemAsyncLLMClient— assíncrono, usado nos modosabstract,documenteontology(processamento concorrente)
Ambas compartilham rate limiting:
- RPM (requests per minute): semáforo com janela deslizante de 60s
- TPM (tokens per minute): contagem de tokens de entrada e saída
11.4 4. validator
Valida a saída do LLM compilando-a com synesis.load(). Se o output contém erros:
- Extrai apenas blocos Synesis relevantes (
_extract_item_blocks/_extract_ontology_blocks) — descarta markdown, SOURCE ou ONTOLOGY que o LLM eventualmente adicione - Remove fences de código (
```) - Envia o output + diagnósticos do compilador de volta ao LLM para correção
- Temperatura escalona:
0.0 → 0.2 → 0.5para evitar loops determinísticos - Após 3 tentativas, retorna o melhor resultado com cabeçalho de erro comentado
No modo item, o validador ignora o diagnóstico OrphanItem (ITEM sem SOURCE correspondente). Isso é esperado — o SOURCE existe no .syn do projeto, mas não é carregado na validação isolada para economizar tokens de contexto.
12 Projetos de teste reais
O synesis-coder é testado contra projetos reais com templates de complexidade variada:
| Projeto | Template | Características |
|---|---|---|
Social_Acceptance |
GUIDELINES, ORDERED, ENUMERATED, SCALE, CHAIN com 5 relações | Caso completo com ontologia multidimensional |
aids_corpus |
CHAIN com relações em português, sem GUIDELINES | Template sem instruções metodológicas |
nave |
Sem campo CHAIN | Template teológico minimalista |
thompson_bible |
Sem ONTOLOGY scope | Projeto que rejeita modo ontology |
12.0.1 Executar testes sem API
Testes de integração (que consomem tokens) são excluídos por padrão. Executar a suíte normalmente não gera custo de API:
cd synesis-coder
pytest12.0.2 Executar testes de integração
Requerem ANTHROPIC_API_KEY no ambiente:
pytest tests/ -v -m integration12.0.3 Cobertura
pytest tests/ --cov=synesis_coder --cov-report=term-missing13 Variáveis de ambiente
| Variável | Obrigatória | Padrão | Descrição |
|---|---|---|---|
ANTHROPIC_API_KEY |
sim | — | Chave da API Anthropic |
SYNESIS_CODER_BACKEND |
não | anthropic |
Backend LLM (anthropic ou openai) |
SYNESIS_CODER_MODEL |
não | claude-opus-4-6 |
Modelo LLM padrão |
SYNESIS_CODER_MAX_RETRIES |
não | 3 |
Tentativas de correção por item |
SYNESIS_CODER_TEMPERATURE |
não | 0.0 |
Temperatura de geração |
SYNESIS_CODER_RPM_LIMIT |
não | 50 |
Requests por minuto |
SYNESIS_CODER_TPM_LIMIT |
não | 100000 |
Tokens por minuto |
13.1 Modelo por fase
Cada fase do pipeline pode usar um modelo diferente. A variável específica tem precedência sobre SYNESIS_CODER_MODEL:
| Variável | Fase |
|---|---|
SYNESIS_CODER_CRITIQUE_MODEL |
critique e a crítica dentro de refine |
SYNESIS_CODER_REFINE_MODEL |
Reextração em refine |
SYNESIS_CODER_NORMALIZATION_MODEL |
normalize |
13.2 Limiares do pipeline ACT
| Variável | Padrão | Descrição |
|---|---|---|
SYNESIS_CODER_SUSPICION_THRESHOLD |
0.20 |
Escore mínimo para emitir # REVISION |
SYNESIS_CODER_MERGE_CONFIDENCE_THRESHOLD |
0.65 |
Confiança mínima para canonizar um código |
SYNESIS_CODER_REFINE_MAX_ITER |
2 |
Iterações máximas por ITEM em refine |
14 Erros comuns
14.1 synesis-coder não encontrado
'synesis-coder' is not recognized as an internal or external command
O executável não está no PATH. Soluções:
- Verifique a instalação:
pip show synesis-coder - Use o caminho completo:
python -m synesis_coder item ... - No VS Code: configure
synesisExplorer.coder.pathcom o caminho absoluto
14.2 Erro de configuração (API key)
Erro de configuração: ANTHROPIC_API_KEY não encontrada
Crie um arquivo .env no diretório de onde executa o comando, ou exporte a variável:
export ANTHROPIC_API_KEY=sk-ant-...14.3 Template sem ONTOLOGY scope
Erro: O template do projeto 'thompson_bible' não define campos ONTOLOGY.
O modo ontology requer pelo menos um campo com SCOPE ONTOLOGY no template. Os modos item, abstract e document funcionam normalmente sem ontologia.
14.4 Validação falha após 3 tentativas
O cabeçalho de erro é incluído como comentário no output:
# synesis-coder: validation failed after 3 attempts
# errors: Missing required field 'chain' in ITEM block
ITEM @smith2024
text: ...
note: ...
END ITEMRevise o bloco gerado e corrija manualmente os campos faltantes. Isso é raro em templates com GUIDELINES bem escritas.
15 Próximos passos
- Codificação Assistida por IA — caso real completo com o projeto Social_Acceptance
- Métricas da Pesquisa — análise quantitativa dos resultados
- Como Definir uma Ontologia — curadoria manual das entradas geradas
- Como Criar e Validar Chains — regras de modelagem causal
- Como Ligar Projetos Independentes — cruzar corpora anotados separadamente
- Tutorial Synesis Explorer — configurar o ambiente VS Code