基于 LangGraph + MCP + FastAPI 构建的视频搜索与总结、话题搜索与总结助手。
设计多节点协作的 AI Agent 工作流,实现复杂任务的自动规划与执行。
涵盖B站视频搜索与总结、知乎热榜获取、文件保存、邮件发送等功能。
- 智能对话:支持自然语言交互,自动识别用户意图
- B站视频搜索与总结:获取视频元数据、视频内容总结
- 知乎热榜获取:实时获取知乎热门话题排行榜
- 文件保存:将内容保存到本地文件
- 邮件发送:通过 SMTP 发送内容到指定邮箱
- 流式响应:SSE 实时推送进度和回复内容
- 会话记忆:Redis 持久化对话历史,支持上下文延续
- 中断恢复:随时中断生成,已输出内容自动保存
用户请求 → FastAPI (SSE流式响应)
↓
Intent (意图识别)
↓
┌─────────┼─────────┐
↓ ↓ ↓
Planner Normal_Chat END
↓ ↓
Worker END
(循环执行)
| 技术 | 用途 |
|---|---|
| LangGraph | 有状态的工作流图,多节点协作与动态路由 |
| MCP | 工具标准化协议,动态工具发现与调用 |
| FastAPI | 高性能异步 API,SSE 流式传输 |
| Redis | 会话状态持久化,对话历史存储 |
| LangChain | LLM 调用封装,消息管理 |
- Python 3.12+
- Redis 服务
- Playwright(知乎登录功能需要)
- 克隆项目
git clone https://github.com/your-username/TopicPush-VideoSummary-Agent.git
cd TopicPush-VideoSummary-Agent- 安装依赖
# 使用 uv(推荐)
uv sync
# 或使用 pip
pip install -r requirements.txt- 安装 Playwright 浏览器
playwright install chromium- 配置环境变量
创建 .env 文件:
# Redis 连接地址
REDIS_URL=redis://:your_password@your_host:6379/0
# LLM API 配置
OPENAI_API_KEY=your_api_key
OPENAI_API_BASE=https://api.deepseek.com/v1
# SMTP 邮件配置(可选)
SMTP_EMAIL=your_email@163.com
SMTP_PASSWORD=your_smtp_password- 启动服务
python main.py服务将在 http://0.0.0.0:9000 启动。
curl http://localhost:9000/healthPOST /api/v1/chat
请求体:
{
"query": "帮我看看知乎热榜",
"user_id": "user_001",
"thread_id": null // 首次对话传 null,后续传返回的 thread_id
}响应:SSE 流式数据,包含进度信号和回复内容
POST /api/v1/stop/{thread_id}
GET /api/v1/history/{thread_id}
POST /api/v1/zhihu/confirm
启动浏览器供用户扫码登录知乎。
TopicPush-VideoSummary-Agent/
├── main.py # FastAPI 应用入口
├── api/
│ └── routes.py # API 路由定义(SSE、历史查询等)
├── config/
│ ├── redis_config.py # Redis 连接管理
│ └── cancel_config.py # 中断信号管理
├── core/agent/
│ ├── graph.py # LangGraph 工作流图定义
│ ├── state.py # Agent 状态结构
│ ├── model.py # LLM 实例配置
│ ├── mcp/
│ │ ├── mcp_client.py # MCP 客户端(工具发现)
│ │ └── mcp_server.py # MCP 服务端(工具实现)
│ ├── node/
│ │ ├── intent.py # 意图识别节点
│ │ ├── planner.py # 任务规划节点
│ │ ├── worker.py # 任务执行节点
│ │ └── normal_chat.py # 普通对话节点
│ └── tools/
│ └── bilibili.py # B站工具(模拟数据)
├── zhihu/
│ └── zhihu_login_test.py # 知乎登录脚本
├── schemas/
│ └── chat.py # 请求/响应数据模型
├── output/ # 文件保存目录
├── .env # 环境变量配置
├── pyproject.toml # 项目依赖配置
└── README.md
采用混合策略:
- 关键词匹配:毫秒级响应,覆盖常见意图
- LLM 备用:复杂场景的准确识别
意图类型:
[VIDEO_SEARCH]:搜索/找视频[VIDEO_SUMMARY]:总结视频内容[ZHIHU_HOT]:获取知乎热榜[NORMAL_CHAT]:简单闲聊
将用户需求拆解为 JSON 格式的任务清单:
["[ZHIHU_HOT]: 获取知乎热榜", "[RESPOND]: 回复用户"]按任务清单逐项执行,通过 MCP 调用工具:
- 支持自主循环(执行完一项后继续下一项)
- 支持中断检测和部分结果保存
- 支持多轮工具调用
| 工具 | 功能 |
|---|---|
get_bili_meta |
获取 B站视频元数据 |
list_favorites |
获取 B站收藏夹列表 |
get_zhihu_hot |
获取知乎实时热榜 |
zhihu_login |
启动知乎登录浏览器 |
save_file |
保存文件到本地 |
send_email |
发送邮件 |
- 知乎登录:首次使用知乎热榜功能需要扫码登录,Cookie 会保存到
zhihu_cookie.txt - Redis 连接:确保 Redis 服务已启动且可访问
- API Key:需要配置兼容 OpenAI 格式的 LLM API