Skip to content

ShangtanLin/summary-agent

Repository files navigation

Summary Agent

基于 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(知乎登录功能需要)

安装步骤

  1. 克隆项目
git clone https://github.com/your-username/TopicPush-VideoSummary-Agent.git
cd TopicPush-VideoSummary-Agent
  1. 安装依赖
# 使用 uv(推荐)
uv sync

# 或使用 pip
pip install -r requirements.txt
  1. 安装 Playwright 浏览器
playwright install chromium
  1. 配置环境变量

创建 .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
  1. 启动服务
python main.py

服务将在 http://0.0.0.0:9000 启动。

健康检查

curl http://localhost:9000/health

API 文档

发送消息

POST /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

工作流说明

意图识别(Intent)

采用混合策略:

  • 关键词匹配:毫秒级响应,覆盖常见意图
  • LLM 备用:复杂场景的准确识别

意图类型:

  • [VIDEO_SEARCH]:搜索/找视频
  • [VIDEO_SUMMARY]:总结视频内容
  • [ZHIHU_HOT]:获取知乎热榜
  • [NORMAL_CHAT]:简单闲聊

任务规划(Planner)

将用户需求拆解为 JSON 格式的任务清单:

["[ZHIHU_HOT]: 获取知乎热榜", "[RESPOND]: 回复用户"]

任务执行(Worker)

按任务清单逐项执行,通过 MCP 调用工具:

  • 支持自主循环(执行完一项后继续下一项)
  • 支持中断检测和部分结果保存
  • 支持多轮工具调用

MCP 工具列表

工具 功能
get_bili_meta 获取 B站视频元数据
list_favorites 获取 B站收藏夹列表
get_zhihu_hot 获取知乎实时热榜
zhihu_login 启动知乎登录浏览器
save_file 保存文件到本地
send_email 发送邮件

注意事项

  1. 知乎登录:首次使用知乎热榜功能需要扫码登录,Cookie 会保存到 zhihu_cookie.txt
  2. Redis 连接:确保 Redis 服务已启动且可访问
  3. API Key:需要配置兼容 OpenAI 格式的 LLM API

About

基于LangGraph + MCP + FastAPI构建的智能总结助手

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages