Decompose

Texto decomposto em unidades semânticas classificadas — autoridade, risco, atenção, entidades. Sem LLM. Determinístico.

Documentação

Decompose

CI PyPI Python

Pare de dar prompts. Comece a decompor.

Classificação de texto determinística para agentes de IA. Decompose transforma qualquer texto em unidades semânticas estruturadas e classificadas — instantaneamente. Sem LLM. Sem configuração. Uma chamada de função.


Antes: seu agente lê isto

The contractor shall provide all materials per ASTM C150-20. Maximum load
shall not exceed 500 psf per ASCE 7-22. Notice to proceed within 14 calendar
days of contract execution. Retainage of 10% applies to all payments.
For general background, the project is located in Denver, CO...

Depois: seu agente lê isto

[
  {
    "text": "The contractor shall provide all materials per ASTM C150-20.",
    "authority": "mandatory",
    "risk": "compliance",
    "type": "requirement",
    "irreducible": true,
    "attention": 8.0,
    "entities": ["ASTM C150-20"]
  },
  {
    "text": "Maximum load shall not exceed 500 psf per ASCE 7-22.",
    "authority": "prohibitive",
    "risk": "safety_critical",
    "type": "constraint",
    "irreducible": true,
    "attention": 10.0,
    "entities": ["ASCE 7-22"]
  }
]

Cada unidade classificada. Cada padrão extraído. Cada risco pontuado. Seu agente sabe o que importa.


Instalação

pip install decompose-mcp

Uso como Servidor MCP

Adicione à configuração MCP do seu agente (Claude Code, Cursor, Windsurf, etc.):

{
  "mcpServers": {
    "decompose": {
      "command": "uvx",
      "args": ["decompose-mcp", "--serve"]
    }
  }
}

Seu agente recebe duas ferramentas:

  • decompose_text — decompor qualquer texto
  • decompose_url — buscar uma URL e decompor seu conteúdo

OpenClaw

Instale a skill do ClawHub ou configure diretamente:

{
  "mcpServers": {
    "decompose": {
      "command": "python3",
      "args": ["-m", "decompose", "--serve"]
    }
  }
}

Ou instale a skill: clawdhub install decompose-mcp

Uso como CLI

# Pipe text
cat spec.txt | decompose --pretty

# Inline
decompose --text "The contractor shall provide all materials per ASTM C150-20."

# Compact output (smaller JSON)
cat document.md | decompose --compact

Uso como Biblioteca

from decompose import decompose_text, filter_for_llm

result = decompose_text("The contractor shall provide all materials per ASTM C150-20.")

for unit in result["units"]:
    print(f"[{unit['authority']}] [{unit['risk']}] {unit['text'][:60]}...")

# Pre-filter for LLM context — keep only high-value units
filtered = filter_for_llm(result, max_tokens=4000)
print(f"{filtered['meta']['reduction_pct']}% token reduction")
llm_input = filtered["text"]  # Ready for your LLM

O Que Cada Campo Significa

CampoValoresO Que Informa ao Seu Agente
authoritymandatory, prohibitive, directive, permissive, conditional, informationalIsso é um requisito rígido ou contexto?
risksafety_critical, security, compliance, financial, contractual, advisory, informationalQuanto isso importa?
typerequirement, definition, reference, constraint, narrative, dataQue tipo de conteúdo é este?
irreducibletrue/falseDeve ser preservado literalmente?
attention0.0 - 10.0Quanto de computação o agente deve gastar aqui?
entitiesstandards, codes, regulationsQuais referências formais são citadas?
actionabletrue/falseAlguém precisa fazer algo?

O Que Construir Com Isso

Decompose não é o destino. É o passo antes do LLM que a maioria dos desenvolvedores pula — não porque é difícil, mas porque ninguém mostrou que ele existe. Documentos têm estrutura. Essa estrutura é classificável. E a classificação deve acontecer antes do raciocínio.

Without:  document → chunk → embed → retrieve → LLM → answer  (100% of tokens)
With:     document → decompose → filter/route → LLM → answer  (20-40% of tokens)

Filtro: pré-filtro LLM integrado

filter_for_llm() mantém unidades obrigatórias, críticas de segurança, financeiras e de conformidade — descarta texto padrão antes que chegue ao seu LLM ou armazenamento vetorial.

from decompose import decompose_text, filter_for_llm

result = decompose_text(open("contract.md").read())
filtered = filter_for_llm(result, max_tokens=4000)

# filtered["text"] = high-value units only, ready for LLM
# filtered["meta"]["reduction_pct"] = how much was dropped (typically 60-80%)

# Or use the units directly for embedding
for unit in filtered["units"]:
    embed_and_store(unit["text"], metadata={
        "authority": unit["authority"],
        "risk": unit["risk"],
        "attention": unit["attention"],
    })

Rota: processamento baseado em risco

Conteúdo crítico de segurança vai para uma cadeia. Conteúdo financeiro vai para outra. Texto padrão é ignorado.

from decompose import decompose_text

result = decompose_text(spec_text)

for unit in result["units"]:
    if unit["risk"] == "safety_critical":
        safety_chain.process(unit)       # Full analysis + human review
    elif unit["risk"] == "financial":
        audit_chain.process(unit)         # Flag for finance team
    elif unit["attention"] < 0.5:
        pass                              # Skip boilerplate
    else:
        general_chain.process(unit)       # Standard LLM analysis

Medir: redução de custo de tokens

from decompose import decompose_text

result = decompose_text(spec_text)
total = len(result["units"])
high = [u for u in result["units"] if u["attention"] >= 1.0]

print(f"{len(high)}/{total} units need LLM analysis")
print(f"{100 - len(high) * 100 // total}% token reduction")

Veja examples/ para scripts executáveis.


Por Que Sem LLM?

Decompose roda com regex e heurísticas puras. Sem Ollama, sem chave de API, sem GPU, sem custo de inferência.

Isso é intencional:

  • Rápido: <500ms para uma especificação de 50 páginas
  • Determinístico: A mesma entrada sempre produz a mesma saída
  • Offline: Funciona sem conexão, em um avião, no CI
  • Componível: O LLM do seu agente raciocina sobre a saída estruturada — decompose cuida do pré-processamento

O LLM é o que seu agente usa. Decompose faz qualquer modelo que você esteja executando funcionar melhor.


Construído pela Echology

Decompose é construído pela Echology e extraído do AECai, uma plataforma de inteligência documental para empresas de Arquitetura, Engenharia e Construção. Os padrões de classificação, extração de entidades e detecção de irredutibilidade são testados em batalha contra milhares de documentos AEC reais — especificações, contratos, RFIs, relatórios de inspeção, aplicações de pagamento.

Decompose conquistou sua independência — começou como módulo de classificação de texto do AECai, provou ser geral o suficiente para funcionar em vários domínios (seguros, negociação, regulatório) e foi lançado de forma independente. Gratuito, licenciado sob MIT.

Estudo de Caso: Open Scripture Intelligence

Os mesmos padrões de divisão em blocos e extração de entidades que classificam especificações de engenharia também estruturam a Bíblia. Open Scripture Intelligence usa o divisor de blocos ciente de Markdown do Decompose e a extração de entidades por regex para transformar 31,100 versículos em um grafo de conhecimento com 344,799 arestas de referência cruzada e embeddings semânticos — provando que a metodologia é independente de domínio.

Blog

Licença: MIT — Copyright (c) 2025-2026 Echology, Inc.