File size: 8,309 Bytes
2705160
 
62ad9da
 
 
2705160
 
 
 
d123508
 
 
2705160
 
adec1cb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
---
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的使用条款和隐私政策。