我们对 AI 上下文中的图像管理有一些内部疑问,因此我想在公开问题中介绍一些注意事项。
问题
今天的 LLM 支持多种模态。所有主要供应商现在都支持将图像作为输入,一些供应商(尤其是谷歌)支持将图像作为输出。
这给 Discourse AI 带来了一个问题:我们如何将“图像”呈现给 LLM。
具体来说,如果我们有这个示例帖子:
你好,这是我的照片:

这是另一张照片

结束
我们如何将其呈现给 LLM:
选项 1:保留 Markdown,附加图像
方法: 将所有文本放在一起,在末尾附加图像。
[
"你好,这是我的照片:

这是另一张照片

结束",
image1,
image2
]
选项 2:保留 Markdown,内嵌图像
方法: 交错文本和图像以保留上下文和顺序。
[
"你好,这是我的照片:
",
image1,
"这是另一张照片
",
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 供应商允许你为图像提供额外的元数据。