前言¶
在 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「一切皆插件」生态里偏记忆与多模态链路的一类工具。