最新好玩的大模型创意项目详细源码
关注公众号“码字读书会”,了解最新消息!
最新大模型创意项目:多模态AI聊天机器人(支持文本/语音/图像交互)
下面是一个结合了多种大模型能力的创意项目,使用Python和Gradio构建,支持文本对话、语音交互和图像理解的多模态AI助手。
项目概述
这个项目整合了以下AI能力:
1. 文本对话(LLM)
2. 语音识别与合成(ASR/TTS)
3. 图像理解与描述(VLM)
4. 多模态交互(同时处理文本、语音和图像输入)
技术栈
- Python
- Gradio (Web界面)
- OpenAI API (或本地部署的LLM)
- Whisper (语音识别)
- Bark/TortoiseTTS (语音合成)
- LLaVA/CLIP (视觉语言模型)
完整源码
python
import gradio as gr
import openai
import os
import numpy as np
from PIL import Image
import torch
import whisper
from transformers import AutoProcessor, AutoModelForCausalLM
from transformers import pipeline
import soundfile as sf
from io import BytesIO
配置API密钥(如果使用本地模型可忽略)
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
openai.api_key = OPENAI_API_KEY
初始化模型
@gr.cache_resource()
def load_models():
语音识别模型
asr_model = whisper.load_model("small")
视觉语言模型(使用LLaVA)
vis_processor = AutoProcessor.from_pretrained("llava-hf/llava-1.5-7b-hf")
vis_model = AutoModelForCausalLM.from_pretrained(
"llava-hf/llava-1.5-7b-hf",
torch_dtype=torch.float16,
device_map="auto"
)
文本生成模型(本地或API)
text_model = pipeline("text-generation", model="gpt2") 可替换为更大的模型
return asr_model, vis_processor, vis_model, text_model
asr_model, vis_processor, vis_model, text_model = load_models()
语音合成函数(简化版,实际应使用Bark或TortoiseTTS)
def text_to_speech(text):
这里应该调用真实的TTS模型
为演示返回一个假音频
sr = 22050
duration = len(text) * 0.1 根据文本长度估计持续时间
t = np.linspace(0, duration, int(sr * duration), False)
audio = np.sin(2 * np.pi * 220 * t) * 0.3 生成简单的正弦波
return (sr, audio)
图像理解函数
def describe_image(image, prompt="描述这张图片"):
if image is None:
return "未提供图片"
准备输入
inputs = vis_processor(prompt, image, return_tensors="pt").to("cuda")
生成描述
generate_ids = vis_model.generate(inputs, max_new_tokens=100)
description = vis_processor.batch_decode(generate_ids, skip_special_tokens=True)0
return description
语音识别函数
def speech_to_text(audio):
if audio is None:
return ""
sr, audio_data = audio
audio_np = np.frombuffer(audio_data, dtype=np.int16).astype(np.float32) / 32768.0
保存临时文件供Whisper处理
with BytesIO() as f:
sf.write(f, audio_np, sr, format='WAV')
f.seek(0)
result = asr_model.transcribe(f.name)
return result"text"
文本生成函数
def generate_text(prompt, history=None):
if history is None:
history =
使用本地模型
response = text_model(
prompt,
max_length=200,
num_return_sequences=1,
pad_token_id=text_model.tokenizer.eos_token_id
)
return response0"generated_text"
多模态处理函数
def multimodal_chat(input_text, input_audio, input_image, chat_history):
处理语音输入
if input_audio is not None:
transcribed_text = speech_to_text(input_audio)
input_text = transcribed_text if not input_text else input_text + "\n" + transcribed_text
处理图像输入
image_description = ""
if input_image is not None:
image_description = describe_image(input_image)
input_text = f"{input_text}\n图片内容: {image_description}" if input_text else f"图片内容: {image_description}"
生成回复
if input_text:
bot_response = generate_text(input_text, chat_history)
语音合成
audio_response = text_to_speech(bot_response)
else:
bot_response = "请提供文本、语音或图片输入"
audio_response = None
更新聊天历史
chat_history.append((input_text, bot_response))
return chat_history, chat_history, audio_response
创建Gradio界面
with gr.Blocks(title="多模态AI助手") as demo:
gr.Markdown(" 🚀 多模态AI聊天机器人")
gr.Markdown("支持文本、语音和图像输入的综合AI助手")
with gr.Row():
with gr.Column(scale=2):
chatbot = gr.Chatbot(label="对话历史", height=500)
msg = gr.Textbox(label="输入文本", placeholder="输入你的问题...")
with gr.Row():
audio_input = gr.Audio(label="语音输入", type="numpy", source="microphone")
image_input = gr.Image(label="图片输入", type="pil")
submit_btn = gr.Button("发送")
clear_btn = gr.Button("清空")
with gr.Column(scale=1):
gr.Markdown(" 实时反馈")
audio_output = gr.Audio(label="语音回复", interactive=False)
gr.Markdown(" 当前输入分析")
input_analysis = gr.Textbox(label="输入解析", interactive=False)
交互逻辑
def process_inputs(text, audio, image, chat_history):
更新输入分析
analysis = ""
if audio is not None:
analysis += "检测到语音输入\n"
if image is not None:
analysis += "检测到图片输入\n"
if text:
analysis += f"文本输入: {text}\n"
return analysis
msg.submit(
multimodal_chat,
msg, audio_input, image_input, chatbot,
chatbot, chatbot, audio_output
)
submit_btn.click(
multimodal_chat,
msg, audio_input, image_input, chatbot,
chatbot, chatbot, audio_output
)
clear_btn.click(lambda: None, None, chatbot, queue=False)
实时输入分析
msg.change(
process_inputs,
msg, audio_input, image_input,
input_analysis
)
audio_input.change(
process_inputs,
msg, audio_input, image_input,
input_analysis
)
image_input.change(
process_inputs,
msg, audio_input, image_input,
input_analysis
)
启动应用
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)
如何运行
1. 安装依赖:
bash
pip install gradio openai whisper transformers soundfile torch torchaudio
2. 运行应用:
bash
python multimodal_chatbot.py
功能扩展建议
1. 本地大模型部署:使用Llama 3、ChatGLM等开源模型替代OpenAI API
2. 记忆功能:添加对话历史记忆和上下文理解
3. 多语言支持:增加多语言识别和生成能力
4. 文档理解:添加PDF/Word文档解析能力
5. API扩展:集成天气、新闻等实时API
6. 3D模型交互**:添加3D模型理解和生成能力
注意事项
1. 完整功能需要较强的GPU资源(推荐A100或类似级别)
2. 首次运行会下载较大的模型文件(总大小约20GB+)
3. 语音合成部分需要额外实现(示例中为简化版)
4. 如果使用API服务,请注意成本控制
替代方案(使用API简化实现)
如果本地运行资源不足,可以使用API版本:
python
替换generate_text函数
def generate_text(prompt, history=None):
response = openai.ChatCompletion.create(
model="gpt-4",
messages={"role": "user", "content": prompt},
max_tokens=500
)
return response.choices0.message.content
替换describe_image函数
def describe_image(image):
buffered = BytesIO()
image.save(buffered, format="PNG")
img_str = base64.b64encode(buffered.getvalue()).decode()
response = openai.ChatCompletion.create(
model="gpt-4-vision-preview",
messages=
{
"role": "user",
"content":
{"type": "text", "text": "详细描述这张图片"},
{"type": "image_url", "image_url": f"data:image/png;base64,{img_str}"}
}
,
max_tokens=500
)
return response.choices0.message.content
这个项目展示了如何将多种大模型能力整合到一个统一界面中,创造丰富的多模态交互体验。你可以根据实际需求和可用资源调整模型选择和功能组合。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)