dsh-sticker-dict:表情包字典与 GIF 抽帧拼图

前言

在 DeepSeek Harness(DSH)里跑带视觉模型的智能体,表情包和动图很常见。同一套图反复发来时,模型每次都要重新识图,token 和时间都浪费;GIF 若只走第一帧,动作含义往往看不全。社区插件 dsh-sticker-dict(维护者 710765989,分类:记忆)针对这两块:用内容哈希做本地字典缓存识图结论,并把 GIF 均匀抽帧拼成一张联系表,方便配合 read_image 一次看完整段动作。

下面介绍插件定位、能力、安装配置与典型用法。事实以 GitHub 仓库 README 为准;目录页见 SkillHub 插件页(社区目录,与 DeepSeek / 幻方无官方从属关系)。

这是什么

dsh-sticker-dict 是给 DSH 视觉链路用的辅助插件,提供两个可独立开关的工具:

  • sticker_dict:按图片内容的 sha256 维护本地字典。同一张表情再发来时直接返回上次的描述,不必重复识图;支持静态图与 GIF,并可写入「主人批注」修正模型结论。
  • gif_frame_extraction:对 GIF 均匀抽取 N 帧,横向拼成一张 PNG 联系表(contact sheet),返回路径与尺寸信息,便于视觉模型理解完整动作。

两个工具在插件列表「sticker-dict」一行的设置卡片里可分别开关,改完立即生效,无需重启 DSH。

核心功能

表情包字典(sticker_dict)

  • 按内容去重:键为内容 sha256;换文件名或目录仍能识别同一张图。GIF 会结合结构解析出的宽高、帧数等信息一并记录。
  • 同图不重读:gif_frame_extraction 在抽帧前会先查字典;命中则直接返回上次结论(含 cached: true),连解码都可省略。
  • 主人批注:annotate 可为某条记录写入人工说明;与模型自己的 note 分开存储,互不覆盖;之后每次命中都会带上批注。
  • 截图不占坑:超过约 200 万像素的非动图默认视为截图,不写入字典;需要入库时可带 force。
  • 自动淘汰:字典上限 2000 条,超出后淘汰最久未被访问的条目。

sticker_dict 支持的动作包括:lookup(查是否见过)、remember(记入结论)、annotate、forget、list(规模或关键词列表)。

GIF 抽帧拼图(gif_frame_extraction)

  • 从 GIF 均匀抽帧,拼成一张 PNG,返回 { path, width, height, frames, picked },与 read_image 配合使用。
  • 参数:path(必填)、maxFrames、cellPx;省略后帧数与边长走配置(默认 5 帧、每帧边长 140 像素)。

面板与 API

抽帧、字典两个开关通过 /api/dsh-sticker-dict-settings/{describe,mutate} 读写。其他插件还可通过 stickerDict 服务调用抽帧、查字典、记忆、批注等能力(见 README 中的 ctx.stickerDict.* 示例)。

默认字典目录为 ~/.dsh/sticker-dict/dict/(Windows / macOS / Linux 写法一致),每条记录一个 <sha256>.json;可在配置里用 dict.dir 更换路径。

安装与启用

官方安装命令如下。安装后需重启 dsh web,插件列表中会出现 sticker-dict 一行。

dsh plugin add github:710765989/dsh-sticker-dict

依赖主要为 @napi-rs/canvas(预编译原生库,装上即用,无需本地构建环境)。仓库自带 .npmrc 关闭 peer 自动安装,避免 pnpm 沿宿主 peer 链拉取未发布包。运行时要求 Node >=20,DSH >=0.1.7-rc.1(见 package.json)。

若手动接入,可在 profile 的 cordis.patch.yml 中插入:

- insert:
    - id: sticker-dict
      name: dsh-sticker-dict

配置

在插件列表点开 sticker-dict 的配置卡片,或直接编辑 cordis.patch.yml:

- id: sticker-dict
  name: dsh-sticker-dict
  config:
    frames:
      enabled: true      # 抽帧工具总开关
      maxFrames: 5       # 默认抽几帧
      cellPx: 140        # 每帧边长(像素)
    dict:
      enabled: true      # 字典总开关
      dir: ''            # 字典目录,留空用默认 ~/.dsh/sticker-dict/dict
    enabled: true

典型用法

工具参数(摘要)

gif_frame_extraction

参数 类型 说明
path string,必填 GIF 文件路径
maxFrames number 抽几帧,省略用配置(默认 5)
cellPx number 每帧边长,省略用配置(默认 140)

sticker_dict:通过 action 选择 lookup、remember、annotate、forget、list 等(详见 README 工具表)。

服务调用示例

其他插件可在 Cordis 上下文中使用:

ctx.stickerDict.contact(path, { maxFrames: 6, cellPx: 160 })  // 抽帧拼图
ctx.stickerDict.lookup(path)                                   // 查字典(命中会累加 hits)
ctx.stickerDict.remember(path, note, force)                    // 记一条
ctx.stickerDict.annotate(sha, { note, owner })                 // 改批注
ctx.stickerDict.list() / entries(limit, keyword) / forget(path)

字典条目 JSON 形态示例(字段以仓库说明为准):

{ "v": 1, "sha": "…", "note": "…", "owner": "…", "w": 480, "h": 320, "frames": 12, "source": "gif", "at": 1761300000000, "hits": 3 }

适用场景与注意

适合经常在 DSH 里处理 QQ / OneBot 等渠道表情包、梗图、GIF 的智能体或 bot 开发者:重复表情走字典可省识图 token;动图走抽帧拼图比单帧更易让视觉模型理解动作。

使用前请注意:插件以当前 dsh 进程权限 运行,会读写本地字典目录;安装前应自行查看 源码 与 MIT 许可证,确认路径与数据落盘策略符合你的环境。大分辨率静态图默认不入库的设计,是为避免把普通截图撑满字典;需要强制入库时使用 remember 的 force 参数。

结尾

dsh-sticker-dict 把「同图不重复识图」和「GIF 整段动作可视化」拆成两个可开关能力,并支持人工批注修正,属于 DSH「一切皆插件」生态里偏记忆与多模态链路的一类工具。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