hugh2023
Add multi-modal agent system with media analysis, web scraping, and enhanced configuration management
adec1cb
---
title: Template Final Assignment
emoji: 🕵🏻‍♂️
colorFrom: indigo
colorTo: indigo
sdk: gradio
sdk_version: 5.25.2
app_file: app.py
pinned: false
hf_oauth: true
# optional, default duration is 8 hours/480 minutes. Max duration is 30 days/43200 minutes.
hf_oauth_expiration_minutes: 480
---
# 多模态智能体系统 (Multi-Modal Agent System)
一个基于Hugging Face和LangGraph的智能多模态智能体系统,能够理解视频、图片,并使用搜索引擎回答问题。
## 🚀 功能特性
### 🎥 视频理解与分析
- **关键帧提取**: 自动提取视频关键帧进行分析
- **视频描述**: 生成视频内容的自然语言描述
- **音频分析**: 分析视频的音频信息
- **时长统计**: 获取视频的基本信息(时长、帧率、分辨率等)
### 🖼️ 图像识别与描述
- **图像描述**: 使用BLIP模型生成图像的自然语言描述
- **对象检测**: 检测图像中的物体和位置
- **图像分类**: 对图像进行分类识别
- **OCR文本提取**: 从图像中提取文字内容
- **情感分析**: 分析图像中的情感元素
### 📄 PDF文档处理
- **PDF下载**: 从URL下载PDF文档
- **文本提取**: 从PDF中提取文本内容
- **结构分析**: 分析PDF文档结构和元数据
- **内容搜索**: 在PDF中搜索特定文本
- **图像提取**: 从PDF中提取图像
- **内容总结**: 自动总结PDF文档内容
### 🌐 网页内容分析
- **网页抓取**: 获取网页内容和结构
- **文本提取**: 从网页中提取纯文本内容
- **结构分析**: 分析网页的标题、表单、表格等结构
- **内容搜索**: 在网页中搜索特定文本
- **链接提取**: 提取网页中的所有链接
- **内容总结**: 自动总结网页内容
- **可访问性检查**: 检查网页的可访问性问题
### 📺 YouTube视频处理
- **视频信息获取**: 获取YouTube视频的标题、作者、时长、观看次数等
- **视频下载**: 下载YouTube视频到本地
- **音频提取**: 从YouTube视频中提取音频
- **缩略图下载**: 下载YouTube视频缩略图
- **视频搜索**: 搜索YouTube视频
- **评论分析**: 分析YouTube视频评论
- **播放列表处理**: 获取播放列表信息和视频列表
### 📚 Wikipedia百科处理
- **页面搜索**: 搜索Wikipedia页面
- **内容获取**: 获取Wikipedia页面完整内容
- **摘要提取**: 获取页面摘要信息
- **分类获取**: 获取页面分类信息
- **链接提取**: 获取页面相关链接
- **搜索建议**: 获取搜索建议
- **英文版本**: 支持英文Wikipedia搜索
- **随机页面**: 获取随机Wikipedia页面
- **地理搜索**: 根据坐标搜索附近页面
### 🔍 智能搜索引擎
- **网络搜索**: 使用DuckDuckGo进行实时网络搜索
- **图像搜索**: 搜索相关图像资源
- **视频搜索**: 搜索相关视频内容
- **智能查询**: 根据问题自动构建搜索查询
### 🤖 LangGraph工作流编排
- **状态管理**: 使用AgentState管理智能体状态
- **工作流节点**: 媒体分类 → 媒体分析 → 信息搜索 → 工具使用 → 答案合成
- **智能路由**: 根据问题类型自动选择合适的处理路径
### 🛠️ 丰富工具集
- **文本分析**: 情感分析、关键词提取、文本摘要
- **翻译工具**: 多语言文本翻译
- **数学计算**: 安全的数学表达式计算
- **天气查询**: 实时天气信息获取
## 📋 系统架构
```
用户问题 → 媒体分类 → 媒体分析 → 信息搜索 → 工具使用 → 答案合成 → 最终答案
↓ ↓ ↓ ↓ ↓ ↓
文本/图片/视频/PDF/网页/YouTube/Wikipedia 图像/视频/PDF/网页/YouTube/Wikipedia处理 网络搜索 专用工具 信息整合 自然语言回答
```
## 🛠️ 安装与配置
### 1. 环境要求
- Python 3.8+
- CUDA支持(可选,用于GPU加速)
### 2. 安装依赖
```bash
pip install -r requirements.txt
```
### 3. 环境变量配置
创建 `.env` 文件并配置以下变量:
```env
# OpenAI API配置
OPENAI_API_KEY=your_openai_api_key_here
# Hugging Face配置(可选)
HUGGINGFACE_API_KEY=your_huggingface_api_key_here
# 搜索引擎配置(可选)
SERPER_API_KEY=your_serper_api_key_here
# 调试配置
DEBUG=True
LOG_LEVEL=INFO
```
### 4. 运行系统
```bash
python app.py
```
## 🎯 使用示例
### 基本使用
```python
from app import MultiModalAgent
# 初始化智能体
agent = MultiModalAgent()
# 文本问题
answer = agent("什么是人工智能?")
# 图像问题
answer = agent("这张图片里有什么?", "https://example.com/image.jpg")
# 视频问题
answer = agent("这个视频在讲什么?", "https://youtube.com/watch?v=example")
# 网页问题
answer = agent("这个网页的主要内容是什么?", "https://example.com")
# YouTube问题
answer = agent("这个YouTube视频的信息是什么?", "https://www.youtube.com/watch?v=example")
# Wikipedia问题
answer = agent("Wikipedia关于人工智能的信息是什么?")
```
### 高级功能
```python
# 情感分析
answer = agent("分析这段文字的情感", "这是一段需要分析的文本")
# 关键词提取
answer = agent("提取这段文字的关键词", "这是一段需要提取关键词的文本")
# 文本摘要
answer = agent("总结这段文字", "这是一段很长的文字需要总结...")
```
## 📊 支持的模型
### 图像处理模型
- **BLIP**: Salesforce/blip-image-captioning-base
- **ResNet**: microsoft/resnet-50
- **DETR**: facebook/detr-resnet-50
- **GIT**: microsoft/git-base
### 文本处理模型
- **情感分析**: cardiffnlp/twitter-roberta-base-sentiment-latest
- **命名实体识别**: dbmdz/bert-large-cased-finetuned-conll03-english
- **文本摘要**: facebook/bart-large-cnn
- **翻译**: Helsinki-NLP/opus-mt-en-zh
### 视频处理
- **MoviePy**: 视频编辑和处理
- **OpenCV**: 计算机视觉处理
- **PyTube**: YouTube视频下载
## 🔧 自定义扩展
### 添加新工具
```python
from tools import ToolManager
class CustomTools:
@staticmethod
@tool
def custom_function(input_text: str) -> str:
"""自定义工具函数"""
# 实现你的逻辑
return "处理结果"
# 注册工具
tool_manager = ToolManager()
tool_manager.tools["custom_function"] = CustomTools.custom_function
```
### 修改工作流
```python
def _build_workflow(self) -> StateGraph:
workflow = StateGraph(AgentState)
# 添加自定义节点
workflow.add_node("custom_node", self._custom_processing)
# 修改工作流路径
workflow.add_edge("analyze_media", "custom_node")
workflow.add_edge("custom_node", "search_info")
return workflow.compile()
```
## 📈 性能优化
### GPU加速
系统会自动检测CUDA可用性并使用GPU加速:
```python
device = 0 if torch.cuda.is_available() else -1
```
### 缓存机制
- 模型缓存:自动缓存下载的模型
- 结果缓存:缓存分析结果避免重复计算
### 内存优化
- 图像尺寸限制:自动调整大图像尺寸
- 视频帧采样:智能选择关键帧进行分析
## 🐛 故障排除
### 常见问题
1. **OpenAI API错误**
- 检查API密钥是否正确
- 确认账户余额充足
2. **模型下载失败**
- 检查网络连接
- 尝试使用镜像源
3. **内存不足**
- 减少批处理大小
- 使用CPU模式运行
4. **视频处理失败**
- 检查视频格式是否支持
- 确认视频文件完整性
### 调试模式
设置环境变量启用调试模式:
```env
DEBUG=True
LOG_LEVEL=DEBUG
```
## 🤝 贡献指南
欢迎提交Issue和Pull Request来改进这个项目!
### 开发环境设置
1. Fork项目
2. 创建功能分支
3. 提交更改
4. 创建Pull Request
## 📄 许可证
本项目采用MIT许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🙏 致谢
- [Hugging Face](https://huggingface.co/) - 提供优秀的预训练模型
- [LangGraph](https://github.com/langchain-ai/langgraph) - 工作流编排框架
- [LangChain](https://langchain.com/) - LLM应用开发框架
- [Gradio](https://gradio.app/) - 快速构建Web界面
---
**注意**: 这是一个教育项目,请确保遵守相关API的使用条款和隐私政策。