AI 基础 | | 约 25 分钟 | 9,990 字

多模态 AI 入门:文本之外的世界

了解多模态模型如何处理图像、音频、视频,以及开发者可以怎么用

什么是多模态 AI

我们之前聊的 LLM 主要处理文本。但人类感知世界不只靠文字——我们看图片、听声音、看视频。多模态 AI (Multimodal AI) 就是能同时理解和处理多种信息形式的 AI 系统。

单模态:
  文本 → 模型 → 文本

多模态:
  文本 ─┐
  图像 ─┤→ 模型 → 文本/图像/音频
  音频 ─┘

2023 年 GPT-4V 的发布是一个分水岭。从那以后,主流 LLM 都在快速拥抱多模态能力。


模态的种类

模态输入示例输出示例代表模型
文本 (Text)自然语言、代码回答、翻译、代码GPT-4o, Claude
图像 (Vision)照片、截图、图表图片描述、分析GPT-4o, Claude, Gemini
音频 (Audio)语音、音乐转录、翻译Whisper, GPT-4o
视频 (Video)视频片段内容理解、摘要Gemini, GPT-4o
3D/空间点云、3D 模型场景理解研究阶段

当前主流模型的多模态能力

模型文本图像输入图像生成音频输入音频输出视频
GPT-4o
Claude Sonnet/Opus
Gemini 2.0
Llama 3.2 Vision

视觉模型:AI 如何”看”图片

原理简述

视觉模型处理图片的基本流程:

图片

分割成小块 (Patch),通常 14×14 或 16×16 像素

每个 Patch 转换为一个向量 (类似文本的 Token)

通过 Vision Encoder (通常是 ViT) 提取视觉特征

视觉特征 + 文本 Token 一起送入 LLM

LLM 生成回答
一张 224×224 的图片:
  → 分成 16×16 的 Patch
  → 得到 (224/16)² = 196 个 Patch
  → 每个 Patch 变成一个"视觉 Token"
  → 加上文本 Token 一起处理

这就是为什么图片会消耗大量 Token——一张高分辨率图片可能等于几千个 Token。

Vision Transformer (ViT)

ViT 是目前视觉模型的基础架构。它把 Transformer 的思路从文本搬到了图像:

文本 Transformer:  词 → Token → Embedding → Transformer → 输出
视觉 Transformer:  图片 → Patch → Embedding → Transformer → 输出

核心洞察:图片的 Patch 就像句子中的词,可以用同样的注意力机制来处理。


实战:使用视觉 API

Claude Vision

import anthropic
import base64

client = anthropic.Anthropic()

# 方式 1: 使用 URL
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "url",
                        "url": "https://example.com/chart.png"
                    }
                },
                {
                    "type": "text",
                    "text": "请分析这张图表,总结关键数据点"
                }
            ]
        }
    ]
)

print(response.content[0].text)

# 方式 2: 使用 Base64
with open("screenshot.png", "rb") as f:
    image_data = base64.standard_b64encode(f.read()).decode("utf-8")

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/png",
                        "data": image_data
                    }
                },
                {
                    "type": "text",
                    "text": "这个 UI 截图有什么可以改进的地方?"
                }
            ]
        }
    ]
)

OpenAI Vision

from openai import OpenAI

client = OpenAI()

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "这张图片里有什么?"
                },
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://example.com/photo.jpg",
                        "detail": "high"  # low / high / auto
                    }
                }
            ]
        }
    ]
)

print(response.choices[0].message.content)

图片 Token 消耗

图片的 Token 消耗取决于分辨率和 detail 设置:

设置Token 消耗适合场景
low (512×512)~85 tokens快速识别、简单分类
high (最大 2048×2048)~765-1105 tokens详细分析、OCR、图表
auto模型自动选择一般场景

音频模型:AI 如何”听”声音

语音识别 (Speech-to-Text)

把语音转换为文字。OpenAI 的 Whisper 是目前最流行的开源方案。

from openai import OpenAI

client = OpenAI()

