see-glm:给 ZCode 等 AI 助手装上一双"眼睛"

一个为 ZCode 等 AI Agent 打造的视觉桥接 Skill:零依赖、跨平台,让不支持图片输入的模型也能"看懂"图片。

起因:模型看不见,问题很常见

日常用 ZCode 这类 AI agent接ds时,有个很常见的痛点:底层的很多模型不支持图片输入。截图里的报错、UI 设计稿、流程图、游戏截图……文字模型统统"看不见"。每次遇到带图的问题,只能人工复述、手动转述,效率极低。

试过把图片转成 ASCII 艺术、用 OCR 提取文字,效果都差强人意——报错能提出来,但"这张图整体是什么氛围""两个界面的差异在哪"这种问题,OCR 完全无能为力。

什么是 Skill:ZCode 等 Agent 的"技能插件"

现在的主流 Agent 框架(ZCode、Claude Code 等)都有一种扩展机制——Skill:在 skill 目录里放一个 SKILL.md,声明触发条件和用法,AI 助手看到匹配的请求就会自动加载并执行。

see-glm 正是为这种机制设计的:它首先是一个 Agent Skill,命令行工具只是它的执行内核。

适配的关键在于一套"协议":

  • 触发条件:用户消息里出现图片文件路径(.png/.jpg/.jpeg/.gif/.webp/.bmp),或"查看/识别/分析图片"等意图时,Skill 自动触发;
  • 路径解析:SKILL.md 中用 $SEE_DIR 占位符,Agent 执行时自行解析为 Skill 根目录的绝对路径,安装到哪都能跑;
  • 结果回传:脚本 stdout 只输出一行 output_path=...,Agent 直接读取这个 Markdown 文件,把视觉模型的分析带回会话。

对用户而言,体验是"无缝"的:丢一张图片路径给 ZCode,模型自己意识到自己看不见,然后自己去借了一双眼睛。

桥接思路:一座桥,而不是一个模型

不支持视觉的模型
      │  命中 SKILL.md 触发条件后调用
      ▼
see.py ──base64 原图──▶ GLM-4.1V API ──▶ 视觉理解结果
      ◀─────────────────────────────────┘
      结果写回 Markdown 文件,Agent 直接读取

视觉模型选的是智谱的 GLM-4.1V-Thinking-Flash——思维链能力强、性价比高,API Key 免费就能申请。设计原则:零第三方依赖(只用 Python 3 标准库,克隆即用)、跨平台(Windows / macOS / Linux)、安全(API Key 存在用户私有目录,绝不进仓库)。

安装与配置

1. 克隆仓库

git clone https://github.com/w-zjj/see-glm.git
cd see-glm

2. 配置 API Key(首次必做)

智谱 API Key 在 open.bigmodel.cn 免费申请,格式为 id.secret:

# 交互式引导配置
python3 scripts/onboard.py

# 查看配置状态
python3 scripts/onboard.py --status

Key 会写入用户私有目录(Windows 为 %APPDATA%\see-glm\config.env,macOS/Linux 为 ~/.config/see-glm/config.env),不会进仓库。

3. 安装为 ZCode Skill

# Windows(用户级 skill 目录)
mkdir -p ~/.zcode/skills
cp -r see-glm ~/.zcode/skills/

# macOS / Linux 同理:复制到 ~/.zcode/skills/ 即可

装好后在 ZCode 里直接发图片路径就能触发,无需任何额外配置。仓库还带了 agents/openai.yaml,可适配其他支持 Agent 框架的客户端。

使用

方式一:在 ZCode 对话中直接使用(推荐)

把图片路径发给 ZCode 即可,Skill 会自动触发:

帮我看看这张图:D:\screenshots\报错.png

Agent 会自行调用 see.py 分析,然后把视觉模型的完整描述带回对话——你不需要记任何命令。

方式二:命令行手动使用

# 单图分析
python3 scripts/see.py screenshot.png

# 带自定义问题(原样发送给视觉模型)
python3 scripts/see.py error.png --task "请提取截图中的报错信息"

# 多图并行分析(默认 3 并发,可 -j 调整)
python3 scripts/see.py a.png b.png c.png

# 多图联合理解:所有图进同一次请求,适合比较差异
python3 scripts/see.py --together before.png after.png --task "比较两张图的差异"

# 分析网络图片 / 指定输出文件 / 临时换模型
python3 scripts/see.py https://example.com/photo.jpg
python3 scripts/see.py image.png -o result.md
python3 scripts/see.py image.png --model glm-4v-plus

成功后 stdout 只输出一行 output_path=...,结果 Markdown 包含模型、模式、时间戳和完整分析内容。

配置覆盖(可选)

优先级:环境变量 > 项目级 .env.local > 用户配置文件。

export GLM_BASE_URL="https://your-endpoint/v4"   # 对接其他 OpenAI 兼容端点
export GLM_MODEL="your-vision-model"             # 换模型
export GLM_MAX_TOKENS=8192                       # 单次回复最大 token 数

踩坑记录:thinking 模型的"小脾气"

1. 回复里混入特殊 token。 Thinking 模型的返回里偶尔会出现 <|begin_of_box|>red<|end_of_box|> 这种内置 token,直接写进结果文件很影响阅读。解决方式是返回前用正则统一过滤。

2. 网络异常裸奔。 最初只捕获了 HTTPError,DNS 失败、连接超时这类 URLError 会直接抛 Python traceback。补上捕获后统一转成友好报错:“网络请求失败: …”。

3. max_tokens 偏小。 思维链模型"想得多",4096 的默认值偶尔会把回答截断。默认提到 8192,同时支持 GLM_MAX_TOKENS 按需调整。

最后

项目已开源。如果你也在用 ZCode / Claude Code 这类 Agent,且为"模型看不见图片"发愁——把 see-glm 装进 skill 目录,你的 Agent 就多了一双眼睛。

让不支持图片的 AI 也能看懂图片:零依赖、跨平台,通过 GLM-4.1V 视觉模型,支持单图、多图并行与联合对比,克隆即用。


项目地址:https://github.com/w-zjj/see-glm

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