O problema que avaliadores de texto não conseguem resolver
Se você está construindo sistemas de compras visuais, extração de documentos ou análise de gráficos, você precisa de uma forma confiável de verificar se a resposta do modelo está realmente fundamentada na imagem de origem. Um avaliador que analisa apenas texto não consegue dizer se uma legenda descreve fielmente uma imagem, se o total extraído de uma nota fiscal bate com o documento, ou se um resumo de tela inventou um botão que nunca existiu na página.
O contexto do mercado reforça a urgência: a Gartner prevê que até 2030, 80% dos softwares empresariais serão multimodais — contra menos de 10% em 2024. Sem avaliação multimodal automatizada, as equipes ficam presas entre revisão humana cara e proxies de texto que não são confiáveis.
Os quatro novos avaliadores do Strands Evals
A AWS anunciou quatro novos avaliadores baseados em Modelos de Linguagem Multimodais de Grande Porte (MLLM) como juízes para tarefas de imagem para texto no Kit de Desenvolvimento de Software (SDK) do Strands Evals. Cada avaliador pontua saídas de imagem para texto comparando diretamente com a imagem de origem, enviando a imagem ao modelo juiz junto com a consulta, a resposta e, opcionalmente, uma resposta de referência. O juiz retorna uma pontuação ancorada na imagem e uma string de raciocínio útil para depuração.
Os quatro avaliadores cobrem os casos de uso mais comuns: legendagem de imagens, resposta visual a perguntas, interpretação de gráficos, extração de campos em documentos, Reconhecimento Ótico de Caracteres (OCR) e sumarização de capturas de tela. Veja o que cada um avalia:
- Qualidade Geral (Overall Quality): Pontuação em escala Likert de 1 a 5. Avalia a qualidade geral da resposta — relevância, precisão, profundidade e abrangência.
- Correção (Correctness): Binário. Verifica se a resposta é factualmente correta e completa considerando a imagem e a consulta. Detecta erros factuais, atributos errados, contagens, posições e omissões.
- Fidelidade (Faithfulness): Binário. Verifica se a resposta está ancorada na imagem sem alucinações — objetos inventados, inferências sem suporte ou vazamento de conhecimento externo.
- Seguimento de Instruções (Instruction Following): Binário. Verifica se a resposta respeita as restrições da consulta — formato, contagem, escopo e tópico.
Todos os avaliadores suportam dois modos de operação. O modo baseado em referência compara a resposta com uma resposta-ouro e é útil quando há conjuntos de teste rotulados disponíveis. O modo sem referência avalia apenas a partir da imagem, sendo a única opção quando o sistema opera com imagens ao vivo sem gabarito disponível.
Passo a passo: avaliando uma tarefa de leitura de gráfico
Para tornar a API concreta, o exemplo utilizado no anúncio original percorre um único Case. A entrada é um gráfico de barras com a receita média por assinatura paga de streaming por região (EUA/Canadá, Europa/Oriente Médio/África, Ásia-Pacífico, América Latina). O sistema sob teste é um agente de visão simples que responde uma pergunta específica sobre o gráfico.

