Context Packages¶
Finalidade e carregamento¶
Um Context Package é um bloco de conhecimento em Markdown, identificado por ID estável. Em vez de enviar toda a base a cada chamada, o sistema envia um catálogo descritivo e carrega somente o conteúdo solicitado. Isso reduz prompt desnecessário e separa regras do agente de conhecimento comercial/técnico versionado.
O Protocol KnowledgeBaseRepository, em src/core/knowledge_base/repository.py, expõe get_package(package_id) → str | None e list_packages() → list[str]. InMemoryKnowledgeBase descobre módulos de core.knowledge_base.packages, lê CONTENT: str e usa o nome do arquivo em maiúsculas como ID. Módulo sem CONTENT string gera kb_module_missing_content; catálogo carregado gera kb_loaded.
O runtime usa DynamicKnowledgeBase(fallback=InMemoryKnowledgeBase(), resources=...). Um recurso administrativo ativo substitui o conteúdo empacotado; inativo oculta o package; ausência de override usa fallback. Portanto o catálogo empacotado contém 15 packages, mas a lista efetiva pode variar conforme registros administrativos.
Catálogo empacotado completo¶
Todos os arquivos abaixo estão em src/core/knowledge_base/packages/. Todos os três agentes recebem o catálogo ativo e podem solicitar qualquer ID; não há matriz de permissão por agente. A coluna de fonte reproduz a origem declarada no módulo, sem afirmar atualização ou verificação externa nesta auditoria.
| ID | Arquivo | Finalidade / momento de uso | Fonte declarada |
|---|---|---|---|
CLICKSIGN_PROCESS |
clicksign_process.py |
Aceite formal de orçamento e assinatura; dúvida sobre processo | GG-Guia Orçamentos §3.1/§3.2 |
COMPANY_INFO |
company_info.py |
Institucional, frentes e contatos | Personas Jun/2026, portfólios geral/Agro, coleta GoSolos e termos You |
CUSTOM_DEVELOPMENT |
custom_development.py |
Desenvolvimento sob medida, padronização e primers | Portfólio GoGenetic 2026, Agro 2025 e requisitos |
DELIVERY_TIMELINES |
delivery_timelines.py |
Prazos de serviços, urgência e volume | GG-Guia Orçamentos §6 e requisitos por serviço |
GENOME_SIZES |
genome_sizes.py |
Limites de genoma e tipo de entrega | GG-Requisitos por Serviço e guia de orçamentos |
GOGENETIC_YOU |
gogenetic_you.py |
Serviços You, coleta, privacidade e limites de saúde | Termos de consentimento, catálogo eGestor e Personas |
GOSOLOS_PLATFORM |
gosolos_platform.py |
Plataforma GoSolos, análises e aplicações | Portfólio Agro 2025, páginas 19–23 |
GOSOLOS_SAMPLING |
gosolos_sampling.py |
Coleta/envio de solo, kit e formulário | Guia Prático para Coleta e Envio das Amostras |
KITS_BS_DIAGNOSTICA |
kits_bs_diagnostica.py |
Kits para laboratório do cliente e parceiro | GG-Guia Orçamentos §3.1 e requisitos qPCR |
PORTFOLIO_EXCLUSIONS |
portfolio_exclusions.py |
Exclusões explícitas e alternativas | Guia de orçamentos e fontes indicadas no módulo |
PORTFOLIO_OVERVIEW |
portfolio_overview.py |
Visão do portfólio e comparação entre frentes | Portfólios geral 2026, Agro 2025 e fontes de catálogo |
PRICING_RULES |
pricing_rules.py |
Preços de referência, adicionais, descontos e orçamento | Catálogo eGestor personalizadoProdutos e guia de orçamentos |
PRIMERS_SANGER |
primers_sanger.py |
Primers, fitas e regras para material do cliente | Guia de orçamentos §3.8 e requisitos Sanger |
SAMPLE_INSTRUCTIONS |
sample_instructions.py |
Tipo, preparo, acondicionamento e envio de amostras | GG-Requisitos e Informações por Serviço; instrução Sanger GG-PC003#004 |
TARGETS_QPCR |
targets_qpcr.py |
Alvos/microrganismos disponíveis | Portfólio geral 2026 p.15 e portfólio Agro 2025 |
Digests de apoio ficam em docs/knowledge_source/, incluindo guia-orcamentos.md, catalogo-egestor-precos.md, gogenetic-you-lgpd.md e gosolos-coleta-solo.md. São origem editorial, não fontes consultadas por busca remota no turno. Valores e contatos não são republicados aqui como exemplos.
Descoberta e aliases¶
src/core/knowledge_base/discovery.py contém PACKAGE_DISCOVERY, descrições, palavras-chave e aliases explícitos. render_package_catalog() produz o catálogo compacto para os prompts. resolve_package_id(requested, available_ids) normaliza acentos, caixa e separadores e resolve ID/alias somente entre os IDs atualmente disponíveis.
Exemplos de aliases reais: PRECOS → PRICING_RULES, ALVOS_QPCR → TARGETS_QPCR, GOYOU → GOGENETIC_YOU, COLETA_SOLO → GOSOLOS_SAMPLING. Não há busca vetorial, similaridade semântica, download de PDF ou consulta a uma API externa nesse mecanismo.
s=99 e orçamento por mensagem¶
{"s":99,"context_needed":"SAMPLE_INSTRUCTIONS"}
O dispatcher valida que context_needed é string não vazia, resolve o ID e lê o conteúdo. Ausência, ID desconhecido, package desativado ou conteúdo indisponível resultam em handoff por incerteza, sem pedir ao modelo para inventar a resposta.
O Orchestrator guarda o ID em Session.collected_packages sem duplicá-lo e incrementa context_enrichment_count. Na próxima chamada, busca novamente o conteúdo dos IDs salvos e os injeta no system prompt. Assim, uma alteração administrativa pode afetar conteúdo de um package já coletado numa chamada posterior: a sessão guarda IDs, não snapshot imutável dos textos.
MAX_CONTEXT_ENRICHMENTS_PER_MESSAGE tem default 2. O contador é resetado no início de cada inbound do bot. Após incrementar, se o valor ultrapassar o limite, faz handoff; com default 2, a terceira solicitação ultrapassa o orçamento. Solicitar novamente o mesmo ID não duplica collected_packages, mas ainda incrementa o contador. Além disso, o teto global de 10 iterações por turno impede ciclos mais amplos.
flowchart LR
I[Inbound: reset contador] --> A[Agente]
A -->|s=99| R[Resolver ID ativo]
R -->|ausente| H[Handoff incerteza]
R -->|presente| C[Salvar ID e incrementar contador]
C -->|dentro do limite| A
C -->|acima do limite| H
A -->|resposta normal| F[Aplicar ação e responder]
Overrides, falhas e manutenção¶
Divergência documental
A docstring inicial de repository.py afirma “updates require a redeploy” e chama a implementação em memória de única do MVP. O factory atual compõe DynamicKnowledgeBase com overrides DynamoDB e permite alteração em runtime. Mudanças nos módulos Python ainda exigem atualização do código implantado; mudanças administrativas usam recursos versionados.
Para novo package empacotado: crie módulo com CONTENT, adicione metadados/aliases em discovery.py, teste ID/conteúdo e escolha do agente, registre fonte editorial e atualize esta tabela. Um novo package não cria por si só um serviço canônico. Para ajustes temporários de conhecimento, use o fluxo administrativo autorizado; não coloque credenciais, contatos pessoais de teste ou conteúdo de clientes no package.
tests/unit/integrations/test_knowledge_base.py verifica os 15 IDs, conteúdo não vazio, ordem e aliases; tests/unit/agents/test_invoker.py verifica injeção; tests/unit/application/test_action_mapping.py cobre desconhecidos; test_process_message_use_case.py cobre reinvocação e teto. A fixture TC-99-context-enrichment.json documenta replay de enriquecimento. Veja agentes, DynamoDB administrativo e modificação de agente.