WeKnora
Tencent
Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:jmxsxwyzjdwl/dsh-mmroute
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
English summary — Multimodal router for DeepSeek Harness (DSH). Text-only models (e.g. DeepSeek, GLM) can still handle visual tasks: every image in every step of the agent stream — user uploads, read_image results, MCP tool renders (Figma screenshots, …) — is transcribed into detailed text (verbatim OCR, chart data, visual detail) by a multimodal understander model before the request is dispatched, cached per attachment. Unmarked models are auto-classified by their adapter-declared modalities (overridable per model); image-related request failures self-recover by rerouting through the understander and retrying. Settings page: mark models multimodal/text-only, pick the understander, watch transcription/recovery stats. Works with PNG / JPEG / WebP / GIF.
为 DeepSeek Harness(DSH)里的每一条模型路由做图片模态调度,并且贯穿整个 agent 流程:
这样,DeepSeek、GLM 等纯文本模型也能处理看图问答、截图分析、Figma 渲染审查等视觉任务。
Multimodal router for DeepSeek Harness: text-only models get every image in every step transcribed to detailed text by a multimodal understander before the request is dispatched; image-related request failures auto-recover by rerouting through the understander and retrying. Works with image attachments (PNG / JPEG / WebP / GIF).
agent loop 的每一次模型调用(每个 step:用户首图、read_image 返回、
MCP 工具(如 Figma get_screenshot)中途产生的新渲染图……)
│
├─ ① 准入放宽:resolveModelInfo 遮蔽让「会被转述」的模型通过
│ harness 的图片准入检查(用户上传 / read_image / MCP 图片 alike)
│
├─ ② llm/stream 拦截:按 attachmentId 收集本次请求的全部图片
│ (含 tool-result 嵌套形态),逐张交给理解模型做**全量结构化
│ 转述**(≤12000 字符:图型判定 / 全部文字逐字转录 / 图表数据
│ / 布局 / 颜色 / 异常 / 不确定区域;内容寻址缓存,跨步骤 / 跨
│ 重启有效;当前问题作为侧重参考注入,但完整性优先、绝不省略)
│
└─ ③ 改写后的纯文本请求交给原模型作答 —— 对话完全无感
转述末尾附 [提示] 行:作答模型可调用 vision_relook 工具对
任意已转述图片发起聚焦复看(「指挥与执行」协作)
任何一步漏网(未标记、网关拒图……)导致适配器报图片类错误时:
└─ ④ agent/request-error 自愈:拉理解模型转述 → retry
(每条路由每进程最多自愈 2 次,杜绝重试风暴)
attachmentId + 聚焦问题 + 可选区域),由理解模型逐字精确作答、看不清就明说 —— 两个用户手选的模型形成「指挥与执行」协作。dsh plugin --profile web add dsh-mmroute
本地开发安装(<path> 为本仓库的检出路径):
dsh plugin --profile web add <path>/dsh-mmroute
dsh plugin 是 pnpm 转发器:会把依赖写入 profile 的 package.json,并把声明了 dsh.bundle 的包自动加入 dsh.profile.bundles。安装后重启 dsh web 生效。
或手动加入 profile 的 package.json(路径相对 profile 目录):
{
"dependencies": { "dsh-mmroute": "file:../dsh-mmroute" },
"dsh": { "profile": { "bundles": ["dsh-mmroute"] } }
}
v0.6.0 起设置页只保留理解模型与模态标记两块核心控制;自动路由、报错自愈、历史图摘要等功能始终在后台运行(默认开启),如需调整可编辑
$DSH_HOME/mmroute.json里的autoText/replayDigest字段。
配置持久化在本机 $DSH_HOME/mmroute.json(默认 ~/.dsh/mmroute.json),重启后仍然生效;可在设置页一键清除图片转述缓存。
在「模型模态标记」里做标记时,插件会同步写入 ~/.dsh/settings.yaml 的原生 input 声明:
input: [text, image]input: [text]input 行(重新继承默认)llm-pi-ai:
providers:
glm5-3:
models:
- id: glm-5.3
input: [ text ] # 标记「纯文本」写入
- id: glm-4.6v
input: [ text, image ] # 标记「多模态」写入
写入走官方 settings.mutate 通道:schema 校验、修订号乐观并发(冲突自动重试一次),并触发 pi-ai 适配器热重建路由 —— 无需重启即时生效,重启后声明仍在。范围限定 llm-pi-ai 命名空间下用户已显式声明 models 列表的网关路由(兄弟条目逐字段保持不变);其他适配器(如 llm-deepseek 硬编码模态)仅插件内标记。同步失败不影响插件内路由,结果在设置页脚注与 API 响应中明示。
理解模型可以是任何声明图片输入的 provider —— 包括免费云模型与本地模型。以下片段合并进 $DSH_HOME/settings.yaml 的 llm-pi-ai.providers 段(注意:Web「添加自定义提供方」表单不会写入图片能力元数据,视觉模型请手写 input: [text, image]):
# 智谱 bigmodel.cn —— glm-4.6v-flash 永久免费(大陆直连)
llm-pi-ai:
providers:
zhipu:
api: openai-completions
baseURL: https://open.bigmodel.cn/api/paas/v4
apiKeyEnv: ZAI_API_KEY
models:
- id: glm-4.6v-flash
name: "智谱: GLM-4.6V-Flash (永久免费)"
contextWindow: 131072
maxTokens: 8192
input: [text, image]
Key 写入 ~/.dsh/.credentials.yaml(ZAI_API_KEY: sk-...)或导出同名环境变量,重启 dsh web 后该模型即可在「多模态理解模型」下拉中使用。其他免费渠道:阿里云百炼(新用户每系列 100 万 token/90 天,qwen-vl-plus 等)、硅基流动(Qwen2.5-VL 系列)。本地 Ollama 同样适用:把本地视觉模型配为 pi-ai provider(OpenAI 兼容端点 http://127.0.0.1:11434/v1,声明 input: [text, image])即可完全离线转述。理解模型全量转述对小模型要求不高,免费额度通常足够。
| 场景 | 行为 |
|---|---|
| agent 流程中途出现新图片(工具返回 / MCP 渲染) | 该步请求在发送前被拦截转述,含 tool-result 嵌套形态 |
| 未标记模型 + 自动纯文本路由开启 | 按适配器声明判定:声明图片直发,否则转述 |
| 未标记模型 + 自动纯文本路由关闭 | 完全保持 harness 原生行为(含原生拒绝) |
| 图片类请求失败(UNSUPPORTED_CONTENT / 网关拒图文案) | 自动转入转述路径并 retry;每路由每进程 ≤2 次 |
| 自愈后再次请求 | 命中内存 override,直接转述(重启后失效,可固定为标记) |
| 理解模型指向纯文本标记的模型自身 | 理解调用失败 → 占位文字降级,无递归(WeakSet 放行自有请求) |
| 无任何多模态模型可用 | 占位文字说明如何配置,对话继续;自愈不触发 |
| 理解调用失败 / 空描述 / 中止 / 限流 | 该图降级为占位文字,对话不中断,其余图片不受影响 |
| 文本模型调用 vision_relook | 对已转述图片聚焦核查:逐字精确作答,看不清/未找到明确说明 |
| 并发请求转述同一张图 | 合并为一次理解调用(in-flight 去重) |
| 同一张图在会话历史中再次出现 | 摘要重放(≤1200 字符,可关闭);首次出现仍为全量;同一请求内全量始终在场,摘要不损失信息 |
| 超长描述 | 截断至 12000 字符并注明(完整性优先:足以容纳密集截图的全量逐字转录) |
| 缓存 / 标记数量 | 转述缓存上限 300 条(FIFO 淘汰);标记上限 2000 条 |
| 状态文件损坏 / 字段异常 | 按默认值重新开始,不阻断宿主启动 |
| 会话已有图片时切换到会被转述的模型 | 准入放行(这正是放宽的目的) |
| 会话已有图片时切换到原生拒图模型(自动路由关闭) | harness 原生拒绝(行为不变) |
provider/model id 含 /、引号、Unicode |
精确字符串键 + JSON 编码,无解析歧义 |
| 悬空标记(provider 已移除) | 不显示、不计数、不生效,但保留在状态文件中 |
| 两个浏览器标签页同时写配置 | 每个方法只触碰自己的键,落盘同步无交错 |
| 跨站 / DNS-rebinding 攻击 API | 信任围栏:仅回环或 trustedHosts + 同源标记 + JSON Content-Type + 64KB 上限 |
| 无头配置(无 webServer) | 拦截层照常工作,仅设置页不可用 |
以下对比基于对各项目源码的实际阅读(2026-08)。视觉插件已近十款,其中六项关键能力只有本插件同时具备:
只有 dsh-mmroute 做到的:
llm/stream,对每一次模型调用透明生效:不换路由、不选特殊条目、不装任何 CLI,原图直接发进你正在用的模型组;vision_relook 定点复看:作答模型带着当前问题指挥你手选的理解模型聚焦核查,两个模型形成闭环协作;能力矩阵(✅ 具备 · ◐ 部分 · ❌ 不具备):
| 能力 | 本插件 | modlens | vision-router | sidecar | proxy | provider | tool-vision |
|---|---|---|---|---|---|---|---|
| 原图直发原模型组(零切换) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 覆盖 agent 循环外的调用 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 图片类报错自愈 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| 结构化全量转述 + 防注入 | ✅ | ◐ | ◐ | ◐ | ❌ | ◐ | ❌ |
| 定点复看 / 任务背景感知 | ✅ | ◐ | ❌ | ❌ | ❌ | ❌ | ◐ |
| 历史图摘要重放 | ✅ | ❌ | ◐ | ❌ | ❌ | ❌ | ❌ |
| 图片只发给你配置的模型 | ✅ | ❌ | ❌ | ❌ | ◐ | ◐ | ✅ |
各家的取舍(他们换来了什么):modlens 借本机 CLI 登录态、跨五个 harness 通用;vision-router / sidecar / proxy / provider 用免费端点或直连换“免配置开箱即用”;tool-vision 提供 15 个像素级工具。若你需要的是这些,选他们没问题——本插件不做引擎供给(不内置免费端点、不借登录态),专注把你自己选的两个模型协作到最好,因此开箱前需要先有一个多模态 provider(参见上文「免费与本地理解模型」)。
同装提示:不同插件可共存,但多套视觉桥会互相短路,只启用一条图片通路。
input: [text, image] 声明语义一致)—— 此类报错会被报错自愈捕获并自动降级为转述。vision_relook 复看同样适用。resolveModelInfo 的遮蔽只影响图片准入与模型目录展示,不参与请求路由校验;插件停用后自动恢复原方法。UNSUPPORTED_CONTENT + image 字样,或 message 含 image / multimodal / vision / 视觉 / 图片);无法识别的文案不会触发自愈,但显式「纯文本」标记仍会全程转述。MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: multimodal、vision。