LangChain3 多模态能力指南 🎨🎵🎤
🖼️ 1. 图片识别能力
1.1 基础图片识别
1.2 Base64编码方式
注意:当图片URL无法直接访问时,可以使用Base64编码方式。
import base64
import httpx
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-5-nano", api_key="your_api_key")
# 方法2:使用Base64编码(推荐:兼容性更好)
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")
messages = HumanMessage(
content=[
{"type": "text", "text": "分析这张图片中的主要元素"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_data}"}}
]
)
response = llm.invoke([messages])
print(response.content)
🎵 2. 音频处理能力
2.1 音频文件识别
重点:音频处理需要模型支持音频输入,目前主要支持GPT-4V等高级模型。
from langchain_core.messages import HumanMessage
import base64
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-5-nano", api_key="your_api_key")
def process_audio_file(audio_path: str, prompt: str = "请描述这段音频的内容"):
"""处理音频文件的通用函数"""
with open(audio_path, "rb") as audio_file:
audio_data = base64.b64encode(audio_file.read()).decode("utf-8")
messages = HumanMessage(
content=[
{"type": "text", "text": prompt},
{"type": "audio_url", "audio_url": {"url": f"data:audio/wav;base64,{audio_data}"}}
]
)
return llm.invoke([messages])
2.2 音频URL处理
def process_audio_url(audio_url: str, prompt: str = "分析这段音频"):
"""处理音频URL的函数"""
messages = HumanMessage(
content=[
{"type": "text", "text": prompt},
{"type": "audio_url", "audio_url": {"url": audio_url}}
]
)
return llm.invoke([messages])
🎤 3. 语音转文本能力
3.1 基础语音识别
import openai
openai.api_key = "xxx"
with open("assets/test_audio.wav", "rb") as audio_file:
response = openai.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
response_format="text",
)
🔧 4. 多模态消息格式详解
4.1 Message Content 结构
LangChain3的多模态消息采用标准化的content数组格式:
messages = HumanMessage(
content=[
# 文本内容
{"type": "text", "text": "请分析以下内容"},
# 图片内容
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}},
]
)
4.2 支持的数据类型
类型 | 说明 | 示例 |
---|---|---|
text | 文本内容 | {"type": "text", "text": "描述"} |
image_url | 图片URL或Base64 | {"type": "image_url", "image_url": {"url": "..."}} |