Spaces:
Sleeping
Sleeping
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的使用条款和隐私政策。 |