👁️ 什麼是多模態 API?
多模態 AI 能處理文字以外的資料——圖片、音訊、影片。而多模態 API 讓你在程式碼中使用這些能力。
💡 一句話理解 文字 API = AI 能「讀」和「寫」 多模態 API = AI 還能「看圖」、「聽聲音」、「說話」
2026 多模態能力一覽
| 能力 | OpenAI | Claude | Gemini |
|---|---|---|---|
| 看圖理解 | ✅ GPT-4o | ✅ Claude Sonnet 4.6 | ✅ Gemini 2.5 Pro |
| 語音轉文字 | ✅ Whisper | ❌ | ✅ |
| 文字轉語音 | ✅ TTS-1 | ❌ | ✅ |
| 影片理解 | ⚠️ 有限 | ❌ | ✅ 原生 |
| 圖片生成 | ✅ DALL-E 3 | ❌ | ✅ Imagen 3 |
📸 Vision API:讓 AI 看圖
基本用法(OpenAI)
import base64
def encode_image(image_path):
"""把圖片轉成 base64"""
with open(image_path, "rb") as f:
return base64.b64encode(f.read()).decode("utf-8")
# 方法 1:本地圖片
image_b64 = encode_image("receipt.jpg")
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "這張收據的金額是多少?請列出每個項目和總金額。"},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{image_b64}",
"detail": "high" # high / low / auto
}
}
]
}],
max_tokens=500
)
print(response.choices[0].message.content)
# "這張收據的項目如下:
# 1. 拿鐵咖啡 - NT$120
# 2. 可頌麵包 - NT$85
# 總計:NT$205"
# 方法 2:用 URL
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"}
}
]
}]
)
Claude Vision
response = claude_client.messages.create(
model="claude-sonnet-4-20260514",
max_tokens=500,
messages=[{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_b64,
},
},
{"type": "text", "text": "這張收據的金額是多少?"}
],
}]
)
多張圖片比較
response = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "比較這兩張產品圖,列出差異。"},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img1_b64}"}},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img2_b64}"}},
]
}]
)
Vision 實用場景
| 場景 | 做法 | Prompt 範例 |
|---|---|---|
| 收據辨識 | 上傳收據照片 → 擷取金額 | 「列出每個項目和金額,用 JSON」 |
| UI 截圖分析 | 上傳 UI → 找問題 | 「這個介面有什麼 UX 問題?」 |
| 圖表理解 | 上傳圖表 → 分析趨勢 | 「描述這張圖表的趨勢和重點,用於數據分析」 |
| OCR 替代 | 上傳文件照片 → 擷取文字 | 「擷取這張圖片中所有的文字」 |
| 商品辨識 | 上傳商品照 → 描述特徵 | 「這是什麼產品?估計價格?」 |
🎤 語音轉文字(Speech-to-Text)
OpenAI Whisper API
# 音訊檔案 → 文字
with open("meeting.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)
# 含時間戳的輸出(verbose_json 格式)
for segment in transcript.segments:
start = segment["start"]
end = segment["end"]
text = segment["text"]
print(f"[{start:.1f}s - {end:.1f}s] {text}")
實戰:會議錄音自動摘要
結合 Whisper 和 AI 寫作能力,自動產生會議紀錄:
def summarize_meeting(audio_path):
"""錄音 → 逐字稿 → AI 摘要"""
# Step 1: 語音轉文字
with open(audio_path, "rb") as f:
transcript = client.audio.transcriptions.create(
model="whisper-1", file=f, language="zh"
)
# Step 2: AI 摘要
summary = client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": f"""把以下會議逐字稿整理成結構化摘要:
逐字稿:
{transcript.text}
格式:
1. 會議主題
2. 重要決議(✅ 標記)
3. 待辦事項(標明負責人)
4. 下次會議議題"""
}]
).choices[0].message.content
return summary
🔊 文字轉語音(Text-to-Speech)
OpenAI TTS API
# 文字 → 語音檔案
response = client.audio.speech.create(
model="tts-1", # tts-1(快) 或 tts-1-hd(高品質)
voice="nova", # alloy, echo, fable, onyx, nova, shimmer
input="大家好,歡迎收聽今天的 AI 技術分享。",
speed=1.0 # 0.25 ~ 4.0
)
# 存為 MP3
response.stream_to_file("output.mp3")
Streaming TTS(即時播放)
# 串流模式 — 邊生成邊播放
with client.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input="這是一段即時生成的語音。"
) as response:
response.stream_to_file("stream_output.mp3")
語音選擇指南
| 語音 | 特色 | 適合 |
|---|---|---|
| alloy | 中性、專業 | 客服、旁白 |
| echo | 沉穩男聲 | Podcast、教學 |
| nova | 活潑女聲 | 對話、助手 |
| shimmer | 溫暖女聲 | 有聲書、冥想 |
| onyx | 低沉男聲 | 新聞、權威感 |
| fable | 故事風格 | 兒童內容、有聲書 |
🎬 影片理解(Gemini)
Gemini 是目前影片理解能力最強的 API。若想了解更多 AI 影片工具,參考 AI 影片生成指南。
import google.generativeai as genai
model = genai.GenerativeModel("gemini-2.5-pro")
# 上傳影片
video_file = genai.upload_file("product_demo.mp4")
# 等待處理完成
import time
while video_file.state.name == "PROCESSING":
time.sleep(5)
video_file = genai.get_file(video_file.name)
# 分析影片
response = model.generate_content([
video_file,
"請分析這段產品示範影片,列出:1) 展示了哪些功能 2) 每個功能出現在幾分幾秒 3) 整體建議"
])
print(response.text)
🔗 組合技:多模態 Pipeline
把多個多模態能力串起來,打造完整的 AI 工作流。
async def multimodal_customer_service(audio_message, photo=None):
"""多模態客服:聽語音 + 看照片 → 生成回覆 → 語音回覆"""
# 1. 語音轉文字
transcript = client.audio.transcriptions.create(
model="whisper-1", file=audio_message, language="zh"
)
# 2. 組合文字和圖片(如果有)
messages = [{"type": "text", "text": transcript.text}]
if photo:
photo_b64 = encode_image(photo)
messages.append({
"type": "image_url",
"image_url": {"url": f"data:image/jpeg;base64,{photo_b64}"}
})
# 3. AI 生成回覆
ai_response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "你是客服助理,回覆要簡短友善。"},
{"role": "user", "content": messages}
]
).choices[0].message.content
# 4. 文字轉語音
audio_reply = client.audio.speech.create(
model="tts-1", voice="nova", input=ai_response
)
audio_reply.stream_to_file("reply.mp3")
return {"text": ai_response, "audio": "reply.mp3"}
❓ FAQ
Vision API 能辨認中文手寫嗎?
GPT-4o 和 Gemini 對印刷中文辨識率很高(> 95%)。手寫中文辨識率中等(70-85%),取決於字跡清晰度。建議加上 Prompt「請盡量辨識,不確定的用 [?] 標記」。
Whisper 支援台語/粵語嗎?
Whisper 支援 99 種語言,包含中文(zh)。台語(nan)和粵語(yue)有基本支援但精度較低。重度口音的場景建議先用 Whisper 再用 GPT 修潤。
多模態 API 的成本怎麼算?
Vision:圖片按解析度計 token,一張 1024×1024「high detail」約 765 tokens。Whisper:$0.006/分鐘。TTS:$15/百萬字(tts-1)。影片(Gemini):按影片長度和解析度計費。
可以用 Vision API 做即時影像分析嗎?
技術上可以(定期截圖 → 送 Vision API),但延遲 1-3 秒且成本高。適合非即時場景(每分鐘分析一次)。真正的即時影像分析建議用 edge AI 模型(YOLO、MediaPipe)。