Tivemos algumas perguntas internas sobre o gerenciamento de imagens em contextos de IA, então queria abordar algumas das considerações em um problema público.
O problema
Os LLMs atuais suportam múltiplas modalidades. Todos os principais fornecedores agora suportam entrada como imagens, alguns fornecedores (notavelmente o Google) suportam saída como imagens.
Isso deixa o Discourse AI com um pequeno problema: como apresentamos “imagens” aos LLMs.
Especificamente, se tivermos este post de exemplo:
Olá, aqui está uma foto minha:

E aqui está outra:

Fim
Como apresentamos isso ao LLM:
Opção 1: Markdown Mantido, Imagens Anexadas
Abordagem: Manter todo o texto junto, anexar imagens no final.
[
"Olá, aqui está uma foto minha: \n\n\n\nE aqui está outra:\n\n\n\nFim",
image1,
image2
]
Opção 2: Markdown Mantido, Imagens Incorporadas Inline
Abordagem: Intercalar texto e imagens para preservar o contexto e a ordem.
[
"Olá, aqui está uma foto minha: \n\n",
image1,
"E aqui está outra:\n\n",
image2,
"Fim"
]
Opção 3: Markdown Removido, Imagens Anexadas
Abordagem: Remover completamente a sintaxe de markdown das imagens, anexar as imagens reais no final.
[
"Olá, aqui está uma foto minha: \n\nE aqui está outra:\n\nFim",
image1,
image2
]
Opção 4: Descrições Mantidas, Markdown Simplificado
Abordagem: Remover a formatação específica do Discourse, mas manter as descrições das imagens para contexto.
[
"Olá, aqui está uma foto minha: \n\nE aqui está outra:\nSam em pé ao lado de uma janela\n\nFim",
image1,
image2
]
Opção 5: Descrições Inline, Imagens Incorporadas
Abordagem: Substituir o markdown por descrições inline e, em seguida, incorporar as imagens correspondentes.
[
"Olá, aqui está uma foto minha:",
image1,
"E aqui está outra:\nSam em pé ao lado de uma janela",
image2,
"Fim"
]
No momento, nossa implementação é (1), parte da resposta do porquê é que os modelos antigos “legados” não nos permitiam posicionar as imagens, a outra é que muitas vezes as pessoas usam o Discourse para reformatar um post, se removermos os marcadores de upload, o LLM pensará que dissemos algo diferente e não conseguirá reformatar um post com imagens.
Além disso, as recomendações de fornecedores de LLM como a Anthropic são sempre colocar as imagens no final. Isso mantém as coisas mais simples para o LLM interpretar.
Essa abordagem, no entanto, é muito problemática para um LLM como o Nano Banana: Image editing in Google Gemini gets a major upgrade.
Quando tentei isso, o LLM começou a alucinar marcadores de upload em vez de renderizar imagens.
Faz sentido em retrospecto.
Se dissermos a um LLM que ele acabou de dizer: upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png, não se surpreenda se ele disser algo estranho como isso novamente.
Estou indeciso sobre mudar para (2) e parece que (3) é a única maneira sensata de “ecoar o que o LLM acabou de dizer, para evitar alucinações”… Portanto, nossa solução para este problema complicado é um tanto mista.
Enquanto trabalhava nisso, explorei se poderia criar uma solução ainda melhor onde saída e entrada são tratadas da mesma forma, mas não acho que isso seja prático. (Também tentei preservar as descrições de upload quando elas são longas o suficiente e assim por diante)
Por enquanto, porém:
(1) para entradas no LLM
(3) para saídas do LLM
A longo prazo:
(2) para entradas vale a pena explorar
e remover, mas reter a posição contextual nas saídas também vale a pena explorar.
É uma pena que nenhum fornecedor de LLM agora permita que você forneça metadados adicionais para uma imagem com a imagem.