content-hash-cache-pattern
Faz seu agente usar hashes de conteúdo para cachear resultados de processamento de arquivos. Isso evita processamento repetido e invalida o cache automaticamente quando o conteúdo muda. Útil para acelerar tarefas lentas.
O que ela faz
Este padrão ajuda a acelerar o processamento de arquivos repetitivos, como extrair texto de PDFs ou analisar imagens. Ele salva os resultados em um 'cache' (uma memória rápida) usando um código único gerado a partir do conteúdo do arquivo. Se o arquivo não mudar, o resultado é recuperado rapidamente do cache.
Quando usar
- ✓Quando você processa os mesmos arquivos várias vezes e isso demora muito.
- ✓Ao criar sistemas que lidam com muitos arquivos, como PDFs ou imagens.
- ✓Quando você quer que o cache funcione mesmo se os arquivos forem movidos ou renomeados.
Exemplo do que pedir para a IA
“Posso usar o cache para acelerar a extração de texto deste relatório PDF?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele calcula um código único (hash) baseado no conteúdo exato do arquivo. Esse código é usado para encontrar o resultado salvo em um arquivo de cache. Se o conteúdo do arquivo mudar, um novo código é gerado e o resultado antigo é ignorado.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill content-hash-cache-patternOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/content-hash-cache-pattern/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrão de Cache de Arquivo por Hash de Conteúdo
Armazene em cache os resultados de processamento de arquivos caros (análise de PDF, extração de texto, análise de imagem) usando hashes de conteúdo SHA-256 como chaves de cache. Diferente do cache baseado em caminho, essa abordagem sobrevive a movimentações/renomeações de arquivos e invalida automaticamente quando o conteúdo muda.
Quando Ativar
- Construindo pipelines de processamento de arquivos (PDF, imagens, extração de texto)
- O custo de processamento é alto e os mesmos arquivos são processados repetidamente
- Precisa de uma opção de linha de comando
--cache/--no-cache - Quer adicionar cache a funções puras existentes sem modificá-las
Padrão Central
1. Chave de Cache Baseada em Hash de Conteúdo
Use o conteúdo do arquivo (não o caminho) como chave de cache:
import hashlib
from pathlib import Path
_HASH_CHUNK_SIZE = 65536 # 64KB chunks for large files
def compute_file_hash(path: Path) -> str:
"""SHA-256 of file contents (chunked for large files)."""
if not path.is_file():
raise FileNotFoundError(f"File not found: {path}")
sha256 = hashlib.sha256()
with open(path, "rb") as f:
while True:
chunk = f.read(_HASH_CHUNK_SIZE)
if not chunk:
break
sha256.update(chunk)
return sha256.hexdigest()
Por que hash de conteúdo? Renomear/mover arquivo = cache hit. Mudança de conteúdo = invalidação automática. Nenhum arquivo de índice necessário.
2. Dataclass Congelada para Entrada de Cache
from dataclasses import dataclass
@dataclass(frozen=True, slots=True)
class CacheEntry:
file_hash: str
source_path: str
document: ExtractedDocument # The cached result
3. Armazenamento de Cache Baseado em Arquivo
Cada entrada de cache é armazenada como {hash}.json — busca O(1) por hash, nenhum arquivo de índice é necessário.
import json
from typing import Any
def write_cache(cache_dir: Path, entry: CacheEntry) -> None:
cache_dir.mkdir(parents=True, exist_ok=True)
cache_file = cache_dir / f"{entry.file_hash}.json"
data = serialize_entry(entry)
cache_file.write_text(json.dumps(data, ensure_ascii=False), encoding="utf-8")
def read_cache(cache_dir: Path, file_hash: str) -> CacheEntry | None:
cache_file = cache_dir / f"{file_hash}.json"
if not cache_file.is_file():
return None
try:
raw = cache_file.read_text(encoding="utf-8")
data = json.loads(raw)
return deserialize_entry(data)
except (json.JSONDecodeError, ValueError, KeyError):
return None # Treat corruption as cache miss
4. Wrapper de Camada de Serviço (SRP)
Mantenha a função de processamento pura. Adicione o cache como uma camada de serviço separada.
def extract_with_cache(
file_path: Path,
*,
cache_enabled: bool = True,
cache_dir: Path = Path(".cache"),
) -> ExtractedDocument:
"""Service layer: cache check -> extraction -> cache write."""
if not cache_enabled:
return extract_text(file_path) # Pure function, no cache knowledge
file_hash = compute_file_hash(file_path)
# Check cache
cached = read_cache(cache_dir, file_hash)
if cached is not None:
logger.info("Cache hit: %s (hash=%s)", file_path.name, file_hash[:12])
return cached.document
# Cache miss -> extract -> store
logger.info("Cache miss: %s (hash=%s)", file_path.name, file_hash[:12])
doc = extract_text(file_path)
entry = CacheEntry(file_hash=file_hash, source_path=str(file_path), document=doc)
write_cache(cache_dir, entry)
return doc
Principais Decisões de Design
| Decisão | Racional |
|---|---|
| Hash de conteúdo SHA-256 | Independente de caminho, invalida automaticamente em mudança de conteúdo |
Nomeação de arquivo {hash}.json |
Busca O(1), nenhum arquivo de índice necessário |
| Wrapper de camada de serviço | SRP: extração permanece pura, cache é uma preocupação separada |
| Serialização JSON manual | Controle total sobre a serialização de dataclass congelada |
Retorno de corrupção None |
Degradação graciosa, reprocessa na próxima execução |
cache_dir.mkdir(parents=True) |
Criação preguiçosa de diretório na primeira escrita |
Melhores Práticas
- Hasheie o conteúdo, não os caminhos — caminhos mudam, identidade do conteúdo não
- Divida arquivos grandes em pedaços ao hashear — evite carregar arquivos inteiros na memória
- Mantenha as funções de processamento puras — elas não devem saber nada sobre cache
- Registre cache hit/miss com hashes truncados para depuração
- Lide com corrupção graciosamente — trate entradas de cache inválidas como misses, nunca trave
Antí-Padrões a Evitar
# RUIM: Cache baseado em caminho (quebra em movimentação/renomeação de arquivo)
cache = {"/path/to/file.pdf": result}
…
Perguntas frequentes
Por que usar o conteúdo do arquivo e não o nome dele?
Porque o nome do arquivo pode mudar (ser renomeado ou movido), mas o conteúdo pode ser o mesmo. Usar o conteúdo garante que o cache funcione corretamente mesmo nessas situações.
O que acontece se o conteúdo do arquivo mudar?
Um novo código único (hash) é gerado para o novo conteúdo. O sistema então percebe que o resultado antigo no cache não é mais válido e processa o arquivo novamente para criar um novo resultado cacheado.
Onde os resultados são salvos?
Os resultados são salvos em arquivos separados, nomeados com o código único (hash) do conteúdo. Isso permite que o sistema encontre rapidamente o resultado correto sem precisar de uma lista separada.
Detalhes
Descrição original do autor
Cache expensive file processing results using SHA-256 content hashes — path-independent, auto-invalidating, with service layer separation. Use when repeated file processing is slow and results should be cached and invalidated by content rather than path.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #28
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
ci-cd-and-automation
Ensina seu agente de IA a automatizar tarefas repetitivas e colocar projetos no ar e cuidar da infraestrutura.
addyosmani/agent-skills
suggestion-box
Ajuda seu agente a sugerir melhorias automaticamente. Ele observa problemas e propõe soluções sem precisar de permissão, continuando a tarefa principal.
paperclipai/paperclip
orbit-general
Ajuda seu agente a criar um painel de atividades recentes de várias ferramentas conectadas. Ele mostra um resumo do que aconteceu nas últimas 24 horas. É útil para ter uma visão geral do trabalho em um só lugar.
nexu-io/open-design