我一个朋友上周在群里发了一张截图------产线报错日志,问"有没有人见过这个错?"
我正好刚接上 Vision API,顺手把截图丢进去,30 秒后 AI 给出了错误原因、涉及的文件名、甚至定位到了第几行。群里安静了 5 秒然后炸了:"这 TM 是把图片丢给 AI 读?"
对,就是。而且一分钱没花------用的免费额度。
多模态模型是什么
一句话:能同时理解文字和图片的 AI。
GPT-4V、Claude 3.5 Sonnet、DeepSeek V4 Pro 都支持。你把一张截图、照片、图表丢给它,它像看懂了似的给你分析。
这不是魔法。本质上是在文本模型的基础上,加了一个视觉编码器------把图片切成小块,每个块变成一个向量,和文本混在一起输入 LLM。
今天我们直接上手测,不讲原理讲实战。
前置准备
DeepSeek V4 Pro 支持 Vision API,用 Anthropic 兼容接口调。和文本接口几乎一样,只是 message 里可以夹带图片:
go
package main
import (
"bytes"
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"os"
)
const baseURL = "https://api.deepseek.com/anthropic"
type ImageSource struct {
Type string `json:"type"`
MediaType string `json:"media_type"`
Data string `json:"data"`
}
type ContentBlock struct {
Type string `json:"type"`
Text string `json:"text,omitempty"`
Source *ImageSource `json:"source,omitempty"`
}
type Message struct {
Role string `json:"role"`
Content []ContentBlock `json:"content"`
}
type Request struct {
Model string `json:"model"`
MaxTokens int `json:"max_tokens"`
Temperature float64 `json:"temperature"`
Messages []Message `json:"messages"`
}
func askWithImage(imagePath, prompt string) (string, error) {
data, err := os.ReadFile(imagePath)
if err != nil {
return "", fmt.Errorf("读取图片失败: %w", err)
}
b64 := base64.StdEncoding.EncodeToString(data)
req := Request{
Model: "deepseek-v4-pro",
MaxTokens: 800,
Temperature: 0.1,
Messages: []Message{
{
Role: "user",
Content: []ContentBlock{
{
Type: "image",
Source: &ImageSource{
Type: "base64",
MediaType: "image/png",
Data: b64,
},
},
{
Type: "text",
Text: prompt,
},
},
},
},
}
body, _ := json.Marshal(req)
httpReq, _ := http.NewRequest("POST", baseURL+"/v1/messages", bytes.NewReader(body))
httpReq.Header.Set("x-api-key", os.Getenv("DEEPSEEK_API_KEY"))
httpReq.Header.Set("anthropic-version", "2023-06-01")
httpReq.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(httpReq)
if err != nil {
return "", err
}
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
if content, ok := result["content"].([]interface{}); ok && len(content) > 0 {
if text, ok := content[0].(map[string]interface{})["text"].(string); ok {
return text, nil
}
}
return "", fmt.Errorf("无法解析响应")
}
实测一:OCR ------ 从截图里提取文字
我把一段 Go 错误日志截了图丢进去:
Prompt: 「提取这张截图中的所有文本,保持原格式。」
结果:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x0 pc=0x1234567]
goroutine 1 [running]:
main.processOrder(0x0, 0x0)
/app/internal/handler/order.go:42 +0x78
main.main()
/app/cmd/server/main.go:27 +0x3a
一个字不差。连缩进都保持了。比我手动抄快了 100 倍,而且不会抄错。
评分: 准确率 99%,偶有标点遗漏。比 tesseract OCR 强在不需要预处理,带背景的截图也能读。
实测二:图表分析 ------ 读财务报表截图
我从某上市公司年报截了一张营收趋势图:
Prompt: 「分析这张图表的数据趋势。如果有具体数值,请逐一列出。」
结果:
这是一张营收趋势折线图。数据如下:
2021年: 约 1250 亿
2022年: 约 1480 亿(同比增长 18.4%)
2023年: 约 1320 亿(同比下降 10.8%)
2024年: 约 1560 亿(同比增长 18.2%)
趋势分析:
- 整体呈增长趋势,但 2023 年有明显下滑
- 2024 年恢复并超过前期高点
- 4 年复合增长率约 7.6%
数值有 5% 以内的误差,但趋势判断完全正确。关键是------它不只是读数字,还算了增长率、给了分析。
评分: 数值准确率 90-95%,趋势分析 100%。适合快速了解图表含义,不适合精确审计。
实测三:UI 审查 ------ 找设计问题
我截了一张公司后台管理的列表页:
Prompt: 「你是 UI 评审专家。审查这个界面,找设计问题。」
结果:
发现以下问题:
1. 排版问题:
- 表格列宽不均匀,"操作"列过宽
- "创建时间"列显示不完整,内容被截断
2. 交互问题:
- "删除"按钮仅靠文字区分,无二次确认图标或颜色区分
- 分页器缺少"跳转到第X页"的输入框
3. 信息层级:
- 搜索框和筛选条件未做视觉分组
- 批量操作按钮位置不显眼
4. 可访问性:
- 表格缺少斑马纹,大屏下难以追踪行
这比我找一个设计师来审查快了 N 倍------虽然不能替代专业设计评审,但作为第一轮自查够了。
评分: 能发现 70% 的通用问题。专业领域(如 iOS/Android 规范差异)准确率下降。
实测四:照片理解 ------ 识别环境信息
我拍了一张机房的设备照片:
Prompt: 「描述这张照片里有什么,尽可能详细。」
结果:
照片显示一个服务器机柜,包含:
1. 机柜顶部: 一台 Cisco Catalyst 2960-X 交换机
2. 中部: 3 台 Dell PowerEdge R740 服务器,从上到下排列
- 最上方那台硬盘指示灯(琥珀色)亮着,表示有硬盘故障
3. 底部: 1 台 UPS 不间断电源,显示面板读数 87%
4. 线缆管理:蓝色网线较多,部分未绑扎整齐
它识别出了具体型号、指示灯状态、UPS 读数。最有用的是「硬盘指示灯琥珀色」------这比我爬梯子去看快多了。
评分: 物体识别 95%+,型号识别 80%(知名品牌更准)。场景理解能力超出预期。
实测五:代码截图转文本 ------ 拯救你的手
朋友用手机拍了一张他显示器上的 SQL 截图,问我「这段 SQL 怎么优化」。
我不想一行行手打。直接丢给 Vision API:
Prompt: 「提取这张图片中的 SQL 代码,不要加任何解释。」
结果: 一字不差地把 30 行 SQL 变成可复制的文本------包括中文注释。
这是我最常用的场景。尤其是接别人的代码截图,不用手打。
五个场景总结
| 场景 | 准确率 | 实际价值 | 一句话 |
|---|---|---|---|
| OCR 文字提取 | 99% | ⭐⭐⭐⭐⭐ | 截图一键变文本 |
| 图表数据分析 | 90-95% | ⭐⭐⭐⭐ | 不影响趋势判断 |
| UI 设计审查 | 70% | ⭐⭐⭐ | 第一轮自查够用 |
| 照片场景理解 | 85-95% | ⭐⭐⭐⭐ | 出乎意料地好 |
| 代码截图转文本 | 98% | ⭐⭐⭐⭐⭐ | 太实用了 |
多模态现在还不能做什么
实测中我也踩了坑:
- 数数不准。 一张图里有 12 个人,AI 说 8 个。视觉模型的计数能力很弱。
- 读手写体翻车。 潦草的手写中文,准确率掉到 50% 以下。
- 空间关系判断差。 「A 在 B 的左边还是右边」这类问题经常出错。
- 伪造的图片看不穿。 很难判断图片是不是 AI 生成的。
我的建议
多模态不是"图灵测试通过啦"这么玄乎。它就是一个新工具------和 grep、awk、curl 一样,知道它能做什么、不能做什么,你就知道什么时候掏出来用。
当前最稳的三个场景:OCR、代码截图转文本、照片场景描述。先吃透这三个,够用了。
下一篇我把自己在用的封面图生成流程全公开------从 Prompt 到成品,每一步。