回到頂部

👁️ 多模態 API 實戰

Vision、語音、TTS——讓 AI 看圖、聽音、說話的實作指南。

👁️ 什麼是多模態 API?

多模態 AI 能處理文字以外的資料——圖片、音訊、影片。而多模態 API 讓你在程式碼中使用這些能力。

💡 一句話理解 文字 API = AI 能「讀」和「寫」 多模態 API = AI 還能「看圖」、「聽聲音」、「說話」

2026 多模態能力一覽

能力OpenAIClaudeGemini
看圖理解✅ 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)。

📚 延伸閱讀