多模态Agent来了!让你的智能体同时"看"图、"听"音、"读"视频 🖼️🎵🎬

导读:2025年,Agent不再只是"文字处理器"——它能看图片听语音读视频!多模态Agent正在成为下一个技术高地。本文带你从零构建一个能处理图片、音频和视频的多模态Agent,让你的智能体真正拥有"五感"!🦸


一、什么是多模态Agent?🤔

1.1 从单模态到多模态

阶段 能力 代表 局限
📝 文本Agent 只能处理文字 早期ChatGPT 看不懂图片
🖼️ 视觉Agent 文字+图片 GPT-4V 不能听和看视频
🎵 听觉Agent 文字+音频 Whisper+GPT 不能看图
🌈 多模态Agent 文字+图片+音频+视频 GPT-4o、Gemini 全能感知!

🌈 多模态Agent

📝 文本输入

🧠 多模态大模型

🖼️ 图片输入

🎵 音频输入

🎬 视频输入

📤 统一输出

1.2 多模态Agent的应用场景

场景 输入 输出 价值
📸 图片分析 产品照片 质量检测报告 自动质检
📊 图表理解 数据截图 数据分析报告 自动读图
🎙️ 语音助手 语音指令 执行操作 免手操作
🎬 视频分析 监控视频 异常事件报告 智能监控
📄 文档处理 扫描件PDF 结构化数据 自动录入

二、多模态模型选型 📊

2.1 支持多模态的主流模型

模型 文本 图片 音频 视频 价格(百万Token) 推荐度
GPT-4o $2.5入/$10出 ⭐⭐⭐⭐⭐
Claude 3.5 $3入/$15出 ⭐⭐⭐⭐
Gemini 1.5 Pro $1.25入/$5出 ⭐⭐⭐⭐⭐
Qwen-VL-Max ¥0.02入/¥0.06出 ⭐⭐⭐⭐
DeepSeek-VL2 ¥1入/¥2出 ⭐⭐⭐⭐

💡 选型建议:需要全模态(含音频视频)选GPT-4o或Gemini;只需要图片理解选Qwen-VL或DeepSeek-VL更省钱。


三、图片理解Agent实战 📸

3.1 基础:让Agent看懂图片

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage

llm = ChatOpenAI(model="gpt-4o")

# 发送图片 + 文字给Agent
message = HumanMessage(
    content=[
        {"type": "text", "text": "请分析这张图片的内容,描述你看到了什么"},
        {
            "type": "image_url",
            "image_url": {
                "url": "https://example.com/photo.jpg",
                # 也可以用本地图片的base64编码
                # "url": f"data:image/jpeg;base64,{base64_image}"
            }
        },
    ]
)

response = llm.invoke([message])
print(response.content)
# 输出:这张图片展示了一个...

3.2 进阶:构建图片分析Agent

from langchain.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
import base64

@tool
def analyze_image(image_path: str, task: str) -> str:
    """分析图片内容。支持识别物体、文字OCR、场景描述等任务。
    
    Args:
        image_path: 图片文件路径或URL
        task: 分析任务类型,如'描述内容'、'提取文字'、'识别物体'
    """
    llm = ChatOpenAI(model="gpt-4o")
    
    # 读取图片
    if image_path.startswith("http"):
        image_data = {"url": image_path}
    else:
        with open(image_path, "rb") as f:
            encoded = base64.b64encode(f.read()).decode()
        image_data = {"url": f"data:image/jpeg;base64,{encoded}"}
    
    response = llm.invoke([
        HumanMessage(content=[
            {"type": "text", "text": f"请执行以下图片分析任务:{task}"},
            {"type": "image_url", "image_url": image_data}
        ])
    ])
    return response.content

@tool
def compare_images(image1_path: str, image2_path: str) -> str:
    """比较两张图片的异同。
    
    Args:
        image1_path: 第一张图片路径
        image2_path: 第二张图片路径
    """
    # 类似逻辑,发送两张图片让模型比较
    pass

# 创建多模态Agent
agent = create_react_agent(
    model=ChatOpenAI(model="gpt-4o"),
    tools=[analyze_image, compare_images],
    prompt="你是一个视觉分析专家,能精准分析图片内容。"
)

3.3 多模态Agent应用场景表

应用 输入 Agent动作 输出
🛒 电商商品分析 商品图片 识别品类、提取属性 商品描述JSON
📊 图表数据提取 图表截图 OCR+数据理解 结构化数据表
🏥 医学影像辅助 X光/CT图 标注异常区域 辅助诊断报告
🚗 车牌识别 道路监控图 识别车牌号 车牌号码
📝 手写识别 手写笔记照片 OCR+理解 数字化文本

四、语音交互Agent实战 🎙️

4.1 语音处理流程

🎤 语音输入

ASR语音识别

📝 文本

🧠 Agent处理

📝 回答文本

TTS语音合成

🔊 语音输出

4.2 语音Agent代码实现

from langchain.tools import tool
import openai

@tool
def speech_to_text(audio_file_path: str) -> str:
    """将语音文件转换为文字。支持mp3、wav、m4a等格式。
    
    Args:
        audio_file_path: 音频文件路径
    """
    with open(audio_file_path, "rb") as audio:
        transcript = openai.audio.transcriptions.create(
            model="whisper-1",
            file=audio,
            language="zh"
        )
    return transcript.text

@tool
def text_to_speech(text: str, output_path: str) -> str:
    """将文字转换为语音文件。
    
    Args:
        text: 要转换的文字内容
        output_path: 输出音频文件路径
    """
    response = openai.audio.speech.create(
        model="tts-1",
        voice="alloy",  # 可选:alloy, echo, fable, onyx, nova, shimmer
        input=text
    )
    response.stream_to_file(output_path)
    return f"语音文件已保存到:{output_path}"

