跳转到内容

多模态模型入门:从文本到视觉

前五章我们讨论的所有内容——模型调用、提示词模板、输出解析、RAG 检索、对话记忆——都围绕着一个共同的假设:输入和输出都是纯文本。用户打字进来,模型打字出去。这确实是 LLM 最经典的使用方式,但它远不是全部。

2023 年以来,AI 领域最激动人心的突破之一就是 多模态(Multimodal) 能力的爆发——模型不再只能处理文字,还能"看"图片、"听"声音,甚至同时理解多种类型的输入并给出综合回应。这一章我们将系统地学习如何在 LangChain 中利用这些能力,让你的 AI 助手从"只会聊天"进化为"能看能听"。

什么是多模态

模态(Modality) 这个词来源于拉丁语 modus,意为"方式"或"形式"。在 AI 的语境中,一种数据类型就是一种模态:文本是一种模态,图像是另一种模态,音频又是第三种。

所谓 多模态 AI,就是能够同时处理和理解多种不同类型数据的智能系统。它不是简单地把多个单模态模型拼在一起,而是在统一的架构中学习不同模态之间的关联和语义对应关系:

传统单模态:
  文本 → [文本模型] → 文本输出
  图像 → [图像模型] → 分类标签
  音频 → [音频模型] → 转录文本

多模态:
  文本 + 图像 + 音频 → [多模态模型] → 综合理解与输出

举个例子让你直观感受区别:

python
# 单模态 — 只能用文字描述
response = chat.invoke("这张照片里有一只橘猫坐在窗台上晒太阳")
# 模型只能基于文字描述来想象,无法验证真实性

# 多模态 — 直接把照片给模型看
response = multimodal_chat.invoke([
    HumanMessage(content=[
        {"type": "text", "text": "描述一下这张图片"},
        {"type": "image_url", "image_url": {"url": "cat_photo.jpg"}}
    ])
])
# 模型真正"看到"了图片内容,能给出准确的描述

从 GPT-4V 到 GPT-4o:多模态的进化

OpenAI 在多模态领域的探索经历了几个重要阶段:

GPT-4V(Vision)(2023 年 9 月):这是 OpenAI 第一个正式支持图像输入的大模型。你可以把一张图片连同文字一起发给它,它能识别图中的物体、阅读图片里的文字、分析图表数据等。但它的图像处理能力是通过额外的视觉模块"拼接"到语言模型上的,本质上还是两个系统的协作。

GPT-4o(2024 年 5 月):其中的 "o" 代表 omni(全能/全模态)。这是一个原生多模态模型——文本、图像、音频在同一个神经网络中统一处理,不需要额外的拼接模块。它的响应速度比 GPT-4V 快得多,成本更低,而且在图像理解和语音交互方面都有显著提升。

对 LangChain 开发者来说,GPT-4o 带来的最大变化是:你不需要换框架或学新 API——只需要在现有的 ChatOpenAI 接口中传入稍微不同的消息格式就能实现多模态交互

LangChain 对多模态的支持

LangChain 从 v0.2 开始逐步完善了对多模态的支持。核心的接口变化非常小——你仍然使用 ChatOpenAI,仍然用 invoke() 调用,只是消息的内容格式从纯字符串变成了结构化的多部分内容(multipart content):

python
# 传统文本消息
message = HumanMessage(content="你好")

# 多模态消息 — 包含文本 + 图片
message = HumanMessage(content=[
    {"type": "text", "text": "这张图片里是什么?"},
    {"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
])

注意看 content 字段的变化:从单个字符串变成了一个列表,列表中的每个元素是一个字典,通过 "type" 字段标识该部分的类型("text""image_url")。这种格式叫做 多部分消息(Multimodal Message)内容块列表(Content Block List),它是 LangChain 中表达多模态输入的标准方式。

本章覆盖的能力范围

本章将围绕三个核心能力展开:

能力说明典型场景
视觉理解让模型"看"图片并回答相关问题图片描述、OCR、图表分析、截图诊断
语音输入把用户的语音自动转为文本再发给模型语音助手、车载交互、无障碍访问
语音输出把模型的文字回复转为语音播放有声读物、导航播报、电话客服

这三个能力可以单独使用,也可以组合在一起形成完整的"能看能听"的多模态助手。最后一节的实战项目将展示如何把它们整合到一个应用中。

为什么多模态很重要

在实际应用中,多模态能力解决了很多纯文本无法解决的问题:

场景一:用户直接发了一张截图而不是打字描述

python
# 用户发了张报错截图
user_message = HumanMessage(content=[
    {"type": "image_url", "image_url": {"url": "screenshot.png"}},
    {"type": "text", "text": "我的代码报错了,怎么修?"}
])

# 模型能直接看到错误信息,精准定位问题

这在编程助手中极其常见——用户不会把整段报错信息手动敲出来,他们更倾向于截个图发过来。没有视觉能力的模型对此束手无策。

场景二:处理包含图表和表格的文档

python
# 用户上传了一份销售报表图片
message = HumanMessage(content=[
    {"type": "image_url", "image_url": {"url": "sales_report.png"}},
    {"type": "text", "text": "Q3 哪个产品线增长最快?"}
])

# 模型能读取图表中的数据和趋势

传统的 RAG 系统依赖 OCR 把图片转为文字,但 OCR 经常出错(尤其是复杂表格和多栏布局)。多模态模型可以直接理解图片的视觉结构和语义。

场景三:语音优先的交互场景

python
# 用户对着麦克风说话
audio_text = speech_to_text(audio_input)   # 语音→文字
response = chat.invoke(audio_text)           # 文字→模型
speech_output = text_to_speech(response)     # 文字→语音

对于驾驶中的司机、正在做饭的人、或者视力障碍用户来说,语音是最自然的交互方式。

准备工作

在开始写代码之前,确认你的环境已经就绪:

bash
# 核心依赖(前几章应该已经装好了)
pip install langchain langchain-openai langchain-core python-dotenv

# 第六章新增的依赖
pip install openai>=1.20    # 需要 1.20+ 才支持多模态 API

环境变量 .env 文件确保包含:

OPENAI_API_KEY=sk-xxx

GPT-4o 是默认支持多模态的,不需要额外配置。但要注意:发送图片给 GPT-4o 的 API 调用费用比纯文本高一些(因为需要额外的计算资源处理图像),而且有尺寸限制——建议图片不超过 20MB,分辨率控制在 2048×2048 以内以获得最佳性价比。

接下来的一节,我们首先深入最重要的多模态能力——视觉理解,学习如何让 LangChain 应用真正地"看见"世界。

基于 MIT 许可发布