# 使用 Whisper API
with open("meeting_recording.mp3", "rb") as audio_file:
    transcript = client.audio.transcriptions.create(
        model="whisper-1",
        file=audio_file,
        language="zh",  # 指定语言可以提高准确率
        response_format="verbose_json",  # 包含时间戳
    )

print(transcript.text)

# 带时间戳的输出
for segment in transcript.segments:
    start = segment["start"]
    end = segment["end"]
    text = segment["text"]
    print(f"[{start:.1f}s - {end:.1f}s] {text}")

语音合成 (Text-to-Speech)

把文字转换为语音。

from openai import OpenAI

client = OpenAI()

response = client.audio.speech.create(
    model="tts-1",       # tts-1 (快) 或 tts-1-hd (高质量)
    voice="alloy",       # alloy, echo, fable, onyx, nova, shimmer
    input="你好,欢迎来到 AI 学习博客!今天我们来聊聊多模态 AI。"
)

# 保存为文件
response.stream_to_file("output.mp3")

实时语音对话

GPT-4o 支持原生的语音输入输出,不需要先转文字再处理:

传统流程: 语音 → STT → 文本 → LLM → 文本 → TTS → 语音
GPT-4o:   语音 → LLM → 语音(端到端,更自然)

这意味着模型能理解语气、情感、停顿等非文字信息,回复也更自然。


视频理解

视频本质上是”图片序列 + 音频”。目前的处理方式主要有两种:

1. 抽帧分析

# 从视频中抽取关键帧,逐帧分析
import cv2
import base64

def extract_frames(video_path, interval_seconds=5):
    """每隔 N 秒抽取一帧"""
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)
    frames = []

    frame_count = 0
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break

        if frame_count % int(fps * interval_seconds) == 0:
            _, buffer = cv2.imencode('.jpg', frame)
            base64_frame = base64.b64encode(buffer).decode('utf-8')
            frames.append(base64_frame)

        frame_count += 1

    cap.release()
    return frames

# 抽取帧后发送给视觉模型分析
frames = extract_frames("demo_video.mp4", interval_seconds=10)

# 把多帧图片发送给 Claude 或 GPT-4o
messages = [
    {
        "role": "user",
        "content": [
            {"type": "text", "text": "这些是一个视频的关键帧,请描述视频内容:"},
            *[
                {
                    "type": "image",
                    "source": {
                        "type": "base64",
                        "media_type": "image/jpeg",
                        "data": frame
                    }
                }
                for frame in frames[:10]  # 限制帧数,控制 Token 消耗
            ]
        ]
    }
]

2. 原生视频理解

Gemini 支持直接上传视频文件进行分析:

import google.generativeai as genai

model = genai.GenerativeModel("gemini-2.0-flash")

# 上传视频
video_file = genai.upload_file("demo_video.mp4")

# 分析视频
response = model.generate_content([
    video_file,
    "请总结这个视频的主要内容,列出关键时间点"
])

print(response.text)

开发者的实用场景

1. 文档 OCR 与理解

# 不只是 OCR,还能理解文档内容
response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=2048,
    messages=[{
        "role": "user",
        "content": [
            {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": invoice_image}},
            {"type": "text", "text": "请提取这张发票的关键信息,以 JSON 格式返回:发票号、日期、金额、供应商名称"}
        ]
    }]
)

# 输出:
# {
#   "invoice_number": "INV-2026-0042",
#   "date": "2026-03-10",
#   "amount": 15800.00,
#   "vendor": "某某科技有限公司"
# }

2. UI 截图分析

# 让 AI 审查 UI 设计
prompt = """分析这个 UI 截图,从以下角度给出建议:
1. 布局合理性
2. 色彩搭配
3. 可访问性 (Accessibility)
4. 用户体验改进点

请具体指出问题位置和改进方案。"""

3. 图表数据提取

# 从图表中提取数据
prompt = """这是一张柱状图,请:
1. 描述图表展示的内容
2. 提取所有数据点
3. 以 CSV 格式输出数据"""

4. 代码截图转代码

# 把代码截图转换为可编辑的代码
prompt = "请把这张截图中的代码完整转录出来,保持原始格式和缩进。"

5. 会议录音摘要

