作品 · 开源
dsh-design-qa
DeepSeek 写得了代码,却看不见设计稿。这个 DSH 插件把眼睛借给它:图片不进上下文,模型自己组织问题、调视觉工具代看;另一半是一套评测,回答借来的这只眼够不够格当裁判。
它为什么值得做
「能看见」和「可用于判定」是两回事。装上眼睛只花了一小部分时间,剩下的时间都在回答:借来的这只眼,够不够格当裁判。
我为什么做它
我想在 DeepSeek Harness 上做出「产品设计」这项能力:从设计稿出发写实现,再自己判断像不像,不像就修,直到收敛。这个闭环里最要命的一环是判定——而 DeepSeek 是纯文本模型,它写得了代码,却既看不见设计稿,也看不见自己写出来的页面。
于是我做了这个插件:图片不进模型上下文,模型看到一行文字指针,需要什么信息就自己组织问题,调 deepseek_vision 工具,由一个真正的视觉模型(默认 qwen3.8-max,单次判定约 0.037 元)代看、把文字带回来。
提问权为什么交给模型
这是评测逼出来的设计,不是随手的偏好。同一个模型、同一批图,只改问法:开放式的「你自己找差异」难档召回 0/2,改成「各自是多少」走到 2/2。一张图被看到什么细节程度,取决于你问它什么——这也判了「图片一进来就自动描述成文字」那条路的死刑:描述发生在问题诞生之前,注定只能问出成绩最差的那种问题。
所以工具只管代看,「怎么问才可信」的纪律写在 skill 里。顺带一条经常被混淆的账:缓存「看到了什么」是负债,甚至是幻觉的来源;缓存「问了什么、得到什么」才是资产。
为什么敢改 DSH 本体
DSH 对纯文本模型读图是直接拒绝的:图片管道整条是通的,只差一道「选中的模型有没有声明支持图片」的准入检查——管道通着,阀门关着。安装会在本体打三处补丁,而不是注册一个新模型选项,出自两个产品判断:一,用户的直觉是「一个 key 换一个模型」,不是「装一个插件就多一个模型选项」,把能力项混进账号列表是范畴错误;二,这个本体必将被改,我只是把写好没开放的能力提前接上。
我也知道这是短期方案,所以带了备份、一键回滚和每日空跑巡检。DeepSeek 官方开放读图那天,工具会查到调用方自己能看图,自我拒绝并让位,三处补丁一键还原。补丁是耗材,工具和评测是资产。
另一半:这只眼够不够格当裁判
「能看见」不等于「可用于判定」:一个模型可能读得出图上的字,却不主动看、会编、不稳、说不清。所以项目的另一半是一套评测:落地页、仪表盘、列表、表单共 4 组素材,23 处已知缺陷(难 9 / 中 8 / 易 6),四条通过线一一对应上面四种失效,全过才允许进生产判定循环。
评测本身也讲方法:「通过」不等于「验证过」,先证明这次测试有能力失败——评测集常驻一张已知空白图当负对照;二选一的方向题必须跑满 3 次才计分;安装脚本的空跑检查在所有落点都报告「已打过」时直接判失败。原始模型输出入库 eval/runs/ 供逐格复核,还没补上的缺口也在 README 里写得明明白白。
背后的故事
做这套评测的过程里,我有三次以为自己验证了什么,其实什么都没验——跑在空白图上的两轮、被记成能力的单次命中、在已装好的环境里测安装。完整的翻车与修正记录写在博客《借来的眼睛》里。
快速开始
装进 DSH
加插件、配一个百炼 API key、打补丁并重启:
dsh plugin --profile web add dsh-design-qa
cd "${DSH_HOME:-$HOME/.dsh}/profiles/web/node_modules/dsh-design-qa"
export BAILIAN_API_KEY=<your-key>
node install.mjs --route-only
node install.mjs --restart 装好后在 DSH 里粘贴一张设计稿试试。卸载时 node install.mjs --uninstall 一键还原三处补丁。