在 DSH(DeepSeek Harness)的插件生态中,Agent 经常需要向用户展示文件或图片。通常的做法是让 Agent 在对话中描述图片内容,或者将图片 URL 提供给用户去浏览器打开,这会导致对话体验割裂。dsh-show-picture 插件解决了这个问题,它为 Agent 提供了一个名为 show_picture 的工具,能直接在聊天流中渲染图片卡片。
插件介绍¶
这是一个 DSH Cordis 插件,作者为 Yaing-Yan。它的核心作用是在 DSH 对话中展示图片,支持本地文件和远程 URL。
核心功能¶
- 新增工具:为模型提供一个名为
show_picture的工具。 - 直接渲染:工具返回的结果会直接显示为图片卡片,而不是纯文本描述。
- 本地文件支持:支持读取本地文件(最大 10 MiB),通过 base64 data URL 传输,无需额外的文件服务器。
- 远程 URL 支持:支持通过
<img>标签直接加载网络图片。 - 架构分离:Host 端注册工具和 HTTP 路由,Client 端注册卡片进行渲染。
安装与启用¶
推荐将插件作为全局静态插件安装,这样每次会话都会自动拥有该工具,且重启后依然保留。
- 进入 DSH 的 web 配置目录(默认为
~/.dsh/profiles/web):
cd "$DSH_HOME/profiles/web"
- 使用 pnpm 加载本地插件包:
pnpm add file:/path/to/dsh-show-picture
- 修改该目录下的
package.json,在dsh.profile.bundles数组中添加"dsh-show-picture"。 - 重启 DSH 应用以应用更改:
dsh --profile web
典型用法¶
Agent 在处理用户请求时,会调用 show_picture 工具。调用时需要传入参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
path |
string | 二选一 | 本地图片文件路径(绝对路径或工作区相对路径),支持 png, jpg, gif, webp, svg, bmp, ico, avif, tif/tiff。 |
url |
string | 二选一 | 图片的 http(s) 地址。 |
alt |
string | 否 | 图片下方的简短说明文字。 |
调用示例:
// 展示本地图表
show_picture({ path: "/workspace/chart.png" })
// 展示远程照片
show_picture({ url: "https://example.com/photo.webp", alt: "a photo" })
工具返回的 JSON 结构通常如下:
{ "ok": true, "kind": "path", "path": "...", "size": 1234, "mime": "image/png", "alt": "..." }
或
{ "ok": false, "error": "..." }
限制与注意事项¶
- 文件大小限制:本地文件超过 10 MiB 时会报错
FS_TOO_LARGE。建议压缩或调整图片大小后再展示。 - MIME 类型检测:仅基于扩展名检测 MIME 类型,不支持嗅探。
- 网络限制:远程 URL 图片必须能在浏览器中正常加载,否则无法显示(受 CSP、网络可用性或鉴权影响)。
- 客户端存活:图片卡片仅在 Client 端处于激活状态且模型调用工具循环正常运行时才渲染。
总结¶
dsh-show-picture 通过将图片渲染能力集成到 DSH 的工具调用流程中,消除了用户查看图片时的跳转操作。如果你需要构建一个能直观展示视觉信息的 Agent,可以参考其 GitHub 仓库进行安装和配置。