人工智能背景下的图像管理

我们对 AI 上下文中的图像管理有一些内部疑问,因此我想在公开问题中介绍一些注意事项。

问题

今天的 LLM 支持多种模态。所有主要供应商现在都支持将图像作为输入,一些供应商(尤其是谷歌)支持将图像作为输出。

这给 Discourse AI 带来了一个问题:我们如何将“图像”呈现给 LLM。

具体来说,如果我们有这个示例帖子:

你好,这是我的照片:

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

这是另一张照片

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

结束

我们如何将其呈现给 LLM:

选项 1:保留 Markdown,附加图像

方法: 将所有文本放在一起,在末尾附加图像。

[
  "你好,这是我的照片:

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

这是另一张照片

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

结束",
  image1,
  image2
]

选项 2:保留 Markdown,内嵌图像

方法: 交错文本和图像以保留上下文和顺序。

[
  "你好,这是我的照片:

![image|531x401](upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png)",
  image1,
  "这是另一张照片

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

选项 3:剥离 Markdown,附加图像

方法: 完全删除图像 Markdown 语法,在末尾附加实际图像。

[
  "你好,这是我的照片:

这是另一张照片

结束",
  image1,
  image2
]

选项 4:保留描述,简化 Markdown

方法: 剥离 Discourse 特定的格式,但保留图像描述以获取上下文。

[
  "你好,这是我的照片:

这是另一张照片
Sam standing next to a window

结束",
  image1,
  image2
]

选项 5:内嵌描述,内嵌图像

方法: 用内嵌描述替换 Markdown,然后内嵌相应的图像。

[
  "你好,这是我的照片:",
  image1,
  "这是另一张照片
Sam standing next to a window",
  image2,
  "结束"
]

目前我们的实现是(1),部分原因是“遗留”旧模型不允许我们定位图像,另一部分原因是人们经常使用 Discourse 来重新格式化帖子,如果我们剥离上传标记,LLM 会认为我们说了别的话,并且无法重新格式化带有图像的帖子。

此外,LLM 供应商(如 Anthropic)的建议是始终将图像放在最后。这使得 LLM 的解释最简单。

然而,这种方法对于像 Nano Banana: Image editing in Google Gemini gets a major upgrade 这样的 LLM 来说非常麻烦。

当我尝试这样做时,LLM 开始幻觉出上传标记,而不是渲染图像。

回想起来是有道理的。

如果我们告诉 LLM 它刚刚说了:upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png,那么它再次说出类似的话也就不足为奇了。

我对将我们切换到(2)感到矛盾,并且看起来(3)是“回显 LLM 刚刚说过的话,以避免幻觉”的唯一明智方法……所以我们解决这个棘手问题的方案有些混合。

在进行这项工作时,我确实探索了是否可以创建一个更公平的解决方案,其中输出和输入被同等对待,但我认为这不切实际。(我也尝试过在上传描述足够长时保留它们等等)

但目前

(1)用于输入 LLM
(3)用于输出 LLM

长期来看:

(2)用于输入值得探索
并剥离但保留输出的上下文位置也值得探索。


可惜的是,现在没有 LLM 供应商允许你为图像提供额外的元数据。

3 个赞