写了个图片版dialogue插件

插件名是 dialogue-image 。就是图片版dialogue插件。其中问题只能是图片。主要创新点是使用感知哈希 (perceptual hash) 算法计算图片的哈希值。

写这个插件主要的难点是图片被压缩之类的修改之后,md5之类的哈希值也会变,导致被bot认为压缩前后不是同一张图。我搜了搜,发现了个感知哈希算法,专门用来解决这个问题。我代码里调的jimp来使用的这个算法。

感知哈希算法这个算法很妙,比如下面两张图,左边是原图,右边是经过严重压缩的版本,它们的 感知哈希值是完全相同的。所以这样算哈希值的话就不怕图片被压缩了。感知哈希的计算过程性能开销也挺小。
不过这个算法的缺点是对图片的结构性变化非常敏感,例如裁剪图片(即使只裁剪掉一小部分)通常会导致 pHash 完全不同,从而无法匹配。旋转、翻转等操作也可能导致 pHash 变化。
我搜了搜看到有人这么解释的感知哈希算法的大致原理

github链接如下,readme里有详细的介绍。代码基本都是gemini 2.5 pro写的,所以代码可能会有一些奇怪的写法(
测试不太充分,可能还有一些bug,欢迎提issue。

3 个赞