# 转录 + 摘要一步到位
transcript = client.audio.transcriptions.create(
    model="whisper-1",
    file=open("meeting.mp3", "rb")
)

summary = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个会议记录助手,请提取关键决策和待办事项。"},
        {"role": "user", "content": f"以下是会议录音的转录文本:\n\n{transcript.text}"}
    ]
)

6. 产品图片分析

# 电商场景:自动生成产品描述
prompt = """看这张产品图片,请生成:
1. 产品标题(20 字以内)
2. 产品描述(100 字)
3. 5 个关键卖点
4. 建议的搜索关键词"""

图像生成

除了理解图像,AI 也能生成图像。

主流图像生成模型

模型提供方特点
DALL-E 3OpenAIAPI 集成方便,理解复杂 prompt
MidjourneyMidjourney艺术质量高,社区活跃
Stable DiffusionStability AI开源,可本地部署
FluxBlack Forest Labs开源新秀,质量优秀

使用 DALL-E 3

from openai import OpenAI

client = OpenAI()

response = client.images.generate(
    model="dall-e-3",
    prompt="一只橘猫坐在笔记本电脑前写代码,赛博朋克风格,霓虹灯光",
    size="1024x1024",
    quality="hd",
    n=1
)

image_url = response.data[0].url
print(f"图片地址: {image_url}")

图像编辑

# GPT-4o 支持图像编辑
response = client.images.edit(
    model="dall-e-2",
    image=open("original.png", "rb"),
    mask=open("mask.png", "rb"),  # 标记要编辑的区域
    prompt="把背景换成海滩",
    size="1024x1024"
)

多模态应用的注意事项

1. Token 成本

图片和音频会消耗大量 Token,注意控制成本:

一张高清图片: ~1000 tokens
一分钟音频转录: ~150 tokens (文本)
一个 10 分钟视频 (每 5 秒一帧): ~120 帧 × 1000 tokens = 120K tokens

优化策略:

  • 图片:先压缩再发送,使用 low detail 模式
  • 视频:合理设置抽帧间隔
  • 音频:先转录为文本再处理

2. 隐私与安全

注意事项:
- 图片中可能包含人脸、车牌等敏感信息
- 音频可能包含个人隐私
- 上传到 API 的数据要注意合规性
- 考虑使用本地模型处理敏感数据

3. 准确性限制

视觉模型目前的局限:

任务准确性说明
图片描述基本能准确描述图片内容
OCR中高清晰文字准确率高,手写体较差
计数数量多时容易出错
空间关系”左边”、“上面”有时会搞混
细节识别中低小字、模糊区域容易遗漏
数学公式复杂公式可能识别错误

4. Prompt 技巧

# 好的多模态 prompt
"请仔细观察这张图片的右上角区域,那里有一段小字,请完整转录出来。"

# 不好的 prompt
"看看这张图"  # 太模糊,模型不知道你想要什么

给视觉模型的 prompt 要具体:

  • 指明关注区域
  • 说清楚期望的输出格式
  • 提供必要的上下文

未来趋势

1. 原生多模态

从”拼接多个模型”到”一个模型理解所有模态”。GPT-4o 已经在这个方向上迈出了一大步。

2. 实时交互

语音对话、视频通话中的实时 AI 理解和响应。延迟从秒级降到毫秒级。

3. 具身智能

多模态 AI + 机器人 = 能看、能听、能说、能动的 AI。这是多模态的终极形态。

4. 更多模态

触觉、嗅觉、温度……理论上任何可以数字化的感知都可以成为 AI 的输入。


总结

多模态 AI 让我们的应用不再局限于文本。作为开发者,现在就可以利用这些能力:

  • 用 Vision API 处理图片、文档、UI 截图
  • 用 Speech API 处理语音输入输出
  • 用视频分析能力处理视频内容
  • 用图像生成能力创建视觉内容

关键是选择合适的模态组合,控制好成本,注意隐私安全。

当 AI 能看、能听、能说的时候,它就不再只是一个”语言模型”,而是一个真正的”智能助手”。多模态是 AI 走向通用智能的必经之路,而我们正站在这条路的起点。

评论

加载中...

相关文章

分享:

评论

加载中...