AI Photo Critique

Projetando um pipeline RAG com LangChain, banco vetorial Pinecone e GPT-4o Vision para entregar feedback fotográfico de nível especialista por meio de prompt engineering.

IA/MLRAGLangChainBase de dados vetorialEngenharia de prompts
AI Photo Critique

O problema

Se está a tentar evoluir na fotografia, conseguir feedback útil é mais difícil do que parece. Amigos dizem "ficou bom". Fóruns trazem opiniões contraditórias. Críticas profissionais custam caro e demoram. Eu batia sempre no mesmo ponto: sabia que as minhas fotos podiam melhorar, mas não sabia exatamente porquê nem como.

A frustração real não era falta de feedback, e sim falta de feedback específico e acionável. Ferramentas genéricas de IA diziam "boa composição" sem explicar o motivo, ou davam conselhos que contradiziam princípios básicos de fotografia.

Como construí a solução

O AI Photo Critique começou com uma pergunta: e se eu desse à IA a mesma base de conhecimento de um instrutor profissional de fotografia? Em vez de torcer para um modelo genérico "saber" regra dos terços ou linhas-guia, eu poderia garantir isso ao injetar princípios curados no momento da crítica.

Foi aí que usei RAG (Retrieval-Augmented Generation). Em vez de fine-tuning (caro e pouco flexível), RAG permite trazer contexto relevante dinamicamente para o prompt.

O que eu construí:

  • Pipeline multimodal de análise: ao enviar uma foto, o GPT-4o Vision gera uma descrição detalhada (composição, luz, clima, técnica). Essa descrição vira consulta para recuperação.
  • Base de conhecimento curada: criei um banco vetorial no Pinecone com princípios de composição, iluminação e recomendações por gênero fotográfico.
  • Geração de crítica com contexto: descrição da imagem + trechos recuperados são combinados em um prompt aumentado para gerar feedback ancorado em princípios reais.
  • Orquestração com LangChain.js: coordenação de chunking, embeddings, retrieval e montagem de prompt. Frontend em Next.js + Tailwind CSS.

Desenhando a experiência

Antes de codificar, foquei no que fotógrafos precisam: clareza e estrutura. Um bloco de texto longo não ajuda a evoluir.

Escolhi formato em duas partes: "O que funciona bem" e "Pontos de melhoria". É o mesmo padrão de review profissional de portfólio. Reconhece acertos e depois aponta crescimento.

A crítica é renderizada em Markdown para facilitar leitura. Títulos, listas e ênfases tornam tudo escaneável. No prompt de sistema, eu forço essa estrutura para evitar respostas vagas.

Também cuidei do fluxo de upload: manter a foto visível enquanto análise roda, com indicador claro de progresso.

Por dentro do pipeline RAG

Exemplo de fluxo para uma foto da Golden Gate Bridge:

Etapa 1: modelo de visão gera descrição

{
  "image_description": "A vertical photograph of the Golden Gate Bridge, partially obscured by a thick layer of fog. The iconic red-orange tower on the right is prominent, rising above the low-hanging clouds. The foreground is the dark, choppy water of the bay. The composition follows the rule of thirds, with the main tower positioned off-center. The mood is somber and atmospheric due to the fog."
}

Etapa 2: RAG recupera contexto relevante

{
  "retrieved_chunks": [
    {
      "source": "composition_guide.pdf",
      "text": "The Rule of Thirds is a fundamental principle. By placing key elements along the lines or at their intersections, you create a more balanced and engaging photograph than simply centering the subject."
    },
    {
      "source": "landscape_photography.pdf",
      "text": "Atmospheric conditions like fog or mist can be powerful tools for creating mood and a sense of depth. Use them to obscure parts of the scene, adding mystery and drawing focus to your primary subject."
    }
  ]
}

Etapa 3: prompt aumentado enviado ao LLM

{
  "system_prompt": "You are an expert, objective photography critic. Your goal is to provide honest, professional feedback to help a photographer improve their craft.",
  "context": [
    "The Rule of Thirds is a fundamental principle. By placing key elements along the lines or at their intersections, you create a more balanced and engaging photograph than simply centering the subject.",
    "Atmospheric conditions like fog or mist can be powerful tools for creating mood and a sense of depth. Use them to obscure parts of the scene, adding mystery and drawing focus to your primary subject."
  ],
  "image_description": "A vertical photograph of the Golden Gate Bridge, partially obscured by a thick layer of fog. The iconic red-orange tower on the right is prominent, rising above the low-hanging clouds. The composition follows the rule of thirds, with the main tower positioned off-center.",
  "instructions": "Generate a critique formatted in Markdown. Structure your response with two main headings: '## What Works Well' and '## Areas for Improvement'."
}

Lidando com o mundo real

Um produto público de IA precisa lidar com abuso, falhas e casos extremos.

Mantendo custos sustentáveis

Como OpenAI e Pinecone cobram por uso, rate limiting não é opcional. Implementei limitação por IP com Upstash Redis. Cada IP tem cota por janela de tempo; ao atingir o limite, o utilizador recebe uma mensagem clara.

Validação de imagens

Nem todo upload é uma foto válida. A aplicação valida tipo e tamanho antes de processar. Imagens muito grandes são bloqueadas com mensagem útil, evitando timeout e custo desnecessário.

Quando dá problema

  • Se o modelo de visão falha/timeout, mostramos erro amigável com opção de tentar novamente.
  • Se o Pinecone estiver indisponível, ainda geramos crítica sem contexto recuperado (degradação elegante).
  • Estados de loading deixam claro que o sistema está processando.

O que aprendi

RAG venceu fine-tuning para esse caso. Ficou mais barato, flexível e fácil de atualizar.

Prompt engineering é invisível e essencial. A diferença entre um prompt genérico e um bem projetado é enorme.

Pipelines multimodais são mais complexos. Se a descrição inicial da imagem erra, o retrieval também se desvia.

APIs públicas precisam de proteção desde o dia zero. Rate limiting evita surpresas de custo.

Estrutura transforma saída de IA em utilidade real. Formato explícito em Markdown deixou a resposta objetiva e aplicável.

Curadoria da base de conhecimento é contínua. Conforme novos tipos de foto aparecem, surgem lacunas para cobrir.