Gerenciando Imagens no Contexto de IA

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:

![image|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)

E aqui está outra:

![Sam standing next to a window|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)

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![image|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)\n\nE aqui está outra:\n\n![Sam standing next to a window|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)\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![image|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)",
  image1,
  "E aqui está outra:\n\n![Sam standing next to a window|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)",
  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.

3 curtidas