AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章08:多模态Agent的构建与应用
·
多模态Agent来了!让你的智能体同时"看"图、"听"音、"读"视频 🖼️🎵🎬
导读:2025年,Agent不再只是"文字处理器"——它能看图片、听语音、读视频!多模态Agent正在成为下一个技术高地。本文带你从零构建一个能处理图片、音频和视频的多模态Agent,让你的智能体真正拥有"五感"!🦸
一、什么是多模态Agent?🤔
1.1 从单模态到多模态
| 阶段 | 能力 | 代表 | 局限 |
|---|---|---|---|
| 📝 文本Agent | 只能处理文字 | 早期ChatGPT | 看不懂图片 |
| 🖼️ 视觉Agent | 文字+图片 | GPT-4V | 不能听和看视频 |
| 🎵 听觉Agent | 文字+音频 | Whisper+GPT | 不能看图 |
| 🌈 多模态Agent | 文字+图片+音频+视频 | GPT-4o、Gemini | 全能感知! |
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 语音处理流程
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期,大模型基座篇完结!下一篇进入工具与协议篇!
作者:高炉炼铁智能化技术研究者,专注钢铁冶金与人工智能 交叉领域。
👍 如果觉得有帮助,请点赞、收藏、转发!
版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。
🔔 关注专栏,不错过后续精彩内容
更多推荐




所有评论(0)