Skip to content

Nipi64310/VLM-Text-Image-Layout

Repository files navigation

测试脚本: test.py

需要配置大模型key,以及上传的图片ak sk (上传图片涉及到一些公共storedao,没法开源,需要按照自己使用的自行/ai实现)

原文如下:https://mp.weixin.qq.com/s/TuGaBdzJ1xHVpeUm-grawg

上周是智谱的多模态开源周,从4.6v到Autoglm...

看到官方的博客,第一眼比较吸引我的,不是模型本身,是他们给的一个使用场景 - 图文并排

上传一份 PDF 论文,它能生成一篇图文混排的解读文章,而且效果非常好。图片位置精准,上下文衔接自然,完全不像是机械拼接的。

过去我们想做图文混排,都是预定义一些图片,让多模态大模型生成描述,再让LLM在写文章时结合图片描述,选择合适的图片url。

流程繁琐,效果一般(主要是模型看不到这些图)。

太久没用过多模态大模型了,感觉时代似乎变了~

Z.ai 已经上线了这个能力,所以我逆向了一下原理,复刻了一下,有不少收获,给家人们分享一下。

GLM 4.6V 它是一个多模态原生智能体

我们可以看一下下边的视频。模型会先生成一个带工具槽位的初版,后续会有图片引用。进行调用裁剪工具,捞回来图片,最后完成终稿的撰写。

其实从Z.ai 服务请求日志,也可以看到具体的工具调用信息。

相当于类似一个ReAct Agent,调用工具截图相当于获取到observation,然后进行下一步的Action。

如果想做一个自由度没这么高的话,一个架构就是:

基于这个模式,我复刻了一套代码。结果跟ZAI跑出来的结果基本一致。重点是复刻过程中,我发现了几个非常有意思的点,下一章节详细介绍一下。

跑一篇20页的论文,大概消耗1毛5的样子。如果用量比较多,可以考虑智谱的 GLM Coding Plan,20 元包月起,用量是同价位 Claude Code 的三倍。而且它的视觉 MCP 不是单独的工具,是深度集成在模型能力里的。

三个有意思的能力

模型知道图片的精确位置

这是Glm4.6V 最让我惊讶的能力。模型不仅能理解图片内容,还能输出图片在页面上的坐标,比如前面调用图片裁剪工具,我让模型输出的格式如下:

[页码, [[x1, y1, x2, y2]], "图片标题"]

需要注意的是:模型的输出坐标是千分位坐标(0-999 范围),需要按比例转换成像素坐标。 当然如果用官方mcp tools没这个烦恼。

def thousandth_to_pixel(coord, image_width, image_height):
    """千分位坐标转像素坐标"""
    x1 = int(coord[0] / 1000 * image_width)
    y1 = int(coord[1] / 1000 * image_height)
    x2 = int(coord[2] / 1000 * image_width)
    y2 = int(coord[3] / 1000 * image_height)
    return [x1, y1, x2, y2]

为什么是千分位?因为不同分辨率的图片,像素坐标会变,但千分位坐标是相对的,更具通用性。

一次输入几十张图片

一篇 20 页的 PDF,转成图片后全部塞进去,模型能完整理解,128k确实不是吹的。

这让我想起不久前智谱的另一个工作Glyph:把文本渲染成图片,让视觉 token 承载更多信息。

传统的 token 扩展方式已经走到算力成本的天花板。与其硬扛百万级token的计算压力,不如让 AI看文字,而不是读文字。

所以过去我们头痛的解析、分块等操作,随着多模态模型的变强,似乎迎刃而解了。

可以基于裁剪结果持续迭代

获取到裁剪后的图片之后,如果只是简单的字符串替换,直接正则就够了。

但如果用VLM,在第二轮可以验证裁剪是不是正确,可以调整图片周围的文字,可以优化图文的排版位置。

GLM-4.6V 就是一个原生的 Agent。

最后

多模态时代的 Agent 和纯文本时代完全不一样。

模型不再只是 信息,而是 信息。它知道 Figure 2 在第 4 页的左上角,知道 Table 3 的边界在哪里,知道如何把这些视觉元素编排到文章中。

非常符合GLM4.6V的宣传语: 不止能看,更能执行。

About

基于多模态大模型的图文混排文章生成

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages