从链接开始学习 — 输入视频链接,AI 帮你提取知识、整理笔记、对话答疑。
- 视频内容解析 — 支持 Bilibili、YouTube 等 30+ 平台,自动提取字幕与元数据
- 结构化笔记生成 — 13 种模板(摘要、时间线、闪卡、测验等),3 种必选 + 9 种可选,SSE 流式输出
- AI 对话答疑 — LangGraph Agent,7 个工具(内容查询、混合检索、联网搜索、SQL 查询等),7 层中间件链
- 混合检索 — BM25 关键词 + 语义向量 RRF 融合,可选 Qwen3-Reranker 重排序
- 长期记忆 — 跨会话持久化学习偏好与知识,LLM 驱动记忆提取
- 联网搜索 — 支持 Tavily/DuckDuckGo 搜索 + Tavily/Jina 网页抓取,无需 API Key 即可用
- 会话管理 — 多会话历史、一键恢复对话上下文、URL 去重检测
- 暗色模式 — 毛玻璃风格 UI,亮/暗主题切换
Frontend (Next.js 14) ──SSE──▶ FastAPI Gateway (:8000)
├── Content Pipeline (parser, downloader, subtitle, transcriber, templates)
├── Session Service (CRUD + state)
├── LangGraph Agent Engine
│ ├── LeadAgent (StateGraph)
│ ├── Tools (3 常驻 + 4 条件)
│ ├── Middlewares (5 常驻 + 2 条件)
│ ├── Checkpointer (SQLite)
│ └── StreamBridge + RunManager
└── Storage Layer
├── SQLite (sessions, contents, checkpoints)
└── ChromaDB (BM25 + 语义向量混合搜索)
Model Service (Docker, :8001) ◀──HTTP── Backend
├── Qwen3-Embedding-0.6B (POST /v1/embeddings)
└── Qwen3-Reranker-0.6B (POST /v1/rerank)
三层架构:Next.js 14 前端、FastAPI + LangGraph 后端、SQLite + ChromaDB 存储层。视频解析与内容生成模块直接集成在后端 app/services/ 中。
- Python 3.12+
- Node.js 18+
- Docker(用于 Model Service)
- GPU(推荐,用于嵌入/重排序模型)
- LLM API(OpenAI 兼容接口,用于内容生成和 Agent 对话)
cd backend
cp .env.example .env编辑 .env,填入以下必要配置:
# 内容生成 LLM
CONTENT_LLM_PROVIDER=openai
CONTENT_LLM_API_KEY=sk-xxx
CONTENT_LLM_BASE_URL=https://api.openai.com/v1
CONTENT_LLM_MODEL=gpt-4o
# Agent 对话 LLM
AGENT_LLM_PROVIDER=openai
AGENT_LLM_API_KEY=sk-xxx
AGENT_LLM_MODEL=gpt-4o
# 联网搜索(可选,留空则使用免费回退方案)
TAVILY_API_KEY=其余配置(Model Service、嵌入、记忆、摘要等)使用默认值即可。
一条命令启动所有服务:
docker compose up服务启动后访问 http://localhost:3000。
# 终端 1:Model Service(嵌入 + 重排序)
docker compose up models
# 终端 2:后端
cd backend && uvicorn app.main:app --reload --port 8000
# 终端 3:前端
cd web && npm install && npm run dev打开 http://localhost:3000 即可使用。
LinkStart/
├── backend/
│ ├── app/ # FastAPI 路由、服务、依赖注入
│ │ ├── models/ # SQLAlchemy 数据模型
│ │ ├── routers/ # API 路由(sessions, content, threads)
│ │ └── services/ # 业务逻辑(content_pipeline, subtitle, templates 等)
│ ├── agent/ # LangGraph Agent(StateGraph、Tools、Middlewares、Memory)
│ ├── runtime/ # StreamBridge、RunManager、Worker
│ └── db/ # ChromaDB 客户端
├── web/ # Next.js 14 前端
│ └── src/
│ ├── app/ # App Router
│ ├── components/ # React 组件
│ ├── hooks/ # useChat、useSSEStream、useContentGeneration 等
│ └── lib/ # 工具函数
├── model_service/ # 独立嵌入/重排序模型服务(Docker)
├── e2e/ # Playwright E2E 测试
├── docs/ # 设计文档与规范
├── docker-compose.yml
├── Dockerfile.backend
└── Dockerfile.web
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/v1/sessions |
创建会话,流式生成内容(SSE) |
| GET | /api/v1/sessions/check-duplicate |
检查 URL 是否已有会话 |
| GET | /api/v1/sessions |
获取会话列表(分页 + 标签过滤) |
| GET | /api/v1/sessions/{id} |
获取会话详情(含聊天历史) |
| DELETE | /api/v1/sessions/{id} |
删除会话及关联数据 |
| GET | /api/v1/content/templates |
获取内容模板列表 |
| POST | /api/v1/content/generate |
生成可选内容(SSE) |
| POST | /api/v1/content/retry |
重试失败内容(SSE) |
| POST | /api/v1/threads/{thread_id}/runs/stream |
发送消息,流式 Agent 回复(SSE) |
| POST | /api/v1/threads/{thread_id}/runs/{run_id}/cancel |
取消正在运行的 Agent |
| Tool | 功能 | 条件 |
|---|---|---|
get_video_content |
按类型获取视频笔记内容 | 始终可用 |
search_content |
BM25+语义混合检索字幕内容 | 始终可用 |
generate_content |
触发内容生成 | 始终可用 |
inspect_database |
探索数据库结构(列表/Schema) | 数据库引擎可用时 |
sql_query |
只读 SQL 查询,结构化错误诊断 | 数据库引擎可用时 |
web_search |
联网搜索(Tavily/DuckDuckGo) | 启用时 |
web_fetch |
获取 URL 内容,HTML 转 Markdown | 启用时 |
# 后端
cd backend && pytest
# 前端
cd web && npm run test
# E2E(需要后端 + 前端运行中)
npx playwright test --config=e2e/playwright.config.ts| 层 | 技术 | 用途 |
|---|---|---|
| 前端 | Next.js 14 + React 18 | SSR/CSR |
| 前端 | Tailwind CSS | 样式 |
| 后端 | FastAPI | HTTP 服务 |
| 后端 | LangGraph | Agent 框架 |
| 后端 | SQLAlchemy | SQLite ORM |
| 存储 | SQLite | 关系数据 |
| 存储 | ChromaDB | 向量搜索 |
| 模型服务 | Qwen3-Embedding + Qwen3-Reranker | 嵌入 + 重排序(Docker) |