返回目录
消息通讯 渠道适配

dsh-expression

yyh-001/dsh-expression

DeepSeek Harness 的表情包插件——找得到、发得出、学得会

Stars
5
Forks
2
Issues
0
更新
1 天前

PROJECT TOPICS

项目标签

INSTALL REFERENCE

安装参考

未验证
dsh plugin --profile web add github:yyh-001/dsh-expression

该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。

PROJECT README

README

dsh-expression — 找得到、发得出

表情包插件 dsh-expression — 找得到、发得出、学得会

MIT dsh-plugin DeepSeek Harness zero third-party deps awesome · DSH plugin


dsh-expression 是 DeepSeek Harness 的表情包插件——找得到、发得出、学得会:

  • 纯文本也能斗图:界面显示表情图片,模型收到的是 [表情: 描述],无需图片输入能力
  • AI 自动学图:用户说「入库」时,learn_meme 收录最近一张用户附件(不必填附件 id),自动识别分类/描述
  • 情绪主动发图:先选情绪桶,系统随机抽若干张 caption,模型挑一张贴进回复
  • 像 QQ/微信 一样发图:输入框 😊 悬浮面板点选表情直接发出
  • 零第三方依赖:仅 node:sqlite,装完即用

交流 / 反馈:QQ 群 993579665点击加入


安装

已发布到 npmdsh-expression@0.1.26),一行装进任意 DSH profile(如 ~/.dsh/profiles/web/):

dsh plugin --profile web add dsh-expression
# 等价于:
pnpm add dsh-expression

或从 GitHub / 本地直接装:

pnpm add github:yyh-001/dsh-expression   # 或
pnpm add file:/path/to/dsh-expression

注意:pnpm 有「新包安全期」(默认 24h),刚发布的版本会被静默回落到旧版;急用可在 pnpm-workspace.yamlminimumReleaseAgeExclude 里加上版本号。

配置

默认内置图库(memes/official-001),开箱即用,无需任何配置

图库目录在设置页「图库目录」里随时切换(浏览选择或输入路径,保存即生效,无需重启)——选择空目录会自动初始化成新图库,选择目录不存在时自动创建。设置存在 ~/.dsh/dsh-expression.json,升级插件不丢。

装完即用

用户: 发个无语的表情包
模型: send_meme tag=sad → 随机几张 caption → 把 [表情: …] 贴进回复
前端: 按描述配图,对话里看起来就是表情

输入框左侧点 😊(微信同款笑脸)直接选图一键发出,无需让模型代劳。

模型根据情绪主动发表情包

工具

工具 作用
send_meme 按情绪随机抽候选;Web 模式把 [表情: 描述] 写进回复,前端配图
learn_meme 学图:用户说「入库」即可(默认最近一张用户附件);也可传 attachmentId / imageUrl

发图格式(默认)

界面显示表情图片,模型只读写文字 token——不触发 dsh 的图片准入检查:

  • 模型和悬浮窗都发 [表情: 描述](不要带网址)
  • 前端只在对话气泡里按 caption 配图(Think / 轨迹 / 工具卡保持纯文字)
  • 引号差异(“” / "")会折叠后再匹配
  • 直接上传的图片仍是附件,原样进会话;学图走 learn_meme

界面

设置页「表情包」面板(已美化):

  • 图库目录:浏览选择/输入路径,保存即生效(空目录自动初始化)
  • 导出/导入图库:打包成 ZIP 分享给别人,导入别人的包一键切换
  • 上传弹窗:选图预览 + 分类下拉(选择/新建/删除分类)+ 描述 + 关键词
  • 编辑弹窗:同款分类下拉,改分类/描述/关键词
  • 分类中文显示:下拉与卡片显示「生气 (angry)」式中文
  • 分类筛选即时生效

设置页表情包管理面板

输入框 😊 一键发表情包:点开面板 → 搜索 / 浏览缩略图 → 点一张直接发出。

输入框一键发表情包

它做什么

能力 说明
按情绪抽图 六个情绪桶:happy / angry / sad / shy / confused / daily;随机抽 N 张 caption 给模型挑
自动学图 learn_meme 默认收录最近一张用户附件,也可传 URL;识图需当前模型支持图片输入
文字 token 发图 [表情: 描述] → 前端配图;只渲染对话气泡
输入框一键发图 会话输入框左侧 😊 按钮 → 悬浮面板选图 → 一点即发
情绪主动发图 气氛对了就主动甩图;发完短接,让图自己说话
管理 API 上传 / 编辑 / 删除 / 删除分类,全部在设置页完成,数据持久
图库目录切换 设置页浏览选择图库目录,保存即时生效,空目录自动初始化
导出 / 导入 图库一键打包 ZIP 分享,导入别人的包自动切换(零依赖实现)

日常命令(模型视角)

send_meme tag=sad limit=8          # 难过桶随机 8 张,挑一行 [表情: …] 贴进回复
send_meme tag=happy                # 开心/卖萌
learn_meme                         # 收录最近一张用户图(不必填 id)
learn_meme imageUrl="https://…"    # 收录任意图片 URL

情绪字典:happy 开心(卖萌/可爱/喜欢)/ angry 生气 / sad 难过(无语/求饶)/ shy 害羞 / confused 困惑惊讶 / daily 日常(睡觉/上班/早上好)。不满意再 search 同一 tag 换一批。

给模型的三条铁律

完整约定见 send_meme 工具描述。

  1. 把候选里的 [表情: 描述] 整段原样写进回复,不要加网址、不要改成 markdown 图片
  2. 没命中就换情绪或回文字,别硬发
  3. 发完保持简短,让图自己说话——不复述、不描述图的内容

图库来源

内置默认图库(id: official-001,名「官方表情包1号」)来自 Astrbot mememanager 官方初始表情包

  • 上游仓库:anka-afk/astrbot-meme-pack-official-01main 分支),维护者 anka-afk
  • 构成:index.db(SQLite 索引,含每张 caption/关键词)+ manifest.json(分类说明 + 来源标注)+ memes/<tag>/ 图片 + previews/
  • ⚠️ 上游未提供 LICENSE:这套图缺乏显式的再分发许可。随插件打包作为个人默认库使用没问题;如需公开对外分发,请保留 manifest.json 中的上游来源标注。

接到你的 Agent

组件 说明
dsh-expression 本插件:MemesStore(情绪抽图)+ send_meme(发送)+ learn_meme(学图)+ 管理 API
dsh-companion 人设 + Hermes 记忆 + 消息通道;提供发图服务
图库 内置默认图库 memes/official-001/(设置页可切换目录/导入分享包),源自 astrbot-meme-pack-official-01
dsh-expression/
  index.js          插件入口:memeRoot 配置 + 管理 API + learn_meme/识图
  memes.js          MemesStore:SQLite 索引 + 情绪桶随机抽图 + 路径安全
  client.js         前端:设置页面板(上传/编辑/删除) + 😊 悬浮窗 + [表情: 描述] 配图
  cordis.patch.yml  bundle patch(纯 insert,热挂载免重启)
  memes/
    official-001/   内置默认图库(index.db + manifest.json + memes/<tag>/)
  package.json      name / inject / peer deps
  README.md
  LICENSE

已知限制

  • learn_meme 自动识图依赖当前默认模型支持图片输入(不支持时可手动指定 tag/caption);
  • 磁盘上仍是细 tag(angry/baka/…),模型只认六个情绪桶;caption 对不齐时前端会折叠引号后再配图。

License

MIT

CLASSIFICATION EVIDENCE

分类依据

项目类型渠道适配
功能分类消息通讯
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: qq-bot、semantic-search。