see-glm:给 ZCode 等 AI 助手装上一双“眼睛“
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 视觉模型,支持单图、多图并行与联合对比,克隆即用。
更多推荐




所有评论(0)