Passo 1: Definir o Case e os avaliadores
O Case encapsula a imagem e a instrução em um MultimodalInput. Fornecer expected_output ativa a avaliação baseada em referência nos avaliadores que suportam esse modo.
from strands import Agent
from strands_evals import Case, Experiment
from strands_evals.evaluators import (
MultimodalOverallQualityEvaluator,
MultimodalCorrectnessEvaluator,
MultimodalFaithfulnessEvaluator,
MultimodalInstructionFollowingEvaluator,
)
from strands_evals.types import ImageData, MultimodalInput
cases = [
Case[MultimodalInput, str](
name="revenue-chart-1",
input=MultimodalInput(
media=ImageData(source="revenue_chart.jpeg"),
instruction="Which region has the highest average revenue? "
"State the region name and the dollar amount shown in the chart.",
),
expected_output="U.S. and Canada has the highest at $13.32.",
metadata={"dataset": "ChartQA"},
),
]
evaluators = [
MultimodalOverallQualityEvaluator(), # Likert 1-5
MultimodalCorrectnessEvaluator(), # Binary
MultimodalFaithfulnessEvaluator(), # Binary
MultimodalInstructionFollowingEvaluator(), # Binary
]
Passo 2: Configurar a tarefa e executar o experimento
A função de tarefa recebe cada Case, executa o modelo de visão com a imagem e a instrução, e retorna a string de resposta para ser avaliada.
agent = Agent(callback_handler=None)
task_output = None
def run_task(case):
global task_output
image = case.input.media
messages = [
{"image": {"format": image.format or "png", "source": {"bytes": image.to_bytes()}}},
{"text": case.input.instruction},
]
task_output = str(agent(messages))
return task_output
reports = await Experiment(cases=cases, evaluators=evaluators).run_evaluations_async(
task=run_task,
max_workers=1,
)
Passo 3: Inspecionar o relatório
Cada relatório contém pontuações por caso, resultados de aprovação/reprovação e raciocínios:
print(f"Task Output:\n{task_output}\n")
print("=" * 50)
for name, report in zip(
["Quality", "Correctness", "Faithfulness", "Instruction"],
reports,
):
reason = report.reasons[0] if report.reasons else ""
status = "PASS" if report.test_passes[0] else "FAIL"
print(f"{name}: {report.scores[0]:.2f} [{status}]")
print(f" Reason: {reason}\n")
A execução sobre o gráfico do exemplo produz o seguinte resultado:
Task Output:
According to the chart, the U.S. and Canada region has the highest average revenue per paying streaming membership at $13.32.
==================================================
Quality: 1.00 [PASS]
Reason: The response correctly identifies U.S. and Canada as the highest revenue region at $13.32, directly addressing both parts of the instruction. The answer is factually accurate based on the chart data and provides appropriate context.
Correctness: 1.00 [PASS]
Reason: The factual claims are accurate. U.S. and Canada is correctly identified as the region with the highest bar in the chart, and $13.32 is the exact dollar amount visible on that bar. No factual errors found.
Faithfulness: 1.00 [PASS]
Reason: The response is fully grounded in the image. Each claim can be directly verified against the chart. U.S. and Canada shows $13.32 and is visibly the highest bar. No hallucinations detected.
Instruction: 1.00 [PASS]
Reason: Response perfectly follows instruction by stating both required elements: region name (U.S. and Canada) and dollar amount ($13.32). Matches expected output factually with no constraint violations.
Dois pontos importantes a observar: cada avaliador retorna uma string de raciocínio além da pontuação — essencial para depuração quando uma execução falha em Integração Contínua (CI). Além disso, o mesmo Case foi pontuado por quatro juízes independentes em um único Experiment, mantendo o fluxo idêntico ao de avaliações com texto apenas.
Rubricas personalizadas
Para critérios específicos de domínio, a classe base aceita uma string de rubrica arbitrária:
from strands_evals.evaluators import MultimodalOutputEvaluator
medical_eval = MultimodalOutputEvaluator(rubric="""Rate diagnostic accuracy:
- 1.0: All findings correctly identified with proper terminology.
- 0.5: Key findings identified but imprecise terminology.
- 0.0: Critical findings missed or misidentified.""")
O que os experimentos revelaram
O juiz precisa ver a imagem?
Uma dúvida natural é se um juiz apenas de texto, recebendo uma descrição detalhada da imagem gerada automaticamente, consegue substituir um juiz multimodal. Os experimentos compararam o MLLM-as-a-Judge (imagem mais texto) contra o Modelo de Linguagem de Grande Porte (LLM) como juiz com descrições longas e curtas da imagem. O resultado foi claro: o juiz multimodal se alinhou mais de perto com as pontuações humanas do que qualquer variante apenas de texto. Além disso, quando se conta a chamada extra ao LLM para gerar a descrição, a rota apenas de texto não é significativamente mais barata ou rápida. Tendo um juiz multimodal disponível, o recomendado é usá-lo diretamente.
Qual modelo usar como juiz no Amazon Bedrock?
A AWS avaliou vários MLLMs disponíveis no Amazon Bedrock como juízes, usando alinhamento com pontuações humanas, custo por consulta e latência como critérios. O Anthropic Claude Sonnet 4.6 no Amazon Bedrock ofereceu o melhor equilíbrio entre precisão e custo e é utilizado como modelo juiz padrão nos avaliadores multimodais. Duas observações gerais também se confirmaram: modelos maiores com capacidade de raciocínio são mais confiáveis como juízes; e modelos de preço premium não apresentaram ganho mensurável de precisão sobre os de nível intermediário para essa tarefa.
Quais escolhas de design de prompt realmente importam?
Os experimentos testaram diferentes abordagens de design de prompt. As conclusões que se generalizaram foram:
- Peça ao juiz para raciocinar antes de pontuar. Esta foi a escolha de maior impacto. Saída apenas com pontuação é mais barata e consistente, mas o alinhamento com pontuações humanas cai de forma perceptível.
- Inclua alguns exemplos de calibração diversificados. O alinhamento melhorou de forma monotônica ao passar de zero exemplos para um punhado deles.
- Use uma rubrica multidimensional detalhada (precisão visual, aderência a instruções, completude, coerência) em vez de um único prompt holístico. Separar dimensões evita que uma pontuação vaga absorva modos de falha distintos.
Referência vs. sem referência: quando usar cada modo
Injetar uma resposta de referência no prompt do juiz ajuda avaliadores ancorados em conteúdo. Qualidade Geral, Correção e Fidelidade se alinharam mais de perto com o julgamento humano quando uma referência estava disponível. Seguimento de Instruções teve comportamento oposto: adicionar conteúdo de referência distraiu o juiz da verificação de restrições estruturais (formato, escopo, ordem, contagem) que são determinadas pela consulta e resposta isoladamente. A diretriz geral é: use referências para métricas ancoradas em conteúdo e dispense-as para métricas estruturais como seguimento de instruções.
Boas práticas recomendadas
- Use o
MultimodalOverallQualityEvaluatorpara verificações rápidas de sanidade e adicione os avaliadores binários direcionados (Correção, Fidelidade, Seguimento de Instruções) à medida que diagnostica modos de falha específicos. - Comece com o Claude Sonnet 4.6 como juiz e migre para MLLMs menores com capacidade de raciocínio no Amazon Bedrock apenas se custo ou latência forem fatores dominantes.
- Evite modelos pequenos para julgamento.
- Mantenha o formato de saída com raciocínio mais pontuação. Saída apenas com pontuação é tentadora pelo custo, mas o alinhamento com pontuações humanas cai de forma perceptível.
- Use referências para correção, fidelidade e qualidade geral quando disponíveis. Dispense-as para seguimento de instruções.
Próximos passos
Os quatro novos avaliadores MLLM-as-a-Judge no Strands Evals movem a avaliação de imagem para texto de revisão humana cara ou proxies de texto não confiáveis para pontuação automatizada ancorada na imagem. Cada avaliador tem como alvo um modo de falha distinto, suporta avaliação baseada em referência e sem referência, e retorna raciocínio diagnóstico junto com cada pontuação.
Esta é a primeira etapa em direção a uma avaliação multimodal mais ampla no Strands Evals. Os trabalhos futuros incluem avaliação em nível de etapa para uso de ferramentas multimodais e trajetórias de agentes, além de combinações adicionais de modalidades como texto para imagem, vídeo para texto e áudio para texto.
Para começar, instale o Strands Evals com o comando:
pip install strands-agents-evals
Em seguida, explore os recursos disponíveis: leia a documentação do Strands Evals para uma visão geral do fluxo Case → Experiment → Report; consulte a referência do avaliador multimodal para a API completa; experimente o exemplo de avaliador multimodal no repositório de documentação do Strands Agents; e compartilhe feedback e solicitações de funcionalidades no GitHub Issues.
Fonte
Multimodal evaluators: MLLM-as-a-judge for image-to-text tasks in Strands Evals (https://aws.amazon.com/blogs/machine-learning/multimodal-evaluators-mllm-as-a-judge-for-image-to-text-tasks-in-strands-evals/)
Leave a Reply