# 语音Agent的完整流程
def voice_agent_process(audio_input_path):
    """完整的语音交互流程"""
    # Step 1: 语音转文字
    text = speech_to_text.invoke({"audio_file_path": audio_input_path})
    print(f"📝 识别结果:{text}")
    
    # Step 2: Agent处理
    result = agent.invoke({"messages": [("user", text)]})
    response_text = result["messages"][-1].content
    print(f"🤖 Agent回答:{response_text}")
    
    # Step 3: 文字转语音
    speech_output = text_to_speech.invoke({
        "text": response_text,
        "output_path": "/tmp/response.mp3"
    })
    print(f"🔊 {speech_output}")

五、视频理解Agent实战 🎬

5.1 视频处理策略

视频太长,不能直接全部发给模型。常用策略:

策略 原理 适用场景 优缺点
📸 关键帧提取 每隔N秒截取一帧 监控分析 ✅简单 ❌可能漏掉关键信息
🎬 片段采样 均匀采样N个片段 视频摘要 ✅全面 ❌Token消耗大
🎯 事件检测 先检测变化再分析 异常检测 ✅高效 ❌需要预处理

5.2 视频分析代码

import cv2
from langchain.tools import tool

@tool
def extract_key_frames(video_path: str, interval_seconds: int = 5) -> str:
    """从视频中按间隔提取关键帧图片。
    
    Args:
        video_path: 视频文件路径
        interval_seconds: 提取间隔(秒)
    """
    cap = cv2.VideoCapture(video_path)
    fps = cap.get(cv2.CAP_PROP_FPS)
    frame_interval = fps * interval_seconds
    
    frames = []
    frame_count = 0
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        if frame_count % frame_interval == 0:
            path = f"/tmp/frame_{frame_count}.jpg"
            cv2.imwrite(path, frame)
            frames.append(path)
        frame_count += 1
    
    cap.release()
    return f"提取了{len(frames)}帧关键帧,路径:{frames}"

@tool
def analyze_video_content(video_path: str, task: str) -> str:
    """分析视频内容。自动提取关键帧并分析。
    
    Args:
        video_path: 视频文件路径
        task: 分析任务,如'描述视频内容'、'检测异常'、'生成摘要'
    """
    # 提取关键帧
    frames = extract_key_frames.invoke({
        "video_path": video_path, 
        "interval_seconds": 3
    })
    
    # 将关键帧发给多模态模型分析
    llm = ChatOpenAI(model="gpt-4o")
    
    content = [{"type": "text", "text": f"请分析这些视频帧,任务:{task}"}]
    for frame_path in eval(frames.split("路径:")[1]):
        with open(frame_path, "rb") as f:
            encoded = base64.b64encode(f.read()).decode()
        content.append({
            "type": "image_url",
            "image_url": {"url": f"data:image/jpeg;base64,{encoded}"}
        })
    
    response = llm.invoke([HumanMessage(content=content)])
    return response.content

六、多模态Agent的System Prompt设计 📝

multimodal_prompt = """
# 角色定义
你是一个多模态AI助手"万象",能够理解和处理文字、图片、音频、视频等多种信息。

# 能力
- 📝 文本理解:分析、总结、翻译文字内容
- 🖼️ 图片分析:识别物体、提取文字、描述场景、分析图表
- 🎵 语音处理:语音转文字、文字转语音
- 🎬 视频理解:提取关键帧、分析视频内容、生成视频摘要

# 工作原则
1. 收到图片时,先描述看到了什么,再回答用户问题
2. 处理音频时,先转写为文字,确认理解正确后再处理
3. 分析视频时,提取关键帧并综合多帧信息
4. 对于不确定的视觉内容,诚实说明并给出置信度

# 输出格式
分析结果使用以下结构:
- 📋 **内容概述**:一句话总结
- 🔍 **详细分析**:分点描述
- 💡 **关键发现**:重要信息
- ⚠️ **注意事项**:不确定的地方
"""

七、多模态Agent的性能与成本 📊

7.1 Token消耗对比

输入类型 Token消耗 处理时间 成本估算
纯文字(100字) ~50 tokens 0.5s ¥0.001
一张图片 ~1000 tokens 2s ¥0.02
1分钟音频 ~500 tokens(转写后) 5s ¥0.05
1分钟视频(10帧) ~10000 tokens 15s ¥0.2

7.2 成本优化策略

策略 效果 实现方式
🔄 图片压缩 Token减少60% 降低分辨率到1024px
📸 智能抽帧 Token减少80% 只提取有变化的帧
💰 分级处理 成本减少50% 简单任务用便宜模型
🗂️ 缓存机制 重复查询零成本 缓存已分析的结果

八、本期小结 📝

模态 核心能力 关键技术 推荐模型
📝 文本 理解与生成 LLM 所有模型
🖼️ 图片 识别与分析 多模态LLM GPT-4o、Qwen-VL
🎵 音频 语音识别与合成 Whisper + TTS Whisper + 各TTS
🎬 视频 内容理解 关键帧+多模态 GPT-4o、Gemini

🔥 多模态是Agent的进化方向。未来的Agent不只是"文字处理器",而是能看、听、说的全能助手。掌握多模态Agent开发,就是站在了AI应用的最前沿!


📢 下期预告:大模型基座篇完结!下一篇进入工具与协议篇——《MCP协议详解:AI Agent的"USB-C接口"》。MCP到底是什么?为什么它被称为Agent领域的"游戏规则改变者"?敬请期待!🔌


📌 三连走起!多模态Agent,让AI拥有五感! 💪

📚 专栏第8/24期,大模型基座篇完结!下一篇进入工具与协议篇!

作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。

👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)
🔔 关注专栏,不错过后续精彩内容

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