Skip to content

[Review] Few-shot dinâmico com histórico de reviews anteriores da Iara #47

@felipefernandes

Description

@felipefernandes

Contexto

Atualmente a Iara usa zero-shot prompting — ela recebe somente as instruções estáticas do system prompt + o diff do PR. Não há exemplos de "o que é uma boa review" no prompt.

A técnica de few-shot prompting consiste em incluir exemplos de entrada/saída no prompt para calibrar o comportamento do modelo. Quando esses exemplos são selecionados dinamicamente com base na similaridade com a entrada atual, chama-se dynamic few-shot.

Problema

Sem exemplos de calibração:

  • O mesmo tipo de erro pode receber reviews inconsistentes entre PRs
  • Não há como ensinar à Iara o "estilo" e nível de severidade preferido pelo time
  • A qualidade do review depende 100% da capacidade zero-shot do modelo escolhido

Solução Proposta

Após um review gerado, armazenar no LanceDB um par (diff_chunk, review_comment) como exemplo. Nas próximas execuções, recuperar os exemplos mais similares ao diff atual e injetá-los no system prompt:

# No generate_system_prompt() ou no review_code()
if few_shot_examples:
    prompt += "\n\n## EXEMPLOS DE REVIEWS ANTERIORES:\n"
    for example in few_shot_examples:
        prompt += f"\n### Diff:\n```diff\n{example.diff}\n```\n"
        prompt += f"\n### Review:\n{example.review}\n"

Armazenamento

Criar uma nova tabela no LanceDB: review_examples, com schema:

  • diff_embedding (vetor) — para busca por similaridade
  • diff_snippet (texto) — trecho do diff original
  • review_text (texto) — review gerado pela Iara
  • created_at (timestamp)

Coleta dos exemplos

  • Automática: após cada review bem-sucedido, salvar o par automaticamente
  • Ou manual: iara memory add-example --diff <file> --review <file>

Critérios de Aceite

  • Reviews bem-sucedidos são opcionalmente armazenados como exemplos (opt-in via .iara.json)
  • Durante o review, os N exemplos mais similares são recuperados do LanceDB
  • Os exemplos são injetados no system prompt antes do diff
  • Config: memory.few_shot_enabled: true/false e memory.few_shot_max_examples: 3
  • Testes unitários para a lógica de armazenamento e recuperação

Considerações de Privacidade

⚠️ Os exemplos contêm trechos de código real. O armazenamento é sempre local (LanceDB no runner ou na máquina do dev). Nada é enviado a servidores externos além do LLM escolhido (que já recebe o diff de qualquer forma).

Complexidade Estimada

🔴 Alta — requer novo schema no LanceDB, mudança no pipeline de review, lógica de embedding para exemplos, e testes de integração robustos

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    Status

    Backlog

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions