Skip to content

给纯文本模型装上眼睛:GLM-4.6V-Flash MCP + Skill 实践

注意!!!本文档是告诉你原理,实际操作中,你完全可以把你的需求告诉codex,让他帮你去写MCP、Skill,你直接要在https://bigmodel.cn/apikey/platform申请免费的API KEY然后告诉codex就行。文章结尾查看提示词。

起因:DeepSeek 很好,但看不见图片

我平时用 Codex + DeepSeek 写代码。DeepSeek 的文本和代码能力很强,但它是一个纯文本模型:官方 API 不支持直接输入图片。

这带来一个很现实的问题:

  • 截图里的报错信息,我看不到
  • UI 设计稿、流程图、架构图,我看不到
  • 照片、扫描件、表格,我看不到
  • 想 OCR 提取文字,也做不到

于是我在 Codex 里遇到了一个典型场景:我把一张 m.png 发给它,它只能看到文件路径,无法理解图片内容。

需求很明确:让纯文本模型也能“看图”

为什么选择 MCP

要让 DeepSeek 具备视觉能力,并不需要换模型,也不需要训练。更实用的做法是加一层“视觉转译层”:

text
图片

视觉模型(GLM-4.6V-Flash)

文字描述

DeepSeek 继续理解和推理

MCP(Model Context Protocol)正好适合做这件事。它允许外部程序以“工具”的形式接入 Codex:

  • analyze_image:分析图片内容
  • ocr_image:从图片中提取文字

DeepSeek 不需要原生支持视觉,它只需要调用 MCP 工具,然后拿到工具返回的文本结果。

mermaid
flowchart LR
    A[DeepSeek 主模型] -->|调用 MCP 工具| B[glm-vision MCP Server]
    B -->|图片| C[GLM-4.6V-Flash]
    C -->|文字描述| B
    B -->|工具结果| A

封装 MCP:你需要做什么

第一步:准备 API Key

我这里选择智谱开放平台的 glm-4.6v-flash,它是免费的视觉模型。

即使免费,也需要:

  1. 注册智谱开放平台
  2. 创建 API Key
  3. 得到类似 {API Key ID}.{secret} 格式的 Key

我一开始拿到的 Key 复制得不完整,导致所有请求都返回 401。后来重新复制正确格式的 Key,认证立刻通过了。

所以这里有一个容易被忽略的点:Key 看起来再像,也要确保完整、无空格、来自正确的平台。

第二步:编写 MCP Server

核心代码很简单,本质上是一个本地 Python 服务:

python
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("glm-vision")

@mcp.tool()
def analyze_image(image: str, prompt: str = "请描述这张图片") -> str:
    # 将本地图片转为 base64 data URL
    # 调用智谱 GLM-4.6V-Flash
    # 返回文字结果
    return result

@mcp.tool()
def ocr_image(image: str, language: str = "zh") -> str:
    # 提取图片中的文字
    return result

关键实现细节:

  1. 本地图片转成 base64 data URL
  2. 远程 URL 直接传给 GLM
  3. 智谱 v4 接口使用 JWT 鉴权,不是简单地把 Key 放进 Bearer
  4. 支持国内 open.bigmodel.cn 和国际 api.z.ai 两套端点
  5. 免费模型容易 429,内置自动重试

第三步:注册到 Codex

全局配置写在 ~/.codex/config.toml

toml
[mcp_servers.glm-vision]
command = "python"
args = ["C:/Users/90779/.codex/mcp/glm-vision-mcp/server.py"]

重启 Codex 后,MCP 工具就可以被模型调用了。

有了 MCP,为什么还需要 Skill?

MCP 只是提供了“能力”,但没有解决“什么时候用”的问题。

实测发现,如果只配置 MCP,我每次都要明确说:

用 analyze_image 分析这张图片

这很反人类。

我想要的是:

帮我看一下这张图

图里报了什么错?

把截图里的文字提取出来

然后模型自动决定调用哪个工具。

这正是 Skill 要解决的问题。

MCP 和 Skill 的分工

text
MCP:提供工具能力
Skill:告诉模型什么时候用、怎么用、用哪个

用一句话概括:

MCP 是“手”,Skill 是“操作手册”和“自动触发开关”。

我封装了一个 glm-vision-assist Skill:

  • 用户提到图片、截图、UI、图表、照片 → 自动触发
  • 需要描述/问答 → 自动调用 analyze_image
  • 需要 OCR/提取文字 → 自动调用 ocr_image
  • 中文路径乱码 → 自动复制到 ASCII 路径再处理
  • 免费模型 429 限流 → 等待重试并提示用户

最终效果

现在我可以直接说:

text
帮我分析一下 D:/桌面/tmp/m.png

或者:

text
这张截图里的报错是什么意思?

模型会经历完整链路:

text
自然语言

Skill 自动触发

调用 MCP analyze_image / ocr_image

GLM-4.6V-Flash 识别图片

文字结果交给 DeepSeek

输出最终回答

经验总结

1. 纯文本模型 + 视觉转译层是可行的

不需要换模型,不需要训练,只需要在模型外面加一层“视觉代理”。

2. MCP 负责能力,Skill 负责体验

MCP 是基础能力,Skill 是让它真正好用的关键。没有 Skill,用户永远要手动指定工具。

3. 免费模型要接受限流

glm-4.6v-flash 免费,但访问量大时会返回 429。对个人使用够用,对生产环境建议换付费模型:

text
glm-4.6v-flashx
glm-4.6v

4. API Key 安全

Key 应保存在 .env 或环境变量中,不要写进代码,不要提交到 Git。

5. 改配置后记得重启

MCP 和 Skill 都是全局配置,修改后需要重启 Codex 或新开会话才能生效。

结语

这次实践让我对 MCP 和 Skill 的分工有了更清晰的认知:

  • MCP 解决“能不能做”
  • Skill 解决“要不要自动做、怎么做”

两者结合,才是一个真正好用的 AI 工作流。

提示词

1、目前我的大模型deepseek不支持多模态(读图片的能力),请帮我用glm-4.6v-flash全局封装一个MCP,这是我的API Key:xxx(填写你在https://bigmodel.cn/apikey/platform申请的key)
2、我每次都需要说明使用MCP去读取太麻烦了,帮我封装一个skill,我直接用skill或者能通过我对话的语义自动去调用MCP

Released under the MIT License.