完整代码 实战项目GitHub 仓库配套教程CSDN 专栏如果觉得有用欢迎 ⭐ Star 支持 为什么多模态大模型这么火2024 年 AI 界最大的突破GPT-4o2024.5- 文本、图像、音频实时交互Gemini 1.5 Pro2024.5- 100 万 token 上下文Claude 3.5 Sonnet2024.6- 代码能力超越人类GPT-4o mini2024.7- 便宜 60%性能接近 GPT-4oLlama 3.22024.9- 开源多模态免费可用多模态的核心能力传统 AI 输入文本 输出文本 多模态 AI 输入文本 图像 音频 视频 输出文本 图像 音频 代码实际应用场景拍照问问题- 拍一道数学题AI 直接解答实时翻译- 说中文AI 实时翻译并语音输出代码调试- 截图错误信息AI 分析并修复文档理解- 上传 PDFAI 提取关键信息智能客服- 用户上传产品照片AI 识别并推荐今天教你用GPT-4o API打造自己的多模态 AI 助手 多模态模型对比模型上下文图像理解语音交互价格输入/输出适合场景GPT-4o128K✅ 优秀✅ 实时$2.50 / $10全能助手GPT-4o mini128K✅ 良好✅ 实时$0.15 / $0.60低成本Claude 3.5200K✅ 优秀❌$3 / $15代码/长文Gemini 1.51000K✅ 优秀✅$3.50 / $10.50超长文档Llama 3.2128K✅ 良好❌免费本地部署价格对比每 100 万 tokenGPT-4o: $2.50 ████████████████████████████████████████ GPT-4o mini: $0.15 ██ (便宜 16 倍) Claude 3.5: $3.00 ████████████████████████████████████████████ Gemini 1.5: $3.50 ██████████████████████████████████████████████████ Llama 3.2: $0 (免费)1️⃣ GPT-4o API 基础调用安装依赖pip install openai python-dotenv pillow配置 API Key# .env 文件 OPENAI_API_KEYsk-your-api-key-here # Python 代码 import os from dotenv import load_dotenv load_dotenv() API_KEY os.getenv(OPENAI_API_KEY)文本对话from openai import OpenAI client OpenAI(api_keyAPI_KEY) # 简单对话 response client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: 你是一个专业的 AI 助手}, {role: user, content: 解释一下什么是 Transformer} ], max_tokens500 ) print(response.choices[0].message.content)输出Transformer 是一种基于自注意力机制的神经网络架构...流式输出实时显示# 流式输出像 ChatGPT 一样逐字显示 response client.chat.completions.create( modelgpt-4o, messages[ {role: user, content: 写一首关于春天的诗} ], streamTrue # 开启流式 ) for chunk in response: if chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end, flushTrue)2️⃣ 图像理解Vision核心思想一句话总结把图片发给 AI让它看懂传统方式 用户描述图片内容 AI基于描述回答 多模态 用户直接上传图片 AI自己看图片并回答代码实现import base64 from openai import OpenAI client OpenAI(api_keyAPI_KEY) # 将图片转换为 Base64 def encode_image(image_path): with open(image_path, rb) as image_file: return base64.b64encode(image_file.read()).decode(utf-8) # 上传图片并提问 image_path math_problem.jpg base64_image encode_image(image_path) response client.chat.completions.create( modelgpt-4o, messages[ { role: user, content: [ {type: text, text: 请解答这道数学题并给出详细步骤}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ], max_tokens1000 ) print(response.choices[0].message.content)实战场景 1拍照解题def solve_math_problem(image_path): 拍照解数学题 base64_image encode_image(image_path) response client.chat.completions.create( modelgpt-4o, messages[ { role: system, content: 你是一个数学老师。请\n1. 识别题目\n2. 给出详细解题步骤\n3. 给出最终答案 }, { role: user, content: [ {type: text, text: 请解答这道题}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ], max_tokens1500 ) return response.choices[0].message.content # 使用 result solve_math_problem(homework.jpg) print(result)实战场景 2截图调试代码def debug_code_screenshot(image_path): 截图调试代码 base64_image encode_image(image_path) response client.chat.completions.create( modelgpt-4o, messages[ { role: system, content: 你是一个资深程序员。请\n1. 识别错误信息\n2. 分析错误原因\n3. 给出修复方案\n4. 提供修复后的代码 }, { role: user, content: [ {type: text, text: 帮我调试这个错误}, { type: image_url, image_url: { url: fdata:image/png;base64,{base64_image} } } ] } ], max_tokens2000 ) return response.choices[0].message.content # 使用 result debug_code_screenshot(error_screenshot.png) print(result)实战场景 3文档理解def analyze_document(image_path): 分析文档PDF 截图、PPT 等 base64_image encode_image(image_path) response client.chat.completions.create( modelgpt-4o, messages[ { role: system, content: 你是一个专业的文档分析师。请\n1. 提取关键信息\n2. 总结核心观点\n3. 列出行动项 }, { role: user, content: [ {type: text, text: 分析这份文档}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ], max_tokens2000 ) return response.choices[0].message.content3️⃣ 语音交互Audio文本转语音TTSfrom openai import OpenAI import os client OpenAI(api_keyAPI_KEY) # 文本转语音 response client.audio.speech.create( modeltts-1, voicealloy, # alloy, echo, fable, onyx, nova, shimmer input你好我是你的 AI 助手有什么可以帮你的吗 ) # 保存为 MP3 文件 response.stream_to_file(output.mp3) print(✅ 语音生成完成output.mp3)语音转文本STT# 语音转文本 audio_file open(voice_input.mp3, rb) transcript client.audio.transcriptions.create( modelwhisper-1, fileaudio_file, languagezh # 指定中文 ) print(f识别结果{transcript.text})实时语音对话import pyaudio import wave class VoiceAssistant: 语音助手 def __init__(self): self.client OpenAI(api_keyAPI_KEY) def listen(self, duration5): 录音 CHUNK 1024 FORMAT pyaudio.paInt16 CHANNELS 1 RATE 44100 p pyaudio.PyAudio() stream p.open(formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, frames_per_bufferCHUNK) print( 开始录音说 5 秒...) frames [] for _ in range(0, int(RATE / CHUNK * duration)): data stream.read(CHUNK) frames.append(data) stream.stop_stream() stream.close() p.terminate() # 保存录音 wf wave.open(input.wav, wb) wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b.join(frames)) wf.close() return input.wav def transcribe(self, audio_file): 语音转文本 with open(audio_file, rb) as f: transcript self.client.audio.transcriptions.create( modelwhisper-1, filef, languagezh ) return transcript.text def generate_response(self, text): 生成回复 response self.client.chat.completions.create( modelgpt-4o, messages[ {role: system, content: 你是一个友好的 AI 助手}, {role: user, content: text} ] ) return response.choices[0].message.content def speak(self, text): 文本转语音 response self.client.audio.speech.create( modeltts-1, voicealloy, inputtext ) response.stream_to_file(response.mp3) print(f 回复{text}) print(✅ 语音已保存response.mp3) def chat(self): 语音对话循环 print( 语音助手已启动说 退出 结束) while True: # 录音 audio_file self.listen(duration5) # 语音转文本 text self.transcribe(audio_file) print(f 你说{text}) if 退出 in text: print( 再见) break # 生成回复 response self.generate_response(text) # 语音播报 self.speak(response) # 使用 assistant VoiceAssistant() assistant.chat()4️⃣ 多模态组合实战场景 1拍照 语音讲解def explain_image_with_voice(image_path): 拍照并语音讲解 base64_image encode_image(image_path) # 1. 图像理解 response client.chat.completions.create( modelgpt-4o, messages[ { role: user, content: [ {type: text, text: 请用通俗易懂的语言描述这张图片}, { type: image_url, image_url: { url: fdata:image/jpeg;base64,{base64_image} } } ] } ] ) description response.choices[0].message.content print(f 图片描述{description}) # 2. 文本转语音 audio_response client.audio.speech.create( modeltts-1, voicealloy, inputdescription ) audio_response.stream_to_file(explanation.mp3) print(✅ 语音讲解已保存explanation.mp3) return description场景 2语音提问 图像回答def draw_from_voice_query(query): 语音提问生成图像回答 # 1. 语音转文本 response client.chat.completions.create( modelgpt-4o, messages[ {role: user, content: f请描述这个场景{query}} ] ) description response.choices[0].message.content # 2. 生成图像需要 DALL-E 3 image_response client.images.generate( modeldall-e-3, promptdescription, n1, size1024x1024 ) image_url image_response.data[0].url print(f✅ 图像已生成{image_url}) return image_url 进阶技巧1. 成本控制# 使用 GPT-4o mini便宜 60 倍 response client.chat.completions.create( modelgpt-4o-mini, # 而不是 gpt-4o messages[...], max_tokens500 ) # 价格对比 # GPT-4o: $2.50 / 1M tokens # GPT-4o mini: $0.15 / 1M tokens ← 便宜 16 倍2. 批量处理import asyncio from openai import AsyncOpenAI client AsyncOpenAI(api_keyAPI_KEY) async def batch_process(images): 批量处理图片 tasks [] for image_path in images: base64_image encode_image(image_path) task client.chat.completions.create( modelgpt-4o, messages[ { role: user, content: [ {type: text, text: 描述这张图片}, {type: image_url, image_url: {url: fdata:image/jpeg;base64,{base64_image}}} ] } ] ) tasks.append(task) # 并发执行 results await asyncio.gather(*tasks) for i, result in enumerate(results): print(f图片 {i1}: {result.choices[0].message.content}) # 使用 images [img1.jpg, img2.jpg, img3.jpg] asyncio.run(batch_process(images))3. 错误处理from openai import OpenAIError def safe_api_call(func, *args, max_retries3, **kwargs): 安全的 API 调用自动重试 for attempt in range(max_retries): try: return func(*args, **kwargs) except OpenAIError as e: print(f❌ API 调用失败第 {attempt1} 次: {e}) if attempt max_retries - 1: raise time.sleep(2 ** attempt) # 指数退避4. 本地部署免费替代# 使用 Ollama Llama 3.2免费 from openai import OpenAI # 指向本地 Ollama 服务 client OpenAI( base_urlhttp://localhost:11434/v1, api_keyollama # 任意值 ) response client.chat.completions.create( modelllama3.2-vision, # 多模态模型 messages[ {role: user, content: 描述这张图片}, ] ) print(response.choices[0].message.content) 性能对比速度对比GPT-4o: 文本响应1-2 秒 图像理解3-5 秒 语音生成2-3 秒 GPT-4o mini: 文本响应0.5-1 秒 图像理解2-3 秒 语音生成1-2 秒 本地 Llama 3.2: 文本响应5-10 秒取决于 GPU 图像理解10-15 秒成本对比每天 1000 次请求GPT-4o: $250/月 ████████████████████████████████████████ GPT-4o mini: $15/月 ██ (便宜 16 倍) 本地部署 $0/月 (硬件成本另算) 实战建议1. 模型选择需要最佳性能 → GPT-4o 需要低成本 → GPT-4o mini推荐 需要隐私/离线 → Llama 3.2本地部署 需要超长上下文 → Gemini 1.5 Pro100 万 token2. 最佳实践# 1. 始终使用流式输出用户体验好 response client.chat.completions.create( modelgpt-4o-mini, # 用 mini 省钱 messages[...], streamTrue # 流式输出 ) # 2. 限制 max_tokens控制成本 max_tokens500 # 够用就行 # 3. 添加系统提示词提高质量 messages[ {role: system, content: 你是一个专业的助手回答要简洁准确}, {role: user, content: ...} ] # 4. 错误重试提高稳定性 from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min2, max10)) def call_api(): return client.chat.completions.create(...) 完整项目GitHub 完整代码https://github.com/Lee985-cmd/AI-30-Day-Challenge包含多模态 AI 助手文本 图像 语音拍照解题应用代码调试工具语音对话系统 延伸阅读30 天 AI 挑战教程https://blog.csdn.net/m0_67081842评论区留言你想用多模态 AI 做什么拍照解题语音助手代码调试其他创意欢迎分享你的想法⭐如果这篇文章帮到你了请 Star GitHub 项目支持一下 Star 链接已有 12 人 Star你的支持是我持续更新的动力