项目实战:用Phi-3.5-vision-instruct构建一个智能会议纪要生成器,只需100行代码!
项目构想:我们要做什么?
在现代职场中,会议是信息传递和决策制定的重要场景,但冗长的会议内容往往让人难以快速抓住重点。为了解决这一问题,我们设计了一个“智能会议纪要生成器”。该应用能够通过分析会议中的幻灯片或白板照片,自动生成简洁、准确的会议纪要。
输入与输出
- 输入:用户上传的会议幻灯片或白板照片(支持多张图片)。
- 输出:生成的会议纪要文本,包括会议主题、关键讨论点和行动项。
技术选型:为什么是Phi-3.5-vision-instruct?
Phi-3.5-vision-instruct是一个轻量级的多模态模型,具有以下核心亮点,非常适合实现我们的项目:
- 多模态支持:能够同时处理图像和文本输入,非常适合分析会议幻灯片或白板内容。
- 高推理能力:模型在复杂推理任务上表现优异,能够从多张图片中提取关键信息并生成连贯的文本。
- 低延迟与高效:适用于计算资源受限的环境,能够快速生成结果。
- 多帧图像理解:支持多张图片的联合分析,适合会议中多张幻灯片的场景。
核心实现逻辑
项目的核心逻辑分为以下几步:
- 加载模型与处理器:使用
transformers
库加载Phi-3.5-vision-instruct模型及其处理器。 - 处理输入图片:将用户上传的图片转换为模型可处理的格式。
- 设计Prompt:通过精心设计的Prompt,引导模型从图片中提取关键信息并生成会议纪要。
- 生成与解析结果:调用模型生成文本,并对输出进行解析和格式化。
关键代码片段
以下是如何调用模型的核心代码:
from PIL import Image
from transformers import AutoModelForCausalLM, AutoProcessor
# 加载模型和处理器
model_id = "microsoft/Phi-3.5-vision-instruct"
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="cuda", trust_remote_code=True)
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True, num_crops=4)
# 处理图片
images = [Image.open("slide1.jpg"), Image.open("slide2.jpg")]
placeholder = "<|image_1|>\n<|image_2|>\n"
# 设计Prompt
messages = [{"role": "user", "content": placeholder + "Generate a concise meeting summary from these slides."}]
prompt = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
# 生成会议纪要
inputs = processor(prompt, images, return_tensors="pt").to("cuda:0")
generate_ids = model.generate(**inputs, max_new_tokens=500, temperature=0.7)
response = processor.batch_decode(generate_ids, skip_special_tokens=True)[0]
print(response)
代码全览与讲解
以下是完整的项目代码,包含详细的中文注释:
# 导入必要的库
from PIL import Image
from transformers import AutoModelForCausalLM, AutoProcessor
def generate_meeting_summary(image_paths):
"""
生成会议纪要的核心函数
:param image_paths: 会议幻灯片或白板图片的路径列表
:return: 生成的会议纪要文本
"""
# 1. 加载模型和处理器
model_id = "microsoft/Phi-3.5-vision-instruct"
model = AutoModelForCausalLM.from_pretrained(
model_id,
device_map="cuda",
trust_remote_code=True,
torch_dtype="auto"
)
processor = AutoProcessor.from_pretrained(
model_id,
trust_remote_code=True,
num_crops=4 # 多帧图片设置为4
)
# 2. 加载图片
images = [Image.open(path) for path in image_paths]
placeholder = "".join([f"<|image_{i+1}|>\n" for i in range(len(images))])
# 3. 设计Prompt
messages = [{
"role": "user",
"content": placeholder + "Generate a concise meeting summary from these slides, including key topics and action items."
}]
prompt = processor.tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
# 4. 生成会议纪要
inputs = processor(prompt, images, return_tensors="pt").to("cuda:0")
generate_ids = model.generate(
**inputs,
max_new_tokens=500,
temperature=0.7,
do_sample=True
)
response = processor.batch_decode(
generate_ids,
skip_special_tokens=True,
clean_up_tokenization_spaces=False
)[0]
return response
# 示例调用
if __name__ == "__main__":
image_paths = ["slide1.jpg", "slide2.jpg", "slide3.jpg"]
summary = generate_meeting_summary(image_paths)
print("生成的会议纪要:\n", summary)
代码讲解
- 模型加载:使用
AutoModelForCausalLM
和AutoProcessor
加载Phi-3.5-vision-instruct模型及其处理器。 - 图片处理:将用户上传的图片加载为PIL对象,并生成对应的占位符。
- Prompt设计:通过聊天模板设计Prompt,明确告诉模型需要生成会议纪要。
- 生成结果:调用模型的
generate
方法生成文本,并对输出进行解码和清理。
效果展示与功能扩展
效果展示
假设输入为三张会议幻灯片,生成的会议纪要可能如下:
会议主题:项目进度汇报
关键讨论点:
1. 当前项目完成度为70%,预计下周完成剩余开发任务。
2. 测试团队反馈了一些关键Bug,需优先修复。
行动项:
1. 开发团队需在周五前修复所有高优先级Bug。
2. 项目经理需在下周一提交最终进度报告。
功能扩展
- 支持语音输入:结合语音识别技术,将会议录音转换为文本,与幻灯片内容结合生成更全面的纪要。
- 多语言支持:扩展模型的多语言能力,支持非英语会议场景。
- 自定义模板:允许用户自定义会议纪要的格式和内容重点。
通过这个项目,我们展示了如何利用Phi-3.5-vision-instruct快速构建一个实用的智能应用。希望这篇文章能激发你的灵感,动手尝试更多有趣的项目!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